Add sounds, move data types out into separate folders
This commit is contained in:
+13
-19
@@ -11,13 +11,11 @@ import Dodge.Item.Weapon.BatteryGuns
|
||||
import Dodge.Default
|
||||
import Dodge.Creature.State
|
||||
import Dodge.Creature.Impulse
|
||||
import Dodge.Creature.Damage
|
||||
import Dodge.Movement.Turn
|
||||
import Geometry
|
||||
import LensHelp
|
||||
import qualified IntMapHelp as IM
|
||||
|
||||
import Data.Either
|
||||
import Data.List (partition)
|
||||
import Data.Maybe
|
||||
|
||||
@@ -68,7 +66,7 @@ updateTurret rotSpeed mc w
|
||||
& crDir .~ mcdir
|
||||
& crUpdate .~ stateUpdate followThenClearImpulses
|
||||
& crStance . posture .~ Aiming
|
||||
& crApplyDamage .~ applyNoDamage
|
||||
& crMaterial .~ Crystal
|
||||
Just cid -> w'
|
||||
& creatures . ix cid . crPos .~ mcpos
|
||||
& creatures . ix cid . crDir .~ mcdir
|
||||
@@ -111,7 +109,7 @@ mcTriggerVal :: Machine -> Maybe Bool
|
||||
mcTriggerVal mc = case mc ^. mcSensor of
|
||||
NoSensor -> Nothing
|
||||
s@ProximitySensor{} -> s ^? sensToggle
|
||||
s@SensorToggleAmount{} -> Just $ _sensAmount s > 900
|
||||
s@DamageSensor{} -> Just $ _sensAmount s > 900
|
||||
|
||||
mcPlaySound :: Machine -> World -> World
|
||||
mcPlaySound mc w = case _mcCloseSound mc of
|
||||
@@ -131,12 +129,12 @@ mcApplyDamage ds mc = case _mcSensor mc of
|
||||
mcSensorUpdate :: Machine -> World -> World
|
||||
mcSensorUpdate mc w = case _mcSensor mc of
|
||||
NoSensor -> w
|
||||
SensorToggleAmount{} -> foldr (flip sensorUpdate mc . _dmType) w (_mcDamage mc)
|
||||
s@DamageSensor{} -> senseDamage (_sensType s) mc w
|
||||
ProximitySensor{} -> mcProximitySensorUpdate mc w
|
||||
|
||||
mcProximitySensorUpdate :: Machine -> World -> World
|
||||
mcProximitySensorUpdate mc w = case
|
||||
(_proxStatus sens
|
||||
( _proxStatus sens
|
||||
, _sensToggle sens
|
||||
, mcProxTest mc w
|
||||
, dist (_crPos ycr) (_mcPos mc) < _proxDist sens) of
|
||||
@@ -162,21 +160,17 @@ mcProxTest mc w = case mc ^? mcSensor . proxRequirement of
|
||||
where
|
||||
cr = you w
|
||||
|
||||
|
||||
sensorUpdate :: DamageType -> Machine -> World -> World
|
||||
sensorUpdate damF mc w = w & machines . ix mcid %~ upmc
|
||||
& lightSources . ix lsid %~ upls
|
||||
senseDamage :: DamageType -> Machine -> World -> World
|
||||
senseDamage dt mc = (machines . ix mcid %~ upmc)
|
||||
. updatels
|
||||
where
|
||||
upmc = ( mcSensor . sensAmount %~ \x' -> min 1000 (max 0 (x' - 5 + newSense)) )
|
||||
. ( mcHP -~ sum dam )
|
||||
. (mcDamage .~ [])
|
||||
x = _sensAmount $ _mcSensor mc
|
||||
upmc = mcSensor . sensAmount %~ min 1000 . max 0 . (+ (newsense - 5))
|
||||
mcid = _mcID mc
|
||||
lsid = head (_mcLSs mc)
|
||||
(senseData,dam) = partitionEithers $ map (damageUsing damF) $ _mcDamage mc
|
||||
newSense = sum senseData
|
||||
ni = fromIntegral x / 1000
|
||||
upls = lsParam . lsCol .~ V3 ni ni ni
|
||||
newsense = sum . map _dmAmount $ filter ((== dt) . _dmType) (_mcDamage mc)
|
||||
ni = fromIntegral (_sensAmount $ _mcSensor mc) / 1000
|
||||
updatels = fromMaybe id $ do
|
||||
lsid <- mc ^? mcMounts . ix ObLightSource
|
||||
return $ lightSources . ix lsid . lsParam . lsCol .~ V3 ni ni ni
|
||||
|
||||
damageUsing :: DamageType -> Damage -> Either Int Int
|
||||
damageUsing dt dm
|
||||
|
||||
Reference in New Issue
Block a user