{-# LANGUAGE LambdaCase #-} module Dodge.Item.Draw (itemEquipPict) where import Dodge.Data.World import Dodge.Item.Draw.SPicTree import Control.Lens import Dodge.Creature.HandPos import Dodge.Data.ComposedItem 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 :: World -> Creature -> DTree CItem -> SPic itemEquipPict w cr itmtree | Just esite <- itm ^? itLocation . ilEquipSite . _Just , Just attachpos <- equipAttachPos <$> itm ^? itType . ibtEquip = equipPosition esite w cr attachpos (itemSPic itm) | itm ^? itLocation . ilInvID == w ^? hud . manObject . hiRootSelectedItem = overPosSP (Q.apply $ handHandleOrient w 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 -> World -> Creature -> Point3Q -> SPic -> SPic equipPosition es w cr q = overPosSP (\x -> fst $ equipSitePQ es w cr `Q.comp` q `Q.comp` (x, Q.qid))