From 6c65515381380f57181dbf75e06cf2149cac0305 Mon Sep 17 00:00:00 2001 From: jgk Date: Thu, 22 Apr 2021 14:42:49 +0200 Subject: [PATCH] Tweak airlock door to stop z fighting --- src/Dodge/Floor.hs | 3 ++- src/Dodge/Layout/Tree/Annotate.hs | 10 +++++++++- src/Dodge/LevelGen/TriggerDoor.hs | 2 +- src/Dodge/Room.hs | 19 ++++++++++++------- 4 files changed, 24 insertions(+), 10 deletions(-) diff --git a/src/Dodge/Floor.hs b/src/Dodge/Floor.hs index 0e9a00c8f..624e45082 100644 --- a/src/Dodge/Floor.hs +++ b/src/Dodge/Floor.hs @@ -33,7 +33,8 @@ roomTreex = do struct' <- aTreeStrut let struct = Node [EndRoom] [] let t' = padCorridors struct - t = treeTrunk [[StartRoom],[OrAno [[DoorAno],[Corridor]] ],[FirstWeapon],[Corridor]] t' + t = treeTrunk [[StartRoom],[OrAno [--[DoorAno],[Corridor], + [DoorNumAno 0,AirlockAno]] ],[FirstWeapon],[Corridor]] t' fmap (shiftExpandTree . expandTreeBy id) $ mapM annoToRoomTree t levx :: RandomGen g => State g [Room] diff --git a/src/Dodge/Layout/Tree/Annotate.hs b/src/Dodge/Layout/Tree/Annotate.hs index 2b7bd4345..5b9ae450a 100644 --- a/src/Dodge/Layout/Tree/Annotate.hs +++ b/src/Dodge/Layout/Tree/Annotate.hs @@ -22,6 +22,9 @@ data Annotation | Key Int | Corridor | DoorAno + | SwitchDoorAno + | DoorNumAno Int + | AirlockAno | FirstWeapon | StartRoom | EndRoom @@ -42,12 +45,17 @@ randomPadCorridors (Node x xs) = do xs' <- mapM randomPadCorridors xs return $ treeTrunk (replicate n [Corridor]) (Node x xs') +roomThenCorridor :: RandomGen g => Room -> State g (Tree (Either Room Room)) +roomThenCorridor theRoom = fmap (\r -> Node (Left theRoom) [(pure . Right) r]) + (randomiseOutLinks corridor) + annoToRoomTree :: RandomGen g => [Annotation] -> State g (Tree (Either Room Room)) annoToRoomTree [OrAno as] = do a <- takeOne as annoToRoomTree a annoToRoomTree [Corridor] = fmap (pure . Right) $ randomiseOutLinks corridor -annoToRoomTree [DoorAno] = fmap (\r -> Node (Left door) [(pure . Right) r]) (randomiseOutLinks corridor) +annoToRoomTree [DoorAno] = roomThenCorridor door +annoToRoomTree [DoorNumAno i,AirlockAno] = roomThenCorridor (airlock i) annoToRoomTree [FirstWeapon] = do branchWP <- branchRectWith weaponRoom blockedC <- blockedCorridor diff --git a/src/Dodge/LevelGen/TriggerDoor.hs b/src/Dodge/LevelGen/TriggerDoor.hs index 8ebaed6c2..ef5a4e40a 100644 --- a/src/Dodge/LevelGen/TriggerDoor.hs +++ b/src/Dodge/LevelGen/TriggerDoor.hs @@ -86,7 +86,7 @@ mkTriggerDoor c cond pl pr xs = addSound $ zipWith3 (triggerDoorPane c cond) , [prd,prrd,pr,pr] , [prrd,prru] ] - where norm = 15 *.* errorNormalizeV 49 ( vNormal (pr -.- pl)) + where norm = 14 *.* errorNormalizeV 49 ( vNormal (pr -.- pl)) hw = 0.5 *.* (pl +.+ pr) perp = 20 *.* normalizeV (pl -.- pr) --perp = pl -.- hw diff --git a/src/Dodge/Room.hs b/src/Dodge/Room.hs index a89902762..562acddbd 100644 --- a/src/Dodge/Room.hs +++ b/src/Dodge/Room.hs @@ -65,17 +65,22 @@ airlockOneWay n = Room col = dim $ dim $ bright red airlock :: Int -> Room airlock n = Room - { _rmPolys = [rectNSWE 90 0 0 40] + { _rmPolys = + [ rectNSWE 90 0 0 40 + , rectNSWE 60 30 (-40) 20 + ] , _rmLinks = lnks , _rmPath = [((20,85),(20,45)) ,((20,45),(20, 5)) ] - , _rmPS = [PS (0,15) 0 $ PutTriggerDoor col (not . cond) (0,0) (40,0) - ,PS (0,75) 0 $ PutTriggerDoor col (cond) (0,0) (40,0) - ,PS (35,45) (pi/2) $ PutButton $ makeSwitch col - (over worldState (M.insert (DoorNumOpen n) True)) - (over worldState (M.insert (DoorNumOpen n) False)) - ] + , _rmPS = + [PS (0,15) 0 $ PutTriggerDoor col (not . cond) (1,0) (39,0) + ,PS (0,75) 0 $ PutTriggerDoor col (cond) (1,0) (39,0) + ,PS (35,45) (pi/2) $ PutButton $ makeSwitch col + (over worldState (M.insert (DoorNumOpen n) True)) + (over worldState (M.insert (DoorNumOpen n) False)) + ,PS (-25, 45) 0 putLamp + ] , _rmBound = rectNSWE 75 15 0 40 } where lnks = [((20,85),0)