Refactor tesla
This commit is contained in:
@@ -0,0 +1,11 @@
|
|||||||
|
module Dodge.ArcStep where
|
||||||
|
import Dodge.Data
|
||||||
|
import Dodge.Tesla.Arc.Default
|
||||||
|
|
||||||
|
import Control.Monad.State
|
||||||
|
import System.Random
|
||||||
|
|
||||||
|
doStep :: NextArcStep -> ItemParams -> World -> ArcStep -> State StdGen (Maybe ArcStep)
|
||||||
|
doStep nas = case nas of
|
||||||
|
DefaultArcStep -> defaultArcStep
|
||||||
|
EndArc -> const $ const $ const $ return Nothing
|
||||||
@@ -33,7 +33,7 @@ itemEffect cr it w = case it ^? itUse of
|
|||||||
Just LeftUse {} -> doequipmentchange
|
Just LeftUse {} -> doequipmentchange
|
||||||
Just EquipUse{} -> doequipmentchange
|
Just EquipUse{} -> doequipmentchange
|
||||||
-- ConsumeUse will cause problems if the item is not selected
|
-- ConsumeUse will cause problems if the item is not selected
|
||||||
Just (ConsumeUse eff) -> setuhamdown $ hammerTest $ (useC eff) it cr . rmInvItem (_crID cr) (crSel cr)
|
Just (ConsumeUse eff) -> setuhamdown $ hammerTest $ useC eff it cr . rmInvItem (_crID cr) (crSel cr)
|
||||||
Just NoUse -> setuhamdown w
|
Just NoUse -> setuhamdown w
|
||||||
Nothing -> setuhamdown w
|
Nothing -> setuhamdown w
|
||||||
where
|
where
|
||||||
|
|||||||
@@ -6,6 +6,11 @@ import Geometry.Vector
|
|||||||
import LensHelp
|
import LensHelp
|
||||||
|
|
||||||
import qualified Data.Map.Strict as M
|
import qualified Data.Map.Strict as M
|
||||||
|
damageCrWlID :: Damage -> CrWlID -> World -> World
|
||||||
|
damageCrWlID dam crwl = case crwl of
|
||||||
|
NothingID -> id
|
||||||
|
CrID cid -> creatures . ix cid . crState . csDamage .:~ dam
|
||||||
|
WlID wlid -> wallDamages . ix wlid .:~ dam
|
||||||
|
|
||||||
damageCrWall :: Damage -> Either Creature Wall -> World -> World
|
damageCrWall :: Damage -> Either Creature Wall -> World -> World
|
||||||
damageCrWall dt (Left cr) = creatures . ix (_crID cr) . crState . csDamage .:~ dt
|
damageCrWall dt (Left cr) = creatures . ix (_crID cr) . crState . csDamage .:~ dt
|
||||||
|
|||||||
+5
-9
@@ -10,6 +10,8 @@ circular imports are probably not a good idea.
|
|||||||
{-# LANGUAGE DerivingStrategies #-}
|
{-# LANGUAGE DerivingStrategies #-}
|
||||||
module Dodge.Data
|
module Dodge.Data
|
||||||
( module Dodge.Data
|
( module Dodge.Data
|
||||||
|
, module Dodge.Data.ArcStep
|
||||||
|
, module Dodge.Data.CrWlID
|
||||||
, module Dodge.Data.Item.HeldUse
|
, module Dodge.Data.Item.HeldUse
|
||||||
, module Dodge.Data.Item.HeldScroll
|
, module Dodge.Data.Item.HeldScroll
|
||||||
, module Dodge.Data.Item.Consumption
|
, module Dodge.Data.Item.Consumption
|
||||||
@@ -59,6 +61,8 @@ module Dodge.Data
|
|||||||
, module Dodge.Data.RadarBlip
|
, module Dodge.Data.RadarBlip
|
||||||
, module Dodge.Data.PathGraph
|
, module Dodge.Data.PathGraph
|
||||||
) where
|
) where
|
||||||
|
import Dodge.Data.CrWlID
|
||||||
|
import Dodge.Data.ArcStep
|
||||||
import Dodge.Data.Item.HeldUse
|
import Dodge.Data.Item.HeldUse
|
||||||
import Dodge.Data.Item.HeldScroll
|
import Dodge.Data.Item.HeldScroll
|
||||||
import Dodge.Data.Item.Consumption
|
import Dodge.Data.Item.Consumption
|
||||||
@@ -656,17 +660,10 @@ data ItemParams
|
|||||||
{ _currentArc :: Maybe [ArcStep]
|
{ _currentArc :: Maybe [ArcStep]
|
||||||
, _arcSize :: Float
|
, _arcSize :: Float
|
||||||
, _arcNumber :: Int
|
, _arcNumber :: Int
|
||||||
, _newArcStep :: ItemParams -> World
|
, _newArcStep :: NextArcStep --ItemParams -> World -> ArcStep -> State StdGen (Maybe ArcStep)
|
||||||
-> ArcStep
|
|
||||||
-> State StdGen (Maybe ArcStep)
|
|
||||||
, _previousArcEffect :: PreviousArcEffect
|
, _previousArcEffect :: PreviousArcEffect
|
||||||
}
|
}
|
||||||
| ParamMID {_paramMID :: Maybe Int}
|
| ParamMID {_paramMID :: Maybe Int}
|
||||||
data ArcStep = ArcStep
|
|
||||||
{ _asPos :: Point2
|
|
||||||
, _asDir :: Float
|
|
||||||
, _asObject :: Maybe (Either Creature Wall)
|
|
||||||
}
|
|
||||||
data PreviousArcEffect = NoPreviousArcEffect | PerturbTillBreakPreviousArc
|
data PreviousArcEffect = NoPreviousArcEffect | PerturbTillBreakPreviousArc
|
||||||
data Modification
|
data Modification
|
||||||
= ModIDTimerPoint3Bool
|
= ModIDTimerPoint3Bool
|
||||||
@@ -1291,7 +1288,6 @@ makeLenses ''ScreenLayer
|
|||||||
makeLenses ''Beam
|
makeLenses ''Beam
|
||||||
makeLenses ''BeamType
|
makeLenses ''BeamType
|
||||||
makeLenses ''WorldBeams
|
makeLenses ''WorldBeams
|
||||||
makeLenses ''ArcStep
|
|
||||||
makeLenses ''EquipParams
|
makeLenses ''EquipParams
|
||||||
makeLenses ''TerminalCommand
|
makeLenses ''TerminalCommand
|
||||||
makeLenses ''TerminalInput
|
makeLenses ''TerminalInput
|
||||||
|
|||||||
@@ -0,0 +1,14 @@
|
|||||||
|
{-# LANGUAGE TemplateHaskell #-}
|
||||||
|
{-# LANGUAGE StrictData #-}
|
||||||
|
module Dodge.Data.ArcStep where
|
||||||
|
import Dodge.Data.CrWlID
|
||||||
|
import Geometry.Data
|
||||||
|
import Control.Lens
|
||||||
|
data ArcStep = ArcStep
|
||||||
|
{ _asPos :: Point2
|
||||||
|
, _asDir :: Float
|
||||||
|
, _asObject :: CrWlID --Maybe (Either Creature Wall)
|
||||||
|
}
|
||||||
|
data NextArcStep = EndArc
|
||||||
|
| DefaultArcStep
|
||||||
|
makeLenses ''ArcStep
|
||||||
@@ -0,0 +1,6 @@
|
|||||||
|
{-# LANGUAGE TemplateHaskell #-}
|
||||||
|
{-# LANGUAGE StrictData #-}
|
||||||
|
module Dodge.Data.CrWlID where
|
||||||
|
import Control.Lens
|
||||||
|
data CrWlID = CrID Int | WlID Int | NothingID
|
||||||
|
makeLenses ''CrWlID
|
||||||
+15
-9
@@ -7,6 +7,7 @@ import RandomHelp
|
|||||||
import Picture
|
import Picture
|
||||||
import Geometry
|
import Geometry
|
||||||
import LensHelp
|
import LensHelp
|
||||||
|
import Dodge.ArcStep
|
||||||
--import Dodge.Data
|
--import Dodge.Data
|
||||||
--import Geometry
|
--import Geometry
|
||||||
--import LensHelp
|
--import LensHelp
|
||||||
@@ -54,11 +55,15 @@ moveTeslaArc thearc w pt
|
|||||||
makeaspark = randSpark ELECTRICAL rspeed rcol rdir lp
|
makeaspark = randSpark ELECTRICAL rspeed rcol rdir lp
|
||||||
makesparks = makeaspark . makeaspark . makeaspark
|
makesparks = makeaspark . makeaspark . makeaspark
|
||||||
(lp,ld) = case last thearc of
|
(lp,ld) = case last thearc of
|
||||||
ArcStep lp' ld' Nothing -> (lp',ld')
|
ArcStep lp' ld' NothingID -> (lp',ld')
|
||||||
ArcStep lp' ld' (Just (Left cr)) -> (lp' -.- (_crRad cr + 1) *.* unitVectorAtAngle ld',ld'+pi)
|
ArcStep lp' ld' (CrID crid) -> case w ^? creatures . ix crid of
|
||||||
ArcStep lp' ld' (Just (Right _)) -> (lp' -.- 2 *.* unitVectorAtAngle ld',ld'+pi)
|
Nothing -> (lp',ld')
|
||||||
damthings (ArcStep _ _ Nothing) = id
|
Just cr -> (lp' -.- (_crRad cr + 1) *.* unitVectorAtAngle ld',ld'+pi)
|
||||||
damthings (ArcStep p dir (Just crwl)) = damageCrWall (thedamage p dir) crwl
|
ArcStep lp' ld' (WlID wlid) -> case w ^? walls . ix wlid of
|
||||||
|
Nothing -> (lp',ld')
|
||||||
|
Just _ -> (lp' -.- 2 *.* unitVectorAtAngle ld',ld'+pi)
|
||||||
|
--damthings (ArcStep _ _ NothingID) = id
|
||||||
|
damthings (ArcStep p dir crwl) = damageCrWlID (thedamage p dir) crwl
|
||||||
thedamage p dir = Damage ELECTRICAL 50 (p -.- q) p (p +.+ q) NoDamageEffect
|
thedamage p dir = Damage ELECTRICAL 50 (p -.- q) p (p +.+ q) NoDamageEffect
|
||||||
where
|
where
|
||||||
q = 5 *.* unitVectorAtAngle dir
|
q = 5 *.* unitVectorAtAngle dir
|
||||||
@@ -84,14 +89,14 @@ createArc arcparams w p dir = updateArc arcparams w p dir
|
|||||||
createNewArc :: ItemParams -> World -> Point2 -> Float
|
createNewArc :: ItemParams -> World -> Point2 -> Float
|
||||||
-> State StdGen [ArcStep]
|
-> State StdGen [ArcStep]
|
||||||
createNewArc arcparams w p dir = take (_arcNumber arcparams)
|
createNewArc arcparams w p dir = take (_arcNumber arcparams)
|
||||||
<$> unfoldrMID (_newArcStep arcparams arcparams w) (ArcStep p dir Nothing)
|
<$> unfoldrMID (doStep (_newArcStep arcparams) arcparams w) (ArcStep p dir NothingID)
|
||||||
|
|
||||||
updateArc :: ItemParams
|
updateArc :: ItemParams
|
||||||
-> World
|
-> World
|
||||||
-> Point2
|
-> Point2
|
||||||
-> Float
|
-> Float
|
||||||
-> State StdGen [ArcStep]
|
-> State StdGen [ArcStep]
|
||||||
updateArc ip w p dir = take (_arcNumber ip) <$> zipArcs ip w (ArcStep p dir Nothing) carc
|
updateArc ip w p dir = take (_arcNumber ip) <$> zipArcs ip w (ArcStep p dir NothingID) carc
|
||||||
where
|
where
|
||||||
carc = tail $ fromJust $ _currentArc ip
|
carc = tail $ fromJust $ _currentArc ip
|
||||||
|
|
||||||
@@ -101,10 +106,11 @@ zipArcs :: ItemParams
|
|||||||
-> [ArcStep]
|
-> [ArcStep]
|
||||||
-> State StdGen [ArcStep]
|
-> State StdGen [ArcStep]
|
||||||
zipArcs ip w x (y:ys) = (x :) <$> do
|
zipArcs ip w x (y:ys) = (x :) <$> do
|
||||||
defaultnext <- _newArcStep ip ip w x
|
defaultnext <- doStep (_newArcStep ip) ip w x
|
||||||
case defaultnext of
|
case defaultnext of
|
||||||
Nothing -> return []
|
Nothing -> return []
|
||||||
Just z@(ArcStep _ _ (Just _)) -> return [z]
|
Just z@(ArcStep _ _ (CrID _)) -> return [z]
|
||||||
|
Just z@(ArcStep _ _ (WlID _)) -> return [z]
|
||||||
Just z -> do
|
Just z -> do
|
||||||
p <- randInCirc 5
|
p <- randInCirc 5
|
||||||
let csize = _arcSize ip
|
let csize = _arcSize ip
|
||||||
|
|||||||
@@ -12,7 +12,8 @@ import qualified Data.IntMap.Strict as IM
|
|||||||
|
|
||||||
defaultArcStep :: RandomGen g => ItemParams -> World -> ArcStep
|
defaultArcStep :: RandomGen g => ItemParams -> World -> ArcStep
|
||||||
-> State g (Maybe ArcStep)
|
-> State g (Maybe ArcStep)
|
||||||
defaultArcStep _ _ (ArcStep _ _ (Just _)) = return Nothing
|
defaultArcStep _ _ (ArcStep _ _ (CrID _)) = return Nothing
|
||||||
|
defaultArcStep _ _ (ArcStep _ _ (WlID _)) = return Nothing
|
||||||
defaultArcStep itparams w (ArcStep p dir _) = do
|
defaultArcStep itparams w (ArcStep p dir _) = do
|
||||||
let csize = _arcSize itparams
|
let csize = _arcSize itparams
|
||||||
--rot <- takeOne [pi/4,negate pi/4]
|
--rot <- takeOne [pi/4,negate pi/4]
|
||||||
@@ -29,7 +30,7 @@ defaultArcStep itparams w (ArcStep p dir _) = do
|
|||||||
. mapMaybe (\ q -> sequence $ collidePointWallsFilterStream (const True) p (center +.+ q) w)
|
. mapMaybe (\ q -> sequence $ collidePointWallsFilterStream (const True) p (center +.+ q) w)
|
||||||
-- collidePointWallsWall and wlsnearpoint
|
-- collidePointWallsWall and wlsnearpoint
|
||||||
$ polyCirc 6 csize
|
$ polyCirc 6 csize
|
||||||
f (q,wl) = ArcStep q dir (Just $ Right wl)
|
f (q,wl) = ArcStep q dir (WlID $ _wlID wl)
|
||||||
g cr = ArcStep (_crPos cr +.+ csize *.* unitVectorAtAngle dir) dir (Just $ Left cr)
|
g cr = ArcStep (_crPos cr +.+ csize *.* unitVectorAtAngle dir) dir (CrID $ _crID cr)
|
||||||
return . listToMaybe . sortOn (dist p . (^. asPos))
|
return . listToMaybe . sortOn (dist p . (^. asPos))
|
||||||
$ ArcStep newp dir Nothing : catMaybes [fmap f mwl,fmap g mcr]
|
$ ArcStep newp dir NothingID : catMaybes [fmap f mwl,fmap g mcr]
|
||||||
|
|||||||
@@ -1,12 +1,11 @@
|
|||||||
module Dodge.Tesla.ItemParams where
|
module Dodge.Tesla.ItemParams where
|
||||||
import Dodge.Data
|
import Dodge.Data
|
||||||
import Dodge.Tesla.Arc.Default
|
|
||||||
|
|
||||||
teslaParams :: ItemParams
|
teslaParams :: ItemParams
|
||||||
teslaParams = Arcing
|
teslaParams = Arcing
|
||||||
{ _currentArc = Nothing
|
{ _currentArc = Nothing
|
||||||
, _arcSize = 20
|
, _arcSize = 20
|
||||||
, _arcNumber = 10
|
, _arcNumber = 10
|
||||||
, _newArcStep = defaultArcStep
|
, _newArcStep = DefaultArcStep --defaultArcStep
|
||||||
, _previousArcEffect = NoPreviousArcEffect
|
, _previousArcEffect = NoPreviousArcEffect
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user