module Dodge.WorldEvent.Damage ( damThingHitWith ) where import Dodge.Data import Dodge.Creature.State.Data import Geometry import Dodge.Wall.Damage import Control.Lens damThingHitWith :: (Point2 -> Point2 -> Point2 -> DamageType) -> Point2 -> Point2 -> Maybe (Point2, Either Creature Wall) -> World -> World damThingHitWith partDT sp ep mayEiCrWl = case mayEiCrWl of Just (hitp,Left cr ) -> creatures . ix (_crID cr) . crState . crDamage %~ (partDT sp hitp ep :) Just (hitp,Right wl) -> damageWall (partDT sp hitp ep) wl Nothing -> id