Work on detecting floor items near analyser
This commit is contained in:
@@ -128,12 +128,12 @@ mcApplyDamage ds mc = case mc ^? mcType . _McSensor of
|
||||
mcSensorUpdate :: Sensor -> Machine -> World -> World
|
||||
mcSensorUpdate se mc w = case se of
|
||||
s@DamageSensor{} -> senseDamage (_sensThreshold se) (_sensType s) mc w
|
||||
ProximitySensor{} -> mcProximitySensorUpdate mc w
|
||||
ProximitySensor {_proxRequirement = x} -> mcProximitySensorUpdate mc x w
|
||||
|
||||
mcProximitySensorUpdate :: Machine -> World -> World
|
||||
mcProximitySensorUpdate mc w = case ( _proxStatus sens
|
||||
mcProximitySensorUpdate :: Machine -> ProximityRequirement -> World -> World
|
||||
mcProximitySensorUpdate mc x w = case ( _proxStatus sens
|
||||
, _sensToggle sens
|
||||
, mcProxTest mc w
|
||||
, mcProxTest mc w x
|
||||
, dist (_crPos ycr) (_mcPos mc) < _proxDist sens
|
||||
) of
|
||||
(_, True, _, _) -> w
|
||||
@@ -160,17 +160,20 @@ sensorReqToString :: ProximityRequirement -> String
|
||||
sensorReqToString = \case
|
||||
RequireHealth x -> "HEALTH ABOVE " ++ show x
|
||||
RequireEquipment x -> itemBaseName x
|
||||
RequireNoItems _ -> "NO NEARBY ITEMS"
|
||||
|
||||
mcProxTest :: Machine -> World -> Bool
|
||||
mcProxTest mc w = case mc ^? mcType . _McSensor . proxRequirement of
|
||||
Just (RequireHealth x) -> _crHP cr >= x
|
||||
Just (RequireEquipment ct) ->
|
||||
mcProxTest :: Machine -> World -> ProximityRequirement -> Bool
|
||||
mcProxTest mc w = \case
|
||||
RequireHealth x -> _crHP cr >= x
|
||||
RequireEquipment ct ->
|
||||
any
|
||||
(\itm -> _itType itm == ct)
|
||||
((\k -> w ^?! cWorld . lWorld . items . ix k) <$> _crInv cr)
|
||||
_ -> False
|
||||
RequireNoItems ps -> (w ^?! cWorld . lWorld . creatures . ix 0 . crInv == mempty)
|
||||
&& not (any ((`pointInPolygon` f ps) . _flItPos) (w ^. cWorld . lWorld . floorItems) )
|
||||
where
|
||||
cr = you w
|
||||
f = fmap ((+ _mcPos mc) . rotateV (_mcDir mc))
|
||||
|
||||
senseDamage :: Int -> SensorType -> Machine -> World -> World
|
||||
senseDamage threshold dt mc =
|
||||
|
||||
Reference in New Issue
Block a user