Allow item structure to determine if subtree is attachable
This commit is contained in:
@@ -5,6 +5,7 @@
|
|||||||
|
|
||||||
module Dodge.Data.ComposedItem where
|
module Dodge.Data.ComposedItem where
|
||||||
|
|
||||||
|
import Dodge.Data.DoubleTree
|
||||||
import Control.Lens
|
import Control.Lens
|
||||||
import Data.Aeson
|
import Data.Aeson
|
||||||
import Data.Aeson.TH
|
import Data.Aeson.TH
|
||||||
@@ -59,9 +60,11 @@ data ItemLink = ILink
|
|||||||
, _iatOrient :: Item -> ComposeLinkType -> Item -> (Point3, Quaternion Float)
|
, _iatOrient :: Item -> ComposeLinkType -> Item -> (Point3, Quaternion Float)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
-- this should possibly use a full item structure tree rather than a
|
||||||
|
-- ComposedItem as arguments
|
||||||
data LinkTest = LTest
|
data LinkTest = LTest
|
||||||
{ _tryLeftLink :: ComposedItem -> Maybe LinkUpdate
|
{ _tryLeftLink :: LabelDoubleTree ItemLink ComposedItem -> Maybe LinkUpdate
|
||||||
, _tryRightLink :: ComposedItem -> Maybe LinkUpdate
|
, _tryRightLink :: LabelDoubleTree ItemLink ComposedItem -> Maybe LinkUpdate
|
||||||
}
|
}
|
||||||
|
|
||||||
data LinkUpdate = LUpdate
|
data LinkUpdate = LUpdate
|
||||||
|
|||||||
+14
-16
@@ -17,7 +17,7 @@ import Dodge.DoubleTree
|
|||||||
import Dodge.Item.Orientation
|
import Dodge.Item.Orientation
|
||||||
import LensHelp
|
import LensHelp
|
||||||
import ListHelp
|
import ListHelp
|
||||||
import qualified Data.Set as S
|
--import qualified Data.Set as S
|
||||||
|
|
||||||
tryAttachItems ::
|
tryAttachItems ::
|
||||||
LabelDoubleTree ItemLink ComposedItem ->
|
LabelDoubleTree ItemLink ComposedItem ->
|
||||||
@@ -39,11 +39,11 @@ useBreakListsLinkTest ::
|
|||||||
LinkTest
|
LinkTest
|
||||||
useBreakListsLinkTest llist rlist = LTest ltest rtest
|
useBreakListsLinkTest llist rlist = LTest ltest rtest
|
||||||
where
|
where
|
||||||
ltest (_, sf, _) = do
|
ltest (LDT (_, sf, _) _ _) = do
|
||||||
let xs = dropWhile ((/= sf) . fst) llist
|
let xs = dropWhile ((/= sf) . fst) llist
|
||||||
(_, linktype) <- safeHead xs
|
(_, linktype) <- safeHead xs
|
||||||
return $ LUpdate linktype (set _3 (useBreakListsLinkTest (tail xs) rlist)) id
|
return $ LUpdate linktype (set _3 (useBreakListsLinkTest (tail xs) rlist)) id
|
||||||
rtest (_, sf, _) = do
|
rtest (LDT (_, sf, _) _ _) = do
|
||||||
let xs = dropWhile ((/= sf) . fst) rlist
|
let xs = dropWhile ((/= sf) . fst) rlist
|
||||||
(_, linktype) <- safeHead xs
|
(_, linktype) <- safeHead xs
|
||||||
return $ LUpdate linktype (set _3 (useBreakListsLinkTest llist (tail xs))) id
|
return $ LUpdate linktype (set _3 (useBreakListsLinkTest llist (tail xs))) id
|
||||||
@@ -127,10 +127,10 @@ itemToFunction itm = case itm ^. itType of
|
|||||||
ATTACH SHELLPAYLOAD{} -> AmmoPayloadSF LauncherAmmo
|
ATTACH SHELLPAYLOAD{} -> AmmoPayloadSF LauncherAmmo
|
||||||
_ -> NoSF
|
_ -> NoSF
|
||||||
|
|
||||||
structureToPotentialFunction
|
--structureToPotentialFunction
|
||||||
:: LabelDoubleTree ComposedItem ItemLink
|
-- :: LabelDoubleTree ComposedItem ItemLink
|
||||||
-> S.Set ItemStructuralFunction
|
-- -> S.Set ItemStructuralFunction
|
||||||
structureToPotentialFunction _ = mempty
|
--structureToPotentialFunction _ = mempty
|
||||||
|
|
||||||
baseCI :: Item -> ComposedItem
|
baseCI :: Item -> ComposedItem
|
||||||
baseCI itm = (itm, itemToFunction itm, itemBaseConnections itm)
|
baseCI itm = (itm, itemToFunction itm, itemBaseConnections itm)
|
||||||
@@ -144,14 +144,14 @@ itemBaseConnections itm = case _itType itm of
|
|||||||
laserLinkTest :: Item -> LinkTest
|
laserLinkTest :: Item -> LinkTest
|
||||||
laserLinkTest itm = LTest (llleft itm) (llright itm)
|
laserLinkTest itm = LTest (llleft itm) (llright itm)
|
||||||
|
|
||||||
llleft :: Item -> ComposedItem -> Maybe LinkUpdate
|
llleft :: Item -> LabelDoubleTree ItemLink ComposedItem -> Maybe LinkUpdate
|
||||||
llleft itm =
|
llleft itm =
|
||||||
_tryLeftLink
|
_tryLeftLink
|
||||||
. uncurry useBreakL
|
. uncurry useBreakL
|
||||||
$ itemToBreakLists itm WeaponTargetingSF
|
$ itemToBreakLists itm WeaponTargetingSF
|
||||||
|
|
||||||
llright :: Item -> ComposedItem -> Maybe LinkUpdate
|
llright :: Item -> LabelDoubleTree ItemLink ComposedItem -> Maybe LinkUpdate
|
||||||
llright itm pci = case pci ^. _1 . itType of
|
llright itm pci = case pci ^. ldtValue . _1 . itType of
|
||||||
CRAFT TRANSFORMER -> Just (toLasgunUpdate itm)
|
CRAFT TRANSFORMER -> Just (toLasgunUpdate itm)
|
||||||
_ -> _tryRightLink (uncurry useBreakL $ itemToBreakLists itm WeaponTargetingSF) pci
|
_ -> _tryRightLink (uncurry useBreakL $ itemToBreakLists itm WeaponTargetingSF) pci
|
||||||
|
|
||||||
@@ -164,7 +164,7 @@ toLasgunUpdate itm =
|
|||||||
|
|
||||||
springLinkTest :: LinkTest
|
springLinkTest :: LinkTest
|
||||||
springLinkTest = LTest (const Nothing) $
|
springLinkTest = LTest (const Nothing) $
|
||||||
\ci -> case ci ^. _1 . itType of
|
\ci -> case ci ^. ldtValue . _1 . itType of
|
||||||
CRAFT HARDWARE ->
|
CRAFT HARDWARE ->
|
||||||
Just
|
Just
|
||||||
( LUpdate
|
( LUpdate
|
||||||
@@ -182,14 +182,14 @@ type LDTComb a b = LabelDoubleTree b a -> LabelDoubleTree b a -> Maybe (LabelDou
|
|||||||
|
|
||||||
leftIsParentCombine :: LDTComb ComposedItem ItemLink
|
leftIsParentCombine :: LDTComb ComposedItem ItemLink
|
||||||
leftIsParentCombine ltree rtree = do
|
leftIsParentCombine ltree rtree = do
|
||||||
lu <- (ltree ^. ldtValue . _3 . tryRightLink) (rtree ^. ldtValue)
|
lu <- (ltree ^. ldtValue . _3 . tryRightLink) rtree --(rtree ^. ldtValue)
|
||||||
return $
|
return $
|
||||||
ltree & ldtValue %~ (lu ^. luParentUpdate)
|
ltree & ldtValue %~ (lu ^. luParentUpdate)
|
||||||
& ldtRight %~ (++ [(lu ^. luLinkType, rtree & ldtValue %~ (lu ^. luChildUpdate))])
|
& ldtRight %~ (++ [(lu ^. luLinkType, rtree & ldtValue %~ (lu ^. luChildUpdate))])
|
||||||
|
|
||||||
rightIsParentCombine :: LDTComb ComposedItem ItemLink
|
rightIsParentCombine :: LDTComb ComposedItem ItemLink
|
||||||
rightIsParentCombine ltree rtree = do
|
rightIsParentCombine ltree rtree = do
|
||||||
lu <- (rtree ^. ldtValue . _3 . tryLeftLink) (ltree ^. ldtValue)
|
lu <- (rtree ^. ldtValue . _3 . tryLeftLink) ltree -- (ltree ^. ldtValue)
|
||||||
return $
|
return $
|
||||||
rtree & ldtValue %~ (lu ^. luParentUpdate)
|
rtree & ldtValue %~ (lu ^. luParentUpdate)
|
||||||
& ldtLeft .:~ (lu ^. luLinkType, ltree & ldtValue %~ (lu ^. luChildUpdate))
|
& ldtLeft .:~ (lu ^. luLinkType, ltree & ldtValue %~ (lu ^. luChildUpdate))
|
||||||
@@ -200,9 +200,7 @@ leftRightCombine ::
|
|||||||
LabelDoubleTree b a ->
|
LabelDoubleTree b a ->
|
||||||
LabelDoubleTree b a ->
|
LabelDoubleTree b a ->
|
||||||
Maybe (LabelDoubleTree b a)
|
Maybe (LabelDoubleTree b a)
|
||||||
leftRightCombine f f' t1 t2 =
|
leftRightCombine f f' t1 t2 = f t1 t2 <|> checkdepth t1 t2
|
||||||
f t1 t2
|
|
||||||
<|> checkdepth t1 t2
|
|
||||||
where
|
where
|
||||||
checkdepth t t'@(LDT x ls rs) = fromMaybe (checktop t t') $ do
|
checkdepth t t'@(LDT x ls rs) = fromMaybe (checktop t t') $ do
|
||||||
(lab, t'') <- safeHead ls
|
(lab, t'') <- safeHead ls
|
||||||
|
|||||||
Reference in New Issue
Block a user