{-# 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 m cr sh OnRightWrist -> translateToRightWrist m 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 m cr `Q.comp` (p + x,Q.qID)) sh -- OnSpecial -> sh