41 lines
1.3 KiB
Haskell
41 lines
1.3 KiB
Haskell
{-# LANGUAGE LambdaCase #-}
|
|
|
|
module Dodge.Item.Draw (itemEquipPict) where
|
|
|
|
import Control.Lens
|
|
import Dodge.Creature.HandPos
|
|
import Dodge.Data.ComposedItem
|
|
import Dodge.Data.Creature
|
|
import Dodge.Data.DoubleTree
|
|
import Dodge.Data.Equipment.Misc
|
|
import Dodge.Item.Draw.SPic
|
|
import Dodge.Item.HeldOffset
|
|
import Geometry.Data
|
|
import qualified Quaternion as Q
|
|
import ShapePicture
|
|
|
|
itemEquipPict :: Creature -> DTree CItem -> SPic
|
|
itemEquipPict cr itmtree
|
|
| Just esite <- itm ^? itLocation . ilEquipSite . _Just
|
|
, Just attachpos <- equipAttachPos <$> itm ^? itType . ibtEquip =
|
|
equipPosition esite 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 -> Point3Q
|
|
equipAttachPos = \case
|
|
BATTERYPACK -> (V3 (-8) 0 10, Q.qID)
|
|
FUELPACK -> (V3 (-9) 0 10, Q.qID)
|
|
BULLETBELTPACK -> (V3 (-9) 0 10, Q.qID)
|
|
BULLETBELTBRACER -> (V3 (-9) 0 10, Q.qID)
|
|
_ -> (0, Q.qID)
|
|
|
|
equipPosition :: EquipSite -> Creature -> Point3Q -> SPic -> SPic
|
|
equipPosition es cr q =
|
|
overPosSP
|
|
(\x -> fst $ equipSitePQ es cr `Q.comp` q `Q.comp` (x, Q.qID))
|