Fix glass debris bug
This commit is contained in:
@@ -8,7 +8,6 @@ import Dodge.Block
|
||||
import Geometry
|
||||
import LensHelp
|
||||
|
||||
import Data.Bifunctor
|
||||
import Control.Monad.State
|
||||
--import Data.Maybe
|
||||
|
||||
@@ -17,7 +16,9 @@ defaultWallDamage dm wl = flip (.) (wallDamageEffect dm wl) $ case _wlMaterial w
|
||||
Stone -> stoneWallDamage dm wl
|
||||
Glass -> windowWallDamage dm wl
|
||||
Dirt -> dirtWallDamage dm wl
|
||||
_ -> second (const 0) . stoneWallDamage dm wl
|
||||
Crystal -> crystalWallDamage dm wl
|
||||
Metal -> stoneWallDamage dm wl
|
||||
Wood -> stoneWallDamage dm wl
|
||||
|
||||
stoneWallDamage :: Damage -> Wall -> World -> (World,Int)
|
||||
stoneWallDamage dm wl = case _dmType dm of
|
||||
@@ -25,17 +26,17 @@ stoneWallDamage dm wl = case _dmType dm of
|
||||
PIERCING -> a d $ colSparkRandDir 0.2 8 pSparkCol outTo (reflDirWall sp p wl) . wlDustAt wl outTo
|
||||
BLUNT -> a d $ wlDustAt wl outTo
|
||||
SHATTERING -> a d $ muchWlDustAt wl outTo
|
||||
CRUSHING -> a d $ id
|
||||
EXPLOSIVE -> a d $ id
|
||||
CUTTING -> a d $ id
|
||||
SPARKING -> a 0 $ id
|
||||
FLAMING -> a 0 $ id
|
||||
ELECTRICAL -> a 0 $ id
|
||||
CONCUSSIVE -> a d $ id
|
||||
TORQUEDAM -> a 0 $ id
|
||||
PUSHDAM -> a 0 $ id
|
||||
POISONDAM -> a 0 $ id
|
||||
ENTERREMENT -> a 0 $ id
|
||||
CRUSHING -> a d id
|
||||
EXPLOSIVE -> a d id
|
||||
CUTTING -> a d id
|
||||
SPARKING -> a 0 id
|
||||
FLAMING -> a 0 id
|
||||
ELECTRICAL -> a 0 id
|
||||
CONCUSSIVE -> a d id
|
||||
TORQUEDAM -> a 0 id
|
||||
PUSHDAM -> a 0 id
|
||||
POISONDAM -> a 0 id
|
||||
ENTERREMENT -> a 0 id
|
||||
where
|
||||
a x f w = (f w,x)
|
||||
d = _dmAmount dm
|
||||
@@ -51,17 +52,17 @@ windowWallDamage dm wl w = w & case _dmType dm of
|
||||
PIERCING -> a d $ dosplint . colSparkRandDir 0.2 8 pSparkCol outTo (reflDirWall sp p wl) . wlDustAt wl outTo
|
||||
BLUNT -> a d $ dosplint . wlDustAt wl outTo
|
||||
SHATTERING -> a d $ dosplint . muchWlDustAt wl outTo
|
||||
CRUSHING -> a d $ dosplint
|
||||
EXPLOSIVE -> a d $ dosplint
|
||||
CUTTING -> a d $ dosplint
|
||||
SPARKING -> a 0 $ id
|
||||
FLAMING -> a 0 $ id
|
||||
ELECTRICAL -> a 0 $ id
|
||||
CONCUSSIVE -> a 0 $ dosplint
|
||||
TORQUEDAM -> a 0 $ id
|
||||
PUSHDAM -> a 0 $ id
|
||||
POISONDAM -> a 0 $ id
|
||||
ENTERREMENT -> a 0 $ id
|
||||
CRUSHING -> a d dosplint
|
||||
EXPLOSIVE -> a d dosplint
|
||||
CUTTING -> a d dosplint
|
||||
SPARKING -> a 0 id
|
||||
FLAMING -> a 0 id
|
||||
ELECTRICAL -> a 0 id
|
||||
CONCUSSIVE -> a 0 dosplint
|
||||
TORQUEDAM -> a 0 id
|
||||
PUSHDAM -> a 0 id
|
||||
POISONDAM -> a 0 id
|
||||
ENTERREMENT -> a 0 id
|
||||
where
|
||||
mbl = do
|
||||
blid <- wl ^? wlStructure . wsBlock
|
||||
@@ -71,34 +72,56 @@ windowWallDamage dm wl w = w & case _dmType dm of
|
||||
a :: Int -> (World -> World) -> World -> (World,Int)
|
||||
a x f w' = (f w',x)
|
||||
dosplint = maybe id splinterBlock mbl
|
||||
-- fromMaybe w $ do
|
||||
-- blid <- wl ^? wlStructure . wsBlock
|
||||
-- bl <- w ^? blocks . ix blid
|
||||
-- return $ splinterBlock bl w
|
||||
-- & blocks . ix blid . blHP %~ min 1
|
||||
sp = _dmFrom dm
|
||||
p = _dmAt dm
|
||||
outTo = p +.+ squashNormalizeV (sp -.- p)
|
||||
pSparkCol = V4 5 1 0.5 2
|
||||
lSparkCol = V4 20 (-5) 0 1
|
||||
|
||||
crystalWallDamage :: Damage -> Wall -> World -> (World,Int)
|
||||
crystalWallDamage dm wl = case _dmType dm of
|
||||
LASERING -> a 0 $ colSparkRandDir 0.2 8 lSparkCol outTo (reflDirWall sp p wl)
|
||||
PIERCING -> a 0 $ colSparkRandDir 0.2 8 pSparkCol outTo (reflDirWall sp p wl) . wlDustAt wl outTo
|
||||
BLUNT -> a 0 $ wlDustAt wl outTo
|
||||
SHATTERING -> a d $ muchWlDustAt wl outTo
|
||||
CRUSHING -> a 0 id
|
||||
EXPLOSIVE -> a 0 id
|
||||
CUTTING -> a 0 id
|
||||
SPARKING -> a 0 id
|
||||
FLAMING -> a 0 id
|
||||
ELECTRICAL -> a 0 id
|
||||
CONCUSSIVE -> a 0 id
|
||||
TORQUEDAM -> a 0 id
|
||||
PUSHDAM -> a 0 id
|
||||
POISONDAM -> a 0 id
|
||||
ENTERREMENT -> a 0 id
|
||||
where
|
||||
a x f w = (f w,x)
|
||||
d = _dmAmount dm
|
||||
sp = _dmFrom dm
|
||||
p = _dmAt dm
|
||||
outTo = p +.+ squashNormalizeV (sp -.- p)
|
||||
pSparkCol = V4 5 1 0.5 2
|
||||
lSparkCol = V4 20 (-5) 0 1
|
||||
|
||||
|
||||
dirtWallDamage :: Damage -> Wall -> World -> (World,Int)
|
||||
dirtWallDamage dm wl = case _dmType dm of
|
||||
LASERING -> a d $ wlDustAt wl outTo
|
||||
PIERCING -> a d $ wlDustAt wl outTo
|
||||
BLUNT -> a d $ wlDustAt wl outTo
|
||||
SHATTERING -> a d $ muchWlDustAt wl outTo
|
||||
CRUSHING -> a d $ id
|
||||
EXPLOSIVE -> a d $ id
|
||||
CUTTING -> a d $ id
|
||||
SPARKING -> a 0 $ id
|
||||
FLAMING -> a 0 $ id
|
||||
ELECTRICAL -> a 0 $ id
|
||||
CONCUSSIVE -> a d $ id
|
||||
TORQUEDAM -> a 0 $ id
|
||||
PUSHDAM -> a 0 $ id
|
||||
POISONDAM -> a 0 $ id
|
||||
ENTERREMENT -> a 0 $ id
|
||||
CRUSHING -> a d $ wlDustAt wl outTo
|
||||
EXPLOSIVE -> a d $ muchWlDustAt wl outTo
|
||||
CUTTING -> a d $ muchWlDustAt wl outTo
|
||||
SPARKING -> a 0 id
|
||||
FLAMING -> a 0 id
|
||||
ELECTRICAL -> a 0 id
|
||||
CONCUSSIVE -> a d id
|
||||
TORQUEDAM -> a 0 id
|
||||
PUSHDAM -> a 0 id
|
||||
POISONDAM -> a 0 id
|
||||
ENTERREMENT -> a 0 id
|
||||
where
|
||||
a x f w = (f w,x)
|
||||
d = _dmAmount dm
|
||||
|
||||
Reference in New Issue
Block a user