Add different weapon positions based on handedness
This commit is contained in:
@@ -158,7 +158,8 @@ startCr = defaultCreature
|
|||||||
startInventory :: IM.IntMap Item
|
startInventory :: IM.IntMap Item
|
||||||
startInventory = IM.fromList (zip [0..20]
|
startInventory = IM.fromList (zip [0..20]
|
||||||
(
|
(
|
||||||
[hvAutoGun
|
[autoGun
|
||||||
|
,hvAutoGun
|
||||||
,pistol
|
,pistol
|
||||||
,teslaGun
|
,teslaGun
|
||||||
,blinkGun
|
,blinkGun
|
||||||
@@ -170,7 +171,6 @@ startInventory = IM.fromList (zip [0..20]
|
|||||||
,grenade
|
,grenade
|
||||||
,spawnGun lamp
|
,spawnGun lamp
|
||||||
,lasGun
|
,lasGun
|
||||||
,autoGun
|
|
||||||
,flamer
|
,flamer
|
||||||
,poisonSprayer
|
,poisonSprayer
|
||||||
,launcher
|
,launcher
|
||||||
|
|||||||
@@ -29,6 +29,7 @@ basicCrPict col cr w = pictures $
|
|||||||
targetingPic ++
|
targetingPic ++
|
||||||
[ tr . piercingMod $ bluntScale $ naked col cr
|
[ tr . piercingMod $ bluntScale $ naked col cr
|
||||||
, trFeet $ feet cr
|
, trFeet $ feet cr
|
||||||
|
, tr $ arms col cr
|
||||||
, tr $ drawEquipment cr
|
, tr $ drawEquipment cr
|
||||||
]
|
]
|
||||||
where
|
where
|
||||||
@@ -54,41 +55,68 @@ basicCrPict col cr w = pictures $
|
|||||||
|
|
||||||
feet :: Creature -> Picture
|
feet :: Creature -> Picture
|
||||||
feet cr = case cr ^? crStance . carriage of
|
feet cr = case cr ^? crStance . carriage of
|
||||||
Just (Walking _ LeftForward) -> setL
|
Just (Walking sa LeftForward) -> setL
|
||||||
[ translate up off $ circleSolid 5
|
[ translate (f sa) off $ circleSolid 5
|
||||||
, translate (-up) (-off) $ circleSolid 5
|
, translate (-f sa) (-off) $ circleSolid 5
|
||||||
]
|
]
|
||||||
Just (Walking _ RightForward) -> setL
|
Just (Walking sa RightForward) -> setL
|
||||||
[ translate (-up) off $ circleSolid 5
|
[ translate (-f sa) off $ circleSolid 5
|
||||||
, translate (up) (-off) $ circleSolid 5
|
, translate (f sa) (-off) $ circleSolid 5
|
||||||
]
|
]
|
||||||
_ -> setL
|
_ -> setL
|
||||||
[ translate 0 off $ circleSolid 5
|
[ translate 0 off $ circleSolid 5
|
||||||
, translate 0 (-off) $ circleSolid 5
|
, translate 0 (-off) $ circleSolid 5
|
||||||
]
|
]
|
||||||
where
|
where
|
||||||
setL = onLayerL [levLayer CrLayer, (-2)] . color (greyN 0.2) . pictures
|
setL = onLayerL [levLayer CrLayer, (-5)] . color (greyN 0.3) . pictures
|
||||||
off = 5
|
off = 5
|
||||||
up = 5
|
sLen = _strideLength $ _crStance cr
|
||||||
|
f i = 6 * fromIntegral (sLen - i) / fromIntegral sLen
|
||||||
|
|
||||||
|
arms :: Color -> Creature -> Picture
|
||||||
|
arms col cr
|
||||||
|
| aimingTwist = blank
|
||||||
|
| otherwise = case cr ^? crStance . carriage of
|
||||||
|
Just (Walking sa LeftForward) -> setL
|
||||||
|
[ translate (-f sa) (-off) . sc $ circleSolid 4
|
||||||
|
]
|
||||||
|
Just (Walking sa RightForward) -> setL
|
||||||
|
[ translate (-f sa) off . sc $ circleSolid 4
|
||||||
|
]
|
||||||
|
_ -> blank
|
||||||
|
where
|
||||||
|
sc = scale 1 1
|
||||||
|
setL = onLayerL [levLayer CrLayer, (-4)] . color (light4 col) . pictures
|
||||||
|
off = 8
|
||||||
|
sLen = _strideLength $ _crStance cr
|
||||||
|
f i = negate 2 + negate 6 * fromIntegral (sLen - i) / fromIntegral sLen
|
||||||
|
aimingTwist = crIsAiming' cr -- && crIt ^? itAimStance == Just TwoHandTwist
|
||||||
|
--crIt = _crInv cr IM.! _crInvSel cr
|
||||||
|
|
||||||
|
|
||||||
naked :: Color -> Creature -> Picture
|
naked :: Color -> Creature -> Picture
|
||||||
naked col cr
|
naked col cr
|
||||||
| strikeMelee = onCrL . color white $ circleSolid $ _crRad cr
|
| strikeMelee = onCrL . color white $ circleSolid $ _crRad cr
|
||||||
| pdam > 200 = onCrL . color red $ circleSolid $ _crRad cr
|
| pdam > 200 = onCrL . color red $ circleSolid $ _crRad cr
|
||||||
| pdam > 99 = onCrL . color white $ circleSolid $ _crRad cr
|
| pdam > 99 = onCrL . color white $ circleSolid $ _crRad cr
|
||||||
| aimingTwist = rotate twistA $ pictures
|
| aimingOneHand = rotate (negate twistA * 0.5) $ pictures
|
||||||
|
[ translate (0.25 * crad) 0 $ circleSolid (crad * 0.5)
|
||||||
|
, onCrL . translate 8 (-8) . color col' $ circleSolid 4
|
||||||
|
, translate 0 3 . rotate (negate 0.2) . scale 0.5 1 $ color col' $ circleSolid $ _crRad cr
|
||||||
|
, translate 0 (negate 3) . rotate (0.2) . scale 0.5 1 $ color col' $ circleSolid $ _crRad cr
|
||||||
|
]
|
||||||
|
| aimingTwist = translate 0 (0.5* crad) . rotate twistA $ pictures
|
||||||
[ aboveIt . translate (negate 0.25 * crad) 0.25 $
|
[ aboveIt . translate (negate 0.25 * crad) 0.25 $
|
||||||
circleSolid (crad * 0.5)
|
circleSolid (crad * 0.5)
|
||||||
, onCrL . translate 0 3 . rotate (negate 0.2) . scale 0.5 1 $ color col' $ circleSolid $ _crRad cr, circLine $ _crRad cr
|
, onCrL . translate 12 (4) . color col' $ circleSolid 4
|
||||||
, onCrL . translate 0 (negate 3) . rotate (0.2) . scale 0.5 1 $ color col' $ circleSolid $ _crRad cr, circLine $ _crRad cr
|
, onCrL . translate 4 (-10) . color col' $ circleSolid 4
|
||||||
--, shoulderRot . scale 0.5 1 $ color col' $ circleSolid $ _crRad cr, circLine $ _crRad cr
|
, onCrL . rotate (negate 0.2) . translate 2 3 . rotate (negate 0.4) . scale 0.5 1 $ color col' $ circleSolid $ _crRad cr
|
||||||
|
, onCrL . rotate (negate 0.2) . translate 0 (negate 3) . rotate (0.2) . scale 0.5 1 $ color col' $ circleSolid $ _crRad cr
|
||||||
]
|
]
|
||||||
|
|
||||||
| otherwise = onCrL $ pictures
|
| otherwise = onCrL $ pictures
|
||||||
[ translate (0.25 * crad) 0 $ circleSolid (crad * 0.5)
|
[ translate (0.25 * crad) 0 $ circleSolid (crad * 0.5)
|
||||||
, translate 0 3 . rotate (negate 0.2) . scale 0.5 1 $ color col' $ circleSolid $ _crRad cr, circLine $ _crRad cr
|
, translate 0 3 . rotate (negate 0.2) . scale 0.5 1 $ color col' $ circleSolid $ _crRad cr
|
||||||
, translate 0 (negate 3) . rotate (0.2) . scale 0.5 1 $ color col' $ circleSolid $ _crRad cr, circLine $ _crRad cr
|
, translate 0 (negate 3) . rotate (0.2) . scale 0.5 1 $ color col' $ circleSolid $ _crRad cr
|
||||||
--, shoulderRot . scale 0.5 1 $ color col' $ circleSolid $ _crRad cr, circLine $ _crRad cr
|
|
||||||
]
|
]
|
||||||
where
|
where
|
||||||
aboveIt = onLayer HPtLayer
|
aboveIt = onLayer HPtLayer
|
||||||
@@ -97,10 +125,6 @@ naked col cr
|
|||||||
aimingOneHand = crIsAiming' cr && crIt ^? itAimStance == Just OneHand
|
aimingOneHand = crIsAiming' cr && crIt ^? itAimStance == Just OneHand
|
||||||
aimingTwist = crIsAiming' cr && crIt ^? itAimStance == Just TwoHandTwist
|
aimingTwist = crIsAiming' cr && crIt ^? itAimStance == Just TwoHandTwist
|
||||||
crIt = _crInv cr IM.! _crInvSel cr
|
crIt = _crInv cr IM.! _crInvSel cr
|
||||||
shoulderRot = case cr ^? crStance . carriage of
|
|
||||||
Just (Walking _ LeftForward) -> rotate 0.1
|
|
||||||
Just (Walking _ RightForward) -> rotate $ negate 0.1
|
|
||||||
_ -> id
|
|
||||||
strikeMelee = case _crMeleeCooldown cr of
|
strikeMelee = case _crMeleeCooldown cr of
|
||||||
Nothing -> False
|
Nothing -> False
|
||||||
Just x -> x > 5
|
Just x -> x > 5
|
||||||
@@ -109,6 +133,9 @@ naked col cr
|
|||||||
pastDams = _crPastDamage $ _crState cr
|
pastDams = _crPastDamage $ _crState cr
|
||||||
col' = light . light . light $ light col
|
col' = light . light . light $ light col
|
||||||
|
|
||||||
|
light4 :: Color -> Color
|
||||||
|
light4 = light . light . light . light
|
||||||
|
|
||||||
--drawAwakeLevel
|
--drawAwakeLevel
|
||||||
-- :: Creature
|
-- :: Creature
|
||||||
-- -> Picture
|
-- -> Picture
|
||||||
|
|||||||
@@ -14,9 +14,9 @@ updateWalkCycle cr = case cr ^? crStance . carriage of
|
|||||||
maxStride = _strideLength $ _crStance cr
|
maxStride = _strideLength $ _crStance cr
|
||||||
|
|
||||||
normalGait :: FootForward -> FootForward
|
normalGait :: FootForward -> FootForward
|
||||||
normalGait LeftForward = WasLeftForward
|
normalGait LeftForward = RightForward
|
||||||
normalGait WasLeftForward = RightForward
|
normalGait WasLeftForward = RightForward
|
||||||
normalGait RightForward = WasRightForward
|
normalGait RightForward = LeftForward
|
||||||
normalGait WasRightForward = LeftForward
|
normalGait WasRightForward = LeftForward
|
||||||
|
|
||||||
footstepSideEffect :: Creature -> World -> World
|
footstepSideEffect :: Creature -> World -> World
|
||||||
|
|||||||
@@ -112,7 +112,7 @@ defaultCreature = Creature
|
|||||||
, _crStance = Stance
|
, _crStance = Stance
|
||||||
{_carriage=Walking 0 WasLeftForward
|
{_carriage=Walking 0 WasLeftForward
|
||||||
,_posture=AtEase
|
,_posture=AtEase
|
||||||
,_strideLength = 9
|
,_strideLength = 20
|
||||||
}
|
}
|
||||||
, _crActionPlan = ActionPlan [] [] WatchAndWait [LiveLongAndProsper]
|
, _crActionPlan = ActionPlan [] [] WatchAndWait [LiveLongAndProsper]
|
||||||
, _crMeleeCooldown = Nothing
|
, _crMeleeCooldown = Nothing
|
||||||
|
|||||||
+22
-3
@@ -7,6 +7,7 @@ import Dodge.Creature.Stance.Data
|
|||||||
import Picture
|
import Picture
|
||||||
|
|
||||||
import qualified Data.IntMap.Strict as IM
|
import qualified Data.IntMap.Strict as IM
|
||||||
|
import Control.Lens
|
||||||
{- | Places an item picture onto a creature when the item is selected. -}
|
{- | Places an item picture onto a creature when the item is selected. -}
|
||||||
pictureWeaponOnAim
|
pictureWeaponOnAim
|
||||||
:: Picture
|
:: Picture
|
||||||
@@ -17,18 +18,36 @@ pictureWeaponOnAim p cr posInInv
|
|||||||
| isSelected && _posture (_crStance cr) == Aiming
|
| isSelected && _posture (_crStance cr) == Aiming
|
||||||
&& isTwisting
|
&& isTwisting
|
||||||
= onLayer PtLayer twistWep
|
= onLayer PtLayer twistWep
|
||||||
|
| isSelected && _posture (_crStance cr) == Aiming
|
||||||
|
&& isOneHand
|
||||||
|
= onLayer PtLayer oneHandWep
|
||||||
| isSelected && _posture (_crStance cr) == Aiming
|
| isSelected && _posture (_crStance cr) == Aiming
|
||||||
= onLayer PtLayer drawnWep
|
= onLayer PtLayer drawnWep
|
||||||
|
| isSelected && isOneHand
|
||||||
|
= onLayerL [levLayer CrLayer, -3] holsteredOneHandWep
|
||||||
| isSelected
|
| isSelected
|
||||||
= onLayer PtLayer holsteredWep
|
= onLayerL [levLayer CrLayer, -3] holsteredWep
|
||||||
| otherwise = blank
|
| otherwise = blank
|
||||||
where
|
where
|
||||||
isSelected = _crInvSel cr == posInInv
|
isSelected = _crInvSel cr == posInInv
|
||||||
drawnWep = uncurry translate (_crRad cr,0) p
|
drawnWep = uncurry translate (_crRad cr,0) p
|
||||||
twistWep = uncurry translate (0.5 * _crRad cr,negate 0.5 * _crRad cr) p
|
twistWep = uncurry translate (0.5 * _crRad cr,0) p
|
||||||
holsteredWep = uncurry translate (_crRad cr,0) (scale 0.1 1 p)
|
--twistWep = uncurry translate (0.5 * _crRad cr,negate 0.5 * _crRad cr) p
|
||||||
|
oneHandWep = uncurry translate (1.5 * _crRad cr,0) p
|
||||||
|
holsteredWep = uncurry translate (_crRad cr,0) (rotate (sRot + 1) p)
|
||||||
|
holsteredOneHandWep = uncurry translate (_crRad cr * 0.7 + handPos,_crRad cr * negate 0.7) p
|
||||||
|
handPos = case cr^? crStance . carriage of
|
||||||
|
Just (Walking x LeftForward) -> f x * 50
|
||||||
|
_ -> 0
|
||||||
theIt = _crInv cr IM.! posInInv
|
theIt = _crInv cr IM.! posInInv
|
||||||
isTwisting = _itAimStance theIt == TwoHandTwist
|
isTwisting = _itAimStance theIt == TwoHandTwist
|
||||||
|
isOneHand = _itAimStance theIt == OneHand
|
||||||
|
sRot = case cr ^? crStance . carriage of
|
||||||
|
Just (Walking x LeftForward) -> f x
|
||||||
|
Just (Walking x RightForward) -> - f x
|
||||||
|
_ -> 0
|
||||||
|
f i = 0.1 * fromIntegral (sLen - i) / fromIntegral sLen
|
||||||
|
sLen = _strideLength $ _crStance cr
|
||||||
|
|
||||||
pictureItem
|
pictureItem
|
||||||
:: Picture
|
:: Picture
|
||||||
|
|||||||
@@ -160,15 +160,17 @@ lasGun = defaultAutoGun
|
|||||||
, _itUse = \_ -> shoot aLaser
|
, _itUse = \_ -> shoot aLaser
|
||||||
, _wpSpread = 0.001
|
, _wpSpread = 0.001
|
||||||
, _wpRange = 20
|
, _wpRange = 20
|
||||||
, _itFloorPict = onLayer FlItLayer $ color blue $ polygon $ rectNESW 3 3 (-3) (-3)
|
, _itFloorPict = onLayer FlItLayer lasGunPic
|
||||||
, _itAimingSpeed = 0.4
|
, _itAimingSpeed = 0.4
|
||||||
, _itAimingRange = 1
|
, _itAimingRange = 1
|
||||||
, _itEquipPict = pictureWeaponOnAim $ color blue $ polygon $ rectNESW 3 3 (-3) (-3)
|
, _itEquipPict = pictureWeaponOnAim lasGunPic
|
||||||
, _itAttachment = Just $ ItCharMode $ Seq.fromList "/VZ"
|
, _itAttachment = Just $ ItCharMode $ Seq.fromList "/VZ"
|
||||||
, _itScrollUp = incCharMode
|
, _itScrollUp = incCharMode
|
||||||
, _itScrollDown = decCharMode
|
, _itScrollDown = decCharMode
|
||||||
, _itInvDisplay = basicWeaponDisplay
|
, _itInvDisplay = basicWeaponDisplay
|
||||||
}
|
}
|
||||||
|
lasGunPic :: Picture
|
||||||
|
lasGunPic = color blue . polygon $ rectNESW 3 15 (-3) (-15)
|
||||||
forceFieldGun :: Item
|
forceFieldGun :: Item
|
||||||
forceFieldGun = defaultGun
|
forceFieldGun = defaultGun
|
||||||
{ _itName = "FORCEFIELD"
|
{ _itName = "FORCEFIELD"
|
||||||
@@ -372,9 +374,12 @@ multGun = defaultGun
|
|||||||
, _itAimingRange = 1
|
, _itAimingRange = 1
|
||||||
, _itZoom = defaultItZoom {_itAimZoomFac = 1.5}
|
, _itZoom = defaultItZoom {_itAimZoomFac = 1.5}
|
||||||
, _itEquipPict = pictureWeaponOnAim multGunPic
|
, _itEquipPict = pictureWeaponOnAim multGunPic
|
||||||
|
, _itAimStance = TwoHandTwist
|
||||||
}
|
}
|
||||||
where
|
multGunPic :: Picture
|
||||||
multGunPic = color red $ pictures
|
multGunPic = color red $ pictures
|
||||||
|
[ polygon $ rectNESW 4 8 (-4) (-12)
|
||||||
|
, translate 8 0 $ pictures
|
||||||
[ polygon $ rectNSEW 12 8 2 (-2)
|
[ polygon $ rectNSEW 12 8 2 (-2)
|
||||||
, polygon $ rectNSEW 7 3 2 (-2)
|
, polygon $ rectNSEW 7 3 2 (-2)
|
||||||
, polygon $ rectNSEW 2 (-2) 2 (-2)
|
, polygon $ rectNSEW 2 (-2) 2 (-2)
|
||||||
@@ -382,6 +387,7 @@ multGun = defaultGun
|
|||||||
, polygon $ rectNSEW (-8) (-12) 2 (-2)
|
, polygon $ rectNSEW (-8) (-12) 2 (-2)
|
||||||
, polygon [(-1.5,12),(-2,12),(-2,-12),(-1.5,-12)]
|
, polygon [(-1.5,12),(-2,12),(-2,-12),(-1.5,-12)]
|
||||||
]
|
]
|
||||||
|
]
|
||||||
longGun :: Item
|
longGun :: Item
|
||||||
longGun = defaultGun
|
longGun = defaultGun
|
||||||
{ _itName = "LONGGUN"
|
{ _itName = "LONGGUN"
|
||||||
|
|||||||
@@ -38,10 +38,10 @@ launcher = defaultGun
|
|||||||
, _itUse = \it -> shootWithSound (fromIntegral launcherSound) $ aRocketWithItemParams it
|
, _itUse = \it -> shootWithSound (fromIntegral launcherSound) $ aRocketWithItemParams it
|
||||||
, _wpSpread = 0.02
|
, _wpSpread = 0.02
|
||||||
, _wpRange = 20
|
, _wpRange = 20
|
||||||
, _itFloorPict = onLayer FlItLayer $ color cyan $ polygon $ rectNESW 5 5 (-5) (-5)
|
, _itFloorPict = onLayer FlItLayer launcherPic
|
||||||
, _itAimingSpeed = 0.2
|
, _itAimingSpeed = 0.2
|
||||||
, _itAimingRange = 0.5
|
, _itAimingRange = 0.5
|
||||||
, _itEquipPict = pictureWeaponOnAim $ color cyan $ polygon $ rectNESW 5 5 (-5) (-5)
|
, _itEquipPict = pictureWeaponOnAim launcherPic
|
||||||
, _itHammer = NoHammer
|
, _itHammer = NoHammer
|
||||||
, _itEffect = NoItEffect
|
, _itEffect = NoItEffect
|
||||||
, _wpAmmo = defaultShellAmmo
|
, _wpAmmo = defaultShellAmmo
|
||||||
@@ -50,8 +50,12 @@ launcher = defaultGun
|
|||||||
, _amPjParams = basicAmPjMoves
|
, _amPjParams = basicAmPjMoves
|
||||||
, _amPjDraw = shellPic
|
, _amPjDraw = shellPic
|
||||||
}
|
}
|
||||||
|
, _itAimStance = TwoHandTwist
|
||||||
}
|
}
|
||||||
|
|
||||||
|
launcherPic :: Picture
|
||||||
|
launcherPic = color cyan $ polygon $ rectNESW 5 10 (-5) (-10)
|
||||||
|
|
||||||
basicAmPjMoves :: [PjParam]
|
basicAmPjMoves :: [PjParam]
|
||||||
basicAmPjMoves =
|
basicAmPjMoves =
|
||||||
[spinDrag
|
[spinDrag
|
||||||
|
|||||||
Reference in New Issue
Block a user