Remove item picture field, handled by outside function

This commit is contained in:
2022-07-11 12:34:39 +01:00
parent 33d94bd05a
commit 53548fb1ff
20 changed files with 303 additions and 412 deletions
+294 -84
View File
@@ -1,98 +1,117 @@
module Dodge.Item.Draw.SPic where
import Dodge.Data
import Dodge.Item.Weapon.AmmoParams
import ShapePicture
import Shape
import LensHelp
import Color
import Picture
import Geometry
import Data.Maybe
itemSPic :: Item -> SPic
itemSPic it = modulesSPic it <> case it ^. itType . iyBase of
HELD ht -> heldItemSPic ht it
_ -> mempty
-- NOTDEFINED ->
-- EFFGUN _ ->
-- AUTOEFFGUN _ ->
--
--
-- BOOSTER
-- REWINDER
-- BLINKER
-- BLINKERUNSAFE
-- FORCEFIELDGUN
-- SHRINKER
-- SPAWNER
--
-- CLICKDETECTOR Detector
-- AUTODETECTOR Detector
-- MAGSHIELD
-- FLAMESHIELD
-- FRONTARMOUR
-- WRISTARMOUR
-- INVISIBILITYEQUIPMENT EquipSite
-- BRAINHAT
-- HEADLAMP
-- HEADLAMP1
-- POWERLEGS
-- SPEEDLEGS
-- JUMPLEGS
-- FLATSHIELD
-- JETPACK
--
-- KEYCARD Int
--
-- MEDKIT Int
-- CRAFT CraftType
NOTDEFINED -> defSPic
EFFGUN _ -> defSPic
AUTOEFFGUN _ -> defSPic
BOOSTER -> defSPic
REWINDER -> defSPic
BLINKER -> defSPic
BLINKERUNSAFE -> defSPic
SHRINKER -> defSPic
SPAWNER -> defSPic
--
CLICKDETECTOR dt -> (noPic (colorSH (detectorColor dt) $ upperPrismPoly 3 $ rectWH 2 2))
AUTODETECTOR dt -> (noPic (colorSH (detectorColor dt) $ upperPrismPoly 3 $ rectWH 2 2))
MAGSHIELD -> defSPic
FLAMESHIELD -> defSPic
FRONTARMOUR -> (emptySH , setDepth 20 $ pictures
[color yellow $ thickArc 0 (pi/2) 10 5
,color yellow $ thickArc (3*pi/2) (2*pi) 10 5
])
WRISTARMOUR -> defSPic
INVISIBILITYEQUIPMENT _ -> (noPic (colorSH chartreuse $ upperPrismPoly 3 $ rectWH 2 2))
BRAINHAT -> noPic (colorSH yellow $ upperPrismPoly 3 $ rectWH 4 4)
HEADLAMP -> noPic headLampShape
HEADLAMP1 -> noPic headLampShape
POWERLEGS -> legsSPic yellow
SPEEDLEGS -> legsSPic green
JUMPLEGS -> legsSPic red
FLATSHIELD -> flatShieldEquipSPic
JETPACK -> ((,) emptySH $ setDepth 20
$ pictures [color yellow $ polygon $ reverse $ rectNSWE 5 (-5) (-11) (-3) ]
)
--
KEYCARD _ -> noShape (setDepth 0 $ translate (-5) (-5) $ rotate (pi/2.5) keyPic)
--
MEDKIT _ -> defSPic
CRAFT _ -> defSPic
heldItemSPic :: HeldItemType -> Item -> SPic
heldItemSPic ht it = case ht of
BANGSTICK i -> noPic & baseStickShapeX i <> stickClip it
-- PISTOL ->
-- REVOLVER ->
-- REVOLVERX i ->
-- MACHINEPISTOL ->
-- AUTOPISTOL ->
-- SMG ->
-- BANGCONE ->
-- BLUNDERBUSS ->
-- GRAPECANNON i ->
-- MINIGUNX i ->
-- VOLLEYGUN i ->
-- RIFLE ->
-- REPEATER ->
-- AUTORIFLE ->
-- BURSTRIFLE ->
-- BANGROD ->
-- ELEPHANTGUN ->
-- AMR ->
-- AUTOAMR ->
-- SNIPERRIFLE ->
-- MACHINEGUN ->
-- FLAMESPITTER ->
-- FLAMETHROWER ->
-- FLAMETORRENT ->
-- FLAMEWALL ->
-- BLOWTORCH ->
-- AUTOGUN ->
-- SPARKGUN ->
-- TESLAGUN ->
-- LASGUN ->
-- LASCIRCLE ->
-- DUALBEAM ->
-- LASWIDE i ->
-- SONICGUN ->
-- TRACTORGUN ->
-- LAUNCHER ->
-- LAUNCHERX i ->
-- REMOTELAUNCHER ->
-- POISONSPRAYER ->
-- DRONELAUNCHER ->
-- SHATTERGUN ->
FORCEFIELDGUN -> defSPic
BANGSTICK i -> noPic $ baseStickShapeX it i <> stickClip it
PISTOL -> noPic $ baseStickShape <> makeTinClipAt pi (V3 5 2 0) it
REVOLVER -> noPic $ baseStickShape <> revolverClip it
REVOLVERX _ -> noPic $ baseStickShape <> revolverClip it
MACHINEPISTOL -> noPic $ baseStickShape <> makeTinClipAt pi (V3 5 2 0) it
AUTOPISTOL -> noPic $ baseStickShape <> makeTinClipAt pi (V3 5 2 0) it
SMG -> noPic (baseSMGShape <> makeTinClipAt 0 (V3 7 (-2) 0) it)
BANGCONE -> noPic $ colorSH cyan $ upperPrismPoly 3 (rectXH 5 2)
<> upperPrismPoly 6 (reverse $ rectNSWE 4 (-4) 5 15)
BLUNDERBUSS -> noPic $ colorSH cyan $ upperPrismPoly 3 (rectXH 20 2)
<> upperPrismPoly 6 (reverse $ rectNSWE 4 (-4) 20 30)
GRAPECANNON _ -> noPic $ colorSH cyan $ upperPrismPoly 3 (rectXH 20 2)
<> upperPrismPoly 6 (reverse $ rectNSWE 4 (-4) 20 30)
MINIGUNX i -> miniGunXPictItem i it
VOLLEYGUN i -> volleyGunSPic i it
RIFLE -> noPic $ baseRifleShape <> makeSingleClipAt (V3 5 0 3) it
REPEATER -> noPic $ baseRifleShape <> makeTinClipAt 0 (V3 10 (-2) 0) it
AUTORIFLE -> noPic $ baseRifleShape <> makeTinClipAt 0 (V3 10 (-2) 0) it
BURSTRIFLE -> noPic $ baseRifleShape <> makeTinClipAt 0 (V3 10 (-2) 0) it
BANGROD -> noPic $ baseRodShape <> makeSingleClipAt (V3 5 0 3) it
ELEPHANTGUN -> noPic $ baseAMRShape <> makeSingleClipAt (V3 5 0 3) it
AMR -> noPic $ baseAMRShape <> makeTinClipAt 0 (V3 10 (-2) 0) it
AUTOAMR -> noPic $ baseAMRShape <> makeTinClipAt 0 (V3 10 (-2) 0) it
SNIPERRIFLE -> noPic $ baseAMRShape <> makeSingleClipAt (V3 5 0 3) it
MACHINEGUN -> noPic $ baseAMRShape <> makeTinClipAt 0 (V3 10 (-2) 0) it
FLAMESPITTER -> flamerPic it
FLAMETHROWER -> flamerPic it
FLAMETORRENT -> flamerPic it
FLAMEWALL -> flamerPic it
BLOWTORCH -> flamerPic it
AUTOGUN -> defSPic
SPARKGUN -> teslaGunPic
TESLAGUN -> teslaGunPic
LASGUN -> lasGunPic it
LASCIRCLE -> lasGunPic it
DUALBEAM -> dualBeamPic it
LASWIDE _ -> lasGunPic it
SONICGUN -> noPic baseSonicShape
TRACTORGUN -> tractorGunPic it
LAUNCHER -> launcherPic it
LAUNCHERX _ -> launcherPic it
REMOTELAUNCHER -> launcherPic it
POISONSPRAYER -> flamerPic it
DRONELAUNCHER -> defSPic
SHATTERGUN -> shatterGunSPic
modulesSPic :: Item -> SPic
modulesSPic it = mempty
modulesSPic _ = mempty
baseStickShapeX :: Int -> Shape
baseStickShapeX i = foldMap f [0..i-1]
baseStickShapeX :: Item -> Int -> Shape
baseStickShapeX it i = foldMap f [0..i-1]
where
f j = rotateSH ang baseStickShape
where
ang = fromIntegral j * baseStickSpread - (fromIntegral i - 1) * baseStickSpread * 0.5
baseStickSpread :: Float
baseStickSpread = 0.2
ang = fromIntegral j * barrelspread - (fromIntegral i - 1) * barrelspread * 0.5
barrelspread = it ^?! itParams . gunBarrels . brlSpread . spreadAngle
baseStickShape :: Shape
baseStickShape = colorSH green $ upperPrismPoly 3 $ rectXH 10 2
stickClip :: Item -> Shape
stickClip it = case it ^? itConsumption . laLoaded of
@@ -101,5 +120,196 @@ stickClip it = case it ^? itConsumption . laLoaded of
where
f i = rotateSH ang $ translateSH (V3 5 0 3) $ upperPrismPoly 2 $ square 1.5
where
ang = baseStickSpread * fromIntegral i
- 0.5 * baseStickSpread * fromIntegral (_brlNum (_gunBarrels (_itParams it))-1)
ang = barrelspread * fromIntegral i
- 0.5 * barrelspread * fromIntegral (_brlNum (_gunBarrels (_itParams it))-1)
barrelspread = it ^?! itParams . gunBarrels . brlSpread . spreadAngle
defSPic :: SPic
defSPic = noPic $ colorSH green $ upperPrismPoly 3 $ square 4
shatterGunSPic :: SPic
shatterGunSPic = noPic $ colorSH blue $
upperPrismPoly 5 (rectNESW xb 8 xa 0)
<> upperPrismPoly 5 (rectNESW (-xa) 8 (-xb) 0)
where
xa = 1
xb = 9
defCane :: Item -> SPic
defCane it = noPic $ baseCaneShape <> makeSingleClipAt (V3 5 0 3) it
baseCaneShape :: Shape
baseCaneShape = colorSH red $ upperPrismPoly 3 $ rectXH 15 1.5
baseRifleShape :: Shape
baseRifleShape = colorSH red $ upperPrismPoly 3 $ rectXH 25 2
makeSingleClipAt :: Point3 -> Item -> Shape
makeSingleClipAt p it = case it ^? itConsumption . laLoaded of
Just 0 -> mempty
_ -> translateSH p $ upperPrismPoly 1 $ square 1.5
makeTinClipAt :: Float -> Point3 -> Item -> Shape
makeTinClipAt r p it = translateSH p . overPosSH (rotate3z r) $ upperPrismPoly 1 $ reverse
$ rectNSWE 0 (-y) (-2) 2
where
y = fromIntegral y' * 0.3
y' = fromMaybe 0 $ it ^? itConsumption . laLoaded
volleyGunSPic :: Int -> Item -> SPic
volleyGunSPic i it = noPic $
colorSH red (foldMap
((\y -> upperPrismPoly 3 $ map (+.+ V2 0 y) $ rectXH 15 2)
. (\k -> fromIntegral k * 5 - ((fromIntegral i - 1) * 2.5))) [0..i-1]
) <> caneClipX i it
caneClipX :: Int -> Item -> Shape
caneClipX i it = case it ^? itConsumption . laLoaded of
Just la | la > 0 -> foldMap
( (\y -> translateSH (V3 5 0 3) . upperPrismPoly 1 $ map (+.+ V2 0 y) $ square 1.5)
. (\k -> fromIntegral k * 5 - ((fromIntegral i - 1) * 2.5)))
[0..la-1]
_ -> mempty
miniGunXPictItem :: Int -> Item -> SPic
miniGunXPictItem i it = miniGunXPict i spin (_laLoaded $ _itConsumption it)
where
spin = (-10) * _laLoaded (_itConsumption it) + _warmTime (_useDelay $ _itUse it)
miniGunXPict :: Int -> Int -> Int -> SPic
miniGunXPict i spin _ =
( colorSH red (rotateSHx a barrels)
<> baseRifleShape
-- <> clip (-1) 0
-- <> clip (-7) 0
, mempty
)
where
aBarrel = translateSH (V3 15 2 2) baseCaneShape
barrels = foldMap (\an -> aBarrel & rotateSHx (2*pi * fromIntegral an / fromIntegral i)) [1..i]
a = fromIntegral spin / 100
--x = fromIntegral am / 10
-- clip y z = translateSH (V3 0 (-1) z) (rotateSHx (negate $ pi/4)
-- . upperPrismPoly 2
-- $ rectNESW (negate $ 3 + 0.25 * x) y 3 (y-5))
baseSonicShape :: Shape
baseSonicShape = colorSH rose $ upperPrismPoly 3 $ rectXH 25 2
revolverClip :: Item -> Shape
revolverClip it = case it ^? itConsumption . laLoaded of
Just al | al > 0 -> translateSH (V3 5 0 1) $ foldMap f [1..al]
_ -> mempty
where
f i = rotateSHx (fromIntegral i * pi / 3 + pi/6) . translateSH (V3 0 0 2) $ upperPrismPoly 1 $ square 1
baseSMGShape :: Shape
baseSMGShape = colorSH green $ upperPrismPoly 3 $ rectXH 20 2
flamerPic :: Item -> SPic
flamerPic it =
( colorSH yellow $
translateSHf tx ty (upperPrismPoly tz $ polyCirc 3 r)
<> upperPrismPoly 5 (rectNESW 2 18 (-2) 0)
, color black $ translate3 (V3 tx ty (tz+0.01)) $ circleSolid (r * am)
)
where
tx = 4
ty = - 6
tz = 3
r = 5
am = fractionLoadedAmmo2 it
launcherPic :: Item -> SPic
launcherPic _ =
( colorSH cyan $ prismPoly
(map (+.+.+ V3 20 0 5) $ polyCircx 4 5)
(map (+.+.+ V3 0 0 5) $ polyCircx 4 5)
, mempty
)
baseRodShape :: Shape
baseRodShape = colorSH orange $ upperPrismPoly 3 $ rectXH 20 2
baseAMRShape :: Shape
baseAMRShape = colorSH orange $ upperPrismPoly 3 $ rectXH 30 2
teslaGunPic :: SPic
teslaGunPic = noPic $ colorSH blue $
upperPrismPoly 5 (rectNESW xb 8 xa 0)
<> upperPrismPoly 5 (rectNESW (-xa) 8 (-xb) 0)
where
xa = 1
xb = 9
lasGunPic :: Item -> SPic
lasGunPic it =
( colorSH blue $
upperPrismPoly 4 (rectNESW 3 30 1 0)
<> upperPrismPoly 4 (rectNESW (-1) 30 (-3) 0)
<> upperPrismPoly 1 (rectNESW 3 30 (-3) 0)
, setLayer BloomNoZWrite . color col . setDepth 1.1 . polygon $ rectNESW 1 30 (-1) 0
)
where
amFrac = fractionLoadedAmmo it
col = brightX 2 1.5 $ mixColors amFrac (1-amFrac) green red
dualBeamPic :: Item -> SPic
dualBeamPic it =
( colorSH blue $
upperPrismPoly 4 (rectNESW gap 3 (-gap) 1)
<> upperPrismPoly 4 (rectNESW gap (-1) (-gap) (-3))
<> upperPrismPoly 1 (rectNESW gap 3 (-gap) (-3))
, setLayer BloomNoZWrite . color col . setDepth 1.1 . polygon $ rectNESW gap 1 (-gap) (-1)
)
where
amFrac = fractionLoadedAmmo it
col = brightX 2 1.5 $ mixColors amFrac (1-amFrac) green red
gap = _dbGap (_itParams it) - 3
tractorGunPic :: Item -> SPic
tractorGunPic it =
( colorSH red $
upperPrismPoly 4 (rectNESW 3 30 1 0)
<> upperPrismPoly 4 (rectNESW (-1) 30 (-3) 0)
<> upperPrismPoly 1 (rectNESW 3 30 (-3) 0)
, setLayer BloomNoZWrite . color col . setDepth 1.1 . polygon $ rectNESW 1 30 (-1) 0
)
where
amFrac = fractionLoadedAmmo it
col = brightX 2 1.5 $ mixColors amFrac (1-amFrac) green red
flatShieldEquipSPic :: SPic
flatShieldEquipSPic =
( colorSH yellow $ upperPrismPoly 10 (rectWH 2 10)
, mempty
)
headLampShape :: Shape
headLampShape = colorSH yellow $
translateSH (V3 5 2 4) (upperPrismPoly 4 $ rectWH 4 1)
<> translateSH (V3 5 2 0) (upperPrismPoly 4 $ rectWH 4 1)
<> translateSH (V3 5 (-2) 4) (upperPrismPoly 4 $ rectWH 4 1)
<> translateSH (V3 5 (-2) 0) (upperPrismPoly 4 $ rectWH 4 1)
detectorColor :: Detector -> Color
detectorColor dt = case dt of
ITEMDETECTOR -> blue
CREATUREDETECTOR -> green
WALLDETECTOR -> red
keyPic :: Picture
keyPic = color green $
pictures [translate (-4) 0 $ thickCircle 4 2
,thickLine 2 $ map toV2 [(0,0),(8,0),(8,-4)]
,thickLine 2 $ map toV2 [(4,0),(4,-4)]
]
latchkeyPic :: Picture
latchkeyPic = color yellow $
pictures [translate (-4) 0 $ thickCircle 4 2
,thickLine 2 $ map toV2 [(0,0),(8,0),(8,-4)]
,thickLine 2 $ map toV2 [(4,0),(4,-4)]
]
legsSPic :: Color -> SPic
legsSPic col = (noPic $ translateSH (V3 0 4 0) $ colorSH col $ upperPrismPoly 3 $ rectWH 2 2)