53 lines
1.7 KiB
Haskell
53 lines
1.7 KiB
Haskell
{-# LANGUAGE LambdaCase #-}
|
|
module Dodge.Item.Draw (
|
|
itemSPic,
|
|
itemEquipPict,
|
|
) where
|
|
|
|
import qualified Data.IntMap.Strict as IM
|
|
import qualified Quaternion as Q
|
|
import Dodge.Data.Equipment.Misc
|
|
import Dodge.Data.ComposedItem
|
|
import Dodge.Data.DoubleTree
|
|
import Geometry.Data
|
|
import Control.Lens
|
|
import Dodge.Creature.HandPos
|
|
import Dodge.Data.Creature
|
|
import Dodge.Item.Draw.SPic
|
|
import Dodge.Item.HeldOffset
|
|
import ShapePicture
|
|
|
|
itemEquipPict :: IM.IntMap Item -> Creature -> DTree CItem -> SPic
|
|
itemEquipPict m cr itmtree
|
|
| --Just i <- itm ^? itLocation . ilInvID
|
|
Just esite <- itm ^? itLocation . ilEquipSite . _Just
|
|
, Just attachpos <- equipAttachPos <$> itm ^? itType . ibtEquip
|
|
= equipPosition esite m cr attachpos (itemSPic itm)
|
|
| itm ^? itLocation . ilInvID == cr ^? crManipulation . manObject . imRootSelectedItem
|
|
= overPosSP (Q.prePos $ handHandleOrient loc cr) (itemTreeSPic itmtree)
|
|
| otherwise = mempty
|
|
where
|
|
itm = itmtree ^. dtValue . _1
|
|
loc = LocDT TopDT itmtree
|
|
|
|
equipAttachPos :: EquipItemType -> Point3
|
|
equipAttachPos = \case
|
|
BATTERYPACK -> V3 (-8) 0 10
|
|
FUELPACK -> V3 (-9) 0 10
|
|
BULLETBELTPACK -> V3 (-9) 0 10
|
|
BULLETBELTBRACER -> V3 (-9) 0 10
|
|
_ -> 0
|
|
|
|
equipPosition :: EquipSite -> IM.IntMap Item -> Creature -> Point3 -> SPic -> SPic
|
|
equipPosition epos m cr p sh = case epos of
|
|
OnLeftWrist -> translateToLeftWrist cr sh
|
|
OnRightWrist -> translateToRightWrist cr sh
|
|
OnLegs ->
|
|
translateToLeftLeg cr sh
|
|
<> translateToRightLeg cr sh-- (mirrorSPxz sh)
|
|
OnHead -> translateToHead m cr sh
|
|
OnChest -> translateToChest m cr sh
|
|
--OnBack -> translateToBack cr p sh
|
|
OnBack -> overPosSP (\x -> fst $ backPQ cr `Q.comp` (p + x,Q.qID)) sh
|
|
-- OnSpecial -> sh
|