Commit before placement refactor

This commit is contained in:
2021-09-28 14:55:22 +01:00
parent 751000636e
commit b8af2ce9d8
16 changed files with 134 additions and 331 deletions
+42 -42
View File
@@ -1,5 +1,5 @@
module Dodge.LevelGen.SwarmPlacement
( swarmPS
( --swarmPS
)
where
import Dodge.Data
@@ -14,44 +14,44 @@ import Data.List
import qualified Data.IntSet as IS
import Control.Lens
swarmPS :: Int -> Point2 -> Float -> Creature -> Placement
swarmPS i p a cr = GroupedPlacement
{ _groupPlacementID = i
, _groupUpdate = setSwarm
-- , _groupPlacementFunc = setSwarm i
, _placementSpot = PS p a $ PutCrit cr
}
setSwarm :: World -> [Placement] -> World
setSwarm w ps = updateCrs w' & creatureGroups %~ IM.insert gid theGroupParams
where
(w', crs) = mapAccumR updateCrit w ps
is = IS.fromList $ map _crID crs
cpos = centroid $ map _crPos crs
gid = IM.newKey (_creatureGroups w')
theGroupParams = CrGroupParams
{ _crGroupParamID = gid
, _crGroupIDs = is
, _crGroupCenter = cpos
, _crGroupUpdate = crGroupUpdateCenter
}
updateCrs w'' = IS.foldl' (\w''' cid -> w''' & creatures . ix cid %~ setSwarmStatus) w'' is
setSwarmStatus = crGroup .~ Swarm {_swarm = is, _crGroupID = gid}
crGroupUpdateCenter :: World -> CrGroupParams -> Maybe CrGroupParams
crGroupUpdateCenter w cgp
| IM.null crs = Nothing
| otherwise = Just $ cgp & crGroupCenter .~
centroid (IM.map _crPos crs)
where
crs = IM.restrictKeys (_creatures w) (_crGroupIDs cgp)
updateCrit :: World -> Placement -> (World, Creature)
updateCrit w pl = (w & creatures %~ IM.insert cid cr
, cr
)
where
p = _psPos $ _placementSpot pl
rot = _psRot $ _placementSpot pl
scr = _unPutCrit $ _psType $ _placementSpot pl
cid = IM.newKey (_creatures w)
cr = scr {_crPos = p,_crOldPos = p,_crDir = rot,_crID = cid}
--swarmPS :: Int -> Point2 -> Float -> Creature -> Placement
--swarmPS i p a cr = GroupedPlacement
-- { _groupPlacementID = i
-- , _groupUpdate = setSwarm
---- , _groupPlacementFunc = setSwarm i
-- , _placementSpot = PS p a $ PutCrit cr
-- }
--setSwarm :: World -> [Placement] -> World
--setSwarm w ps = updateCrs w' & creatureGroups %~ IM.insert gid theGroupParams
-- where
-- (w', crs) = mapAccumR updateCrit w ps
-- is = IS.fromList $ map _crID crs
-- cpos = centroid $ map _crPos crs
-- gid = IM.newKey (_creatureGroups w')
-- theGroupParams = CrGroupParams
-- { _crGroupParamID = gid
-- , _crGroupIDs = is
-- , _crGroupCenter = cpos
-- , _crGroupUpdate = crGroupUpdateCenter
-- }
-- updateCrs w'' = IS.foldl' (\w''' cid -> w''' & creatures . ix cid %~ setSwarmStatus) w'' is
-- setSwarmStatus = crGroup .~ Swarm {_swarm = is, _crGroupID = gid}
--
--crGroupUpdateCenter :: World -> CrGroupParams -> Maybe CrGroupParams
--crGroupUpdateCenter w cgp
-- | IM.null crs = Nothing
-- | otherwise = Just $ cgp & crGroupCenter .~
-- centroid (IM.map _crPos crs)
-- where
-- crs = IM.restrictKeys (_creatures w) (_crGroupIDs cgp)
--
--updateCrit :: World -> Placement -> (World, Creature)
--updateCrit w pl = (w & creatures %~ IM.insert cid cr
-- , cr
-- )
-- where
-- p = _psPos $ _placementSpot pl
-- rot = _psRot $ _placementSpot pl
-- scr = _unPutCrit $ _psType $ _placementSpot pl
-- cid = IM.newKey (_creatures w)
-- cr = scr {_crPos = p,_crOldPos = p,_crDir = rot,_crID = cid}