{-# 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))