From 21460ceaa8fb91206ad05c5e104f7d74d5140fac Mon Sep 17 00:00:00 2001 From: justin Date: Wed, 20 Aug 2025 17:53:39 +0100 Subject: [PATCH] Try to autocomplete before doing terminal return --- src/Dodge/Terminal.hs | 44 ++++++++++++------- src/Dodge/Update/Input/InGame.hs | 4 +- tags | 73 +++++++++++++++----------------- 3 files changed, 63 insertions(+), 58 deletions(-) diff --git a/src/Dodge/Terminal.hs b/src/Dodge/Terminal.hs index cfd165f77..c1f4ec2c8 100644 --- a/src/Dodge/Terminal.hs +++ b/src/Dodge/Terminal.hs @@ -59,7 +59,8 @@ getCommand :: World -> Terminal -> TCom -> PTE.TrieMap Char (PTE.TrieMap Char [TerminalLine]) getCommand w tm = \case TCInfo x z -> PTE.singleton x (PTE.singleton "" (makeTermPara z)) - TCBase -> helpCommand <> quitCommand <> toggleCommands tm + --TCBase -> helpCommand <> quitCommand <> toggleCommands tm + TCBase -> quitCommand <> toggleCommands tm TCDamageCommand -> damageCodeCommand w TCSensorInfo -> sensorCommand w tm @@ -104,14 +105,17 @@ toggleCommands tm (TmWdWdfromWdWd (WdWdNegateTrig $ x ^. ttTriggerID)) ]) -helpCommand :: PTE.TrieMap Char (PTE.TrieMap Char [TerminalLine]) -helpCommand = PTE.singleton "HELP" (fmap makeTermPara helpStrings) +--helpCommand :: PTE.TrieMap Char (PTE.TrieMap Char [TerminalLine]) +--helpCommand = PTE.singleton "" (fmap makeTermPara helpStrings) +-- +--helpStrings :: PTE.TrieMap Char String +--helpStrings = +-- PTE.fromList +-- [ ("", "THIS TERMINAL PROCESSES KEYBOARD INPUT. USE [RETURN] OR [LMB] TO REGISTER YOUR INPUT. AVAILABLE COMMANDS CAN BE SCROLLED THROUGH, HOLD [RMB] TO SCROLL THROUGH ARGUMENTS. USE [TAB] FOR AUTOCOMPLETE.") +-- ] -helpStrings :: PTE.TrieMap Char String -helpStrings = - PTE.fromList - [ ("", "THIS TERMINAL PROCESSES KEYBOARD INPUT. USE [RETURN] OR [LMB] TO REGISTER YOUR INPUT. AVAILABLE COMMANDS CAN BE SCROLLED THROUGH, HOLD [RMB] TO SCROLL THROUGH ARGUMENTS. USE [TAB] FOR AUTOCOMPLETE.") - ] +helpPara :: [TerminalLine] +helpPara = makeTermPara "THIS TERMINAL PROCESSES KEYBOARD INPUT. USE [RETURN] OR [LMB] TO REGISTER YOUR INPUT. AVAILABLE COMMANDS CAN BE SCROLLED THROUGH, HOLD [RMB] TO SCROLL THROUGH ARGUMENTS. USE [TAB] FOR AUTOCOMPLETE." quitCommand :: PTE.TrieMap Char (PTE.TrieMap Char [TerminalLine]) quitCommand = PTE.singleton "QUIT" (PTE.singleton "" [TLine 0 [] TmWdWdPowerDownTerminal]) @@ -137,9 +141,14 @@ makeColorTermLine col str = TLine 1 [TerminalLineConst str col] TmWdId commandColor :: Color commandColor = yellow --- ugly -tabComplete :: String -> World -> Terminal -> Terminal -tabComplete s' w tm = case PTE.lookup s $ getCommands w tm of +tabComplete :: World -> Terminal -> Terminal +tabComplete w tm = fromMaybe tm $ do + s <- tm ^? tmStatus . tiText + return $ tabComplete' s w tm + +-- ugly, can improve output to explain when showing available arguments +tabComplete' :: String -> World -> Terminal -> Terminal +tabComplete' s' w tm = case PTE.lookup s $ getCommands w tm of Just m -> f (s ++ " ") $ PTE.toList $ PTE.lookupPrefix a m Nothing -> f "" $ PTE.toList $ PTE.lookupPrefix s $ getCommands w tm where @@ -184,14 +193,17 @@ simpleTermMessage strs = defaultTerminal & tmBootLines .~ map makeTermLine strs terminalReturnEffect :: Int -> World -> World terminalReturnEffect tmid w = fromMaybe w $ do - tm <- w ^? cWorld . lWorld . terminals . ix tmid + tm' <- w ^? cWorld . lWorld . terminals . ix tmid + let tm = tabComplete w tm' s <- tm ^? tmStatus . tiText let ss = fromMaybe [makeTermLine "ERROR: INPUT NOT RECOGNISED"] $ do let args = words s - x <- args ^? ix 0 - teff <- PTE.lookup x (getCommands w tm) - let y = fromMaybe "" (args ^? ix 1) - PTE.lookup y teff + case args of + [] -> return helpPara + (x:_) -> do + teff <- PTE.lookup x (getCommands w tm) + let y = fromMaybe "" (args ^? ix 1) + PTE.lookup y teff return $ w & totm . tmDisplayedLines .:~ (getPromptTM ++ s, termTextColor) & totm . tmFutureLines .~ ss <> tlSetStatus (TerminalTextInput "") diff --git a/src/Dodge/Update/Input/InGame.hs b/src/Dodge/Update/Input/InGame.hs index 5200e4f2b..8318b06ed 100644 --- a/src/Dodge/Update/Input/InGame.hs +++ b/src/Dodge/Update/Input/InGame.hs @@ -405,9 +405,7 @@ updateKeysTextInputTerminal tmid u = uvWorld %~ terminalReturnEffect tmid | otherwise = id tryTabComplete - | u ^. uvWorld . input . pressedKeys . at ScancodeTab == Just 0 = fromMaybe id $ do - s <- u ^? uvWorld . cWorld . lWorld . terminals . ix tmid . tmStatus . tiText - return $ uvWorld . cWorld . lWorld . terminals . ix tmid %~ tabComplete s (u ^. uvWorld) + | u ^. uvWorld . input . pressedKeys . at ScancodeTab == Just 0 = uvWorld . cWorld . lWorld . terminals . ix tmid %~ tabComplete (u ^. uvWorld) | otherwise = id updateKeyInGame :: Universe -> Scancode -> Int -> Universe diff --git a/tags b/tags index 24191fb02..e5b1188d9 100644 --- a/tags +++ b/tags @@ -17,7 +17,7 @@ <$> src/Dodge/Data/Camera.hs 39;" o <$> src/Dodge/Data/Creature.hs 80;" o <$> src/Dodge/Data/LWorld.hs 184;" o -<$> src/Dodge/Data/Terminal.hs 72;" o +<$> src/Dodge/Data/Terminal.hs 71;" o ABSOLUTE src/Dodge/Data/Item/Combine.hs 40;" C AIUNIT src/Dodge/Data/Item/Combine.hs 75;" C ALTERIFLE src/Dodge/Data/Item/Combine.hs 155;" C @@ -1309,7 +1309,6 @@ TCBase src/Dodge/Data/Terminal.hs 51;" C TCDamageCommand src/Dodge/Data/Terminal.hs 52;" C TCInfo src/Dodge/Data/Terminal.hs 50;" C TCSensorInfo src/Dodge/Data/Terminal.hs 53;" C -TCToggles src/Dodge/Data/Terminal.hs 54;" C TCom src/Dodge/Data/Terminal.hs 49;" t TESLAGUN src/Dodge/Data/Item/Combine.hs 169;" C THERMOMETER src/Dodge/Data/Item/Combine.hs 85;" C @@ -1365,16 +1364,15 @@ Tile src/Data/Tile.hs 16;" t Tiled src/Data/Tile.hs 14;" C TimeFlowStatus src/Dodge/Data/World.hs 58;" t Tiny src/Shape/Data.hs 32;" C -TmGetSensor src/Dodge/Data/Terminal.hs 65;" C -TmTmClearDisplayedLines src/Dodge/Data/Terminal.hs 63;" C -TmTmSetStatus src/Dodge/Data/Terminal.hs 64;" C -TmWdId src/Dodge/Data/Terminal.hs 57;" C -TmWdWd src/Dodge/Data/Terminal.hs 56;" t -TmWdWdDeactivateTerminal src/Dodge/Data/Terminal.hs 59;" C -TmWdWdDoDeathTriggers src/Dodge/Data/Terminal.hs 62;" C -TmWdWdPowerDownTerminal src/Dodge/Data/Terminal.hs 58;" C -TmWdWdTermSound src/Dodge/Data/Terminal.hs 61;" C -TmWdWdfromWdWd src/Dodge/Data/Terminal.hs 60;" C +TmTmClearDisplayedLines src/Dodge/Data/Terminal.hs 62;" C +TmTmSetStatus src/Dodge/Data/Terminal.hs 63;" C +TmWdId src/Dodge/Data/Terminal.hs 56;" C +TmWdWd src/Dodge/Data/Terminal.hs 55;" t +TmWdWdDeactivateTerminal src/Dodge/Data/Terminal.hs 58;" C +TmWdWdDoDeathTriggers src/Dodge/Data/Terminal.hs 61;" C +TmWdWdPowerDownTerminal src/Dodge/Data/Terminal.hs 57;" C +TmWdWdTermSound src/Dodge/Data/Terminal.hs 60;" C +TmWdWdfromWdWd src/Dodge/Data/Terminal.hs 59;" C ToContinueStart src/Sound/Data.hs 27;" C ToPlaySound src/Sound/Data.hs 35;" t ToStart src/Sound/Data.hs 26;" C @@ -2569,7 +2567,7 @@ aRadarPulse src/Dodge/RadarSweep.hs 19;" f aShape src/Dodge/Placement/Instance/LightSource.hs 107;" f aSound src/Dodge/SoundLogic.hs 74;" f aTreeStrut src/Dodge/Tree/GenerateStructure.hs 42;" f -accessTerminal src/Dodge/WorldEffect.hs 54;" f +accessTerminal src/Dodge/WorldEffect.hs 52;" f activateDetonator src/Dodge/Creature/Impulse/UseItem.hs 60;" f activeTargetCursorPic src/Dodge/Targeting/Draw.hs 31;" f addArmour src/Dodge/Creature.hs 85;" f @@ -2955,7 +2953,7 @@ combineList src/Dodge/Combine.hs 20;" f combineRooms src/Dodge/Room/Procedural.hs 152;" f combineS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 480;" f combineTree src/Dodge/Tree/Compose.hs 66;" f -commandColor src/Dodge/Terminal.hs 139;" f +commandColor src/Dodge/Terminal.hs 141;" f commonPrefix src/Dodge/Debug/Terminal.hs 146;" f comp src/Quaternion.hs 65;" f compactDraw src/Dodge/LevelGen.hs 91;" f @@ -3118,7 +3116,6 @@ dbArgChain src/Dodge/Base.hs 170;" f dbwMuzzles src/Dodge/HeldUse.hs 314;" f deZoneIX src/Dodge/Zoning/Base.hs 89;" f deZoneWall src/Dodge/Zoning/Wall.hs 70;" f -deactivateTerminal src/Dodge/WorldEffect.hs 113;" f deadEndRoom src/Dodge/Room/Room.hs 235;" f deadFeet src/Dodge/Creature/Picture.hs 66;" f deadRot src/Dodge/Creature/Picture.hs 82;" f @@ -3274,8 +3271,8 @@ doCrWdAc src/Dodge/CreatureEffect.hs 77;" f doCrWdImp src/Dodge/CreatureEffect.hs 16;" f doCrWdWd src/Dodge/CreatureEffect.hs 20;" f doDamage src/Dodge/Creature/State.hs 41;" f -doDeathToggle src/Dodge/WorldEffect.hs 85;" f -doDeathTriggers src/Dodge/WorldEffect.hs 79;" f +doDeathToggle src/Dodge/WorldEffect.hs 84;" f +doDeathTriggers src/Dodge/WorldEffect.hs 77;" f doDebugTest src/Dodge/Update/Input/DebugTest.hs 22;" f doDebugTest2 src/Dodge/Update/Input/DebugTest.hs 37;" f doDebugTestF10 src/Dodge/Update/Input/DebugTest.hs 62;" f @@ -3326,13 +3323,13 @@ doTextInputOver src/Dodge/Update/Input/Text.hs 15;" f doTextInputOverUniverse src/Dodge/Update/Input/Text.hs 12;" f doThrust src/Dodge/Projectile/Update.hs 182;" f doTimeScroll src/Dodge/Update.hs 208;" f -doTmWdWd src/Dodge/WorldEffect.hs 88;" f +doTmWdWd src/Dodge/WorldEffect.hs 87;" f doWallRotate src/Dodge/Update/Camera.hs 213;" f doWdBl src/Dodge/WorldBool.hs 10;" f doWdCrBl src/Dodge/CreatureEffect.hs 37;" f doWdCrCr src/Dodge/CreatureEffect.hs 12;" f doWdP2f src/Dodge/WdP2f.hs 12;" f -doWdWd src/Dodge/WorldEffect.hs 28;" f +doWdWd src/Dodge/WorldEffect.hs 26;" f doWorldEvents src/Dodge/Update.hs 443;" f doWorldPos src/Dodge/WorldPos.hs 7;" f door src/Dodge/Room/Door.hs 13;" f @@ -3552,7 +3549,7 @@ errorNormalizeV src/Geometry.hs 55;" f errorPointInPolygon src/Geometry.hs 47;" f evaluateRandPS src/Dodge/Placement/PlaceSpot.hs 150;" f evenOddSplit src/Dodge/Base.hs 160;" f -exitTerminalSubInv src/Dodge/WorldEffect.hs 119;" f +exitTerminalSubInv src/Dodge/WorldEffect.hs 107;" f expandLine src/Dodge/Picture.hs 30;" f expandPolyBy src/Dodge/LevelGen/StaticWalls.hs 91;" f expandPolyByFixed src/Dodge/LevelGen/StaticWalls.hs 97;" f @@ -3709,7 +3706,6 @@ getPretty src/AesonHelp.hs 8;" f getPromptTM src/Dodge/Terminal/Type.hs 6;" f getRootItemBounds src/Dodge/Render/HUD.hs 93;" f getSelectedCloseObj src/Dodge/SelectedClose.hs 14;" f -getSensorInfo src/Dodge/WorldEffect.hs 125;" f getSmoothScrollValue src/Dodge/SmoothScroll.hs 21;" f getSplitString src/Dodge/Debug/Terminal.hs 126;" f getTiles src/Dodge/Layout.hs 208;" f @@ -3809,9 +3805,8 @@ heldItemWeight src/Dodge/Creature/Statistics.hs 72;" f heldPositionInfo src/Dodge/Item/Info.hs 241;" f heldTorqueAmount src/Dodge/HeldUse.hs 584;" f heldTriggerType src/Dodge/BaseTriggerType.hs 27;" f -helpCommand src/Dodge/Terminal.hs 109;" f +helpPara src/Dodge/Terminal.hs 117;" f helpPoly3D src/Polyhedra.hs 125;" f -helpStrings src/Dodge/Terminal.hs 112;" f heron src/Geometry.hs 221;" f hiToFloat src/Dodge/Room/Modify/Girder.hs 171;" f highBar src/Dodge/Room/Foreground.hs 89;" f @@ -4072,7 +4067,7 @@ lineCol src/Picture/Base.hs 230;" f lineGeom src/Dodge/Base.hs 32;" f lineOnScreenCone src/Dodge/Debug/Picture.hs 60;" f lineOrth src/Dodge/Creature/Boid.hs 126;" f -lineOutputTerminal src/Dodge/Room/Warning.hs 49;" f +lineOutputTerminal src/Dodge/Room/Warning.hs 48;" f lineSplit src/Justify.hs 26;" f lineThick src/Picture/Base.hs 234;" f lineUp src/Dodge/Creature/Boid.hs 148;" f @@ -4160,8 +4155,8 @@ makeBullet src/Dodge/HeldUse.hs 1021;" f makeButton src/Dodge/LevelGen/Switch.hs 16;" f makeByteStringShaderUsingVAO src/Shader/Compile.hs 128;" f makeCloudAt src/Dodge/WorldEvent/Cloud.hs 7;" f -makeColorTermLine src/Dodge/Terminal.hs 136;" f -makeColorTermPara src/Dodge/Terminal.hs 133;" f +makeColorTermLine src/Dodge/Terminal.hs 138;" f +makeColorTermPara src/Dodge/Terminal.hs 135;" f makeCorpse src/Dodge/Corpse/Make.hs 13;" f makeDebris src/Dodge/Block/Debris.hs 45;" f makeDebrisDirected src/Dodge/Block/Debris.hs 48;" f @@ -4197,8 +4192,8 @@ makeSourcedShader src/Shader/Compile.hs 167;" f makeSpark src/Dodge/Spark.hs 45;" f makeSubmenuOption src/Dodge/Menu/OptionType.hs 19;" f makeSwitch src/Dodge/LevelGen/Switch.hs 38;" f -makeTermLine src/Dodge/Terminal.hs 121;" f -makeTermPara src/Dodge/Terminal.hs 130;" f +makeTermLine src/Dodge/Terminal.hs 123;" f +makeTermPara src/Dodge/Terminal.hs 132;" f makeTeslaArc src/Dodge/Tesla.hs 29;" f makeTeslaExplosionAt src/Dodge/WorldEvent/Explosion.hs 40;" f makeTileFromPoly src/Tile.hs 34;" f @@ -4311,7 +4306,7 @@ moveProjectile src/Dodge/Projectile/Update.hs 262;" f moveRoomBy src/Dodge/Room/Link.hs 53;" f moveShockwave src/Dodge/Shockwave/Update.hs 13;" f moveStuckGrenade src/Dodge/Projectile/Update.hs 248;" f -moveToSideFirstOutLink src/Dodge/Room/Warning.hs 58;" f +moveToSideFirstOutLink src/Dodge/Room/Warning.hs 51;" f moveWall src/Dodge/Wall/Move.hs 29;" f moveWallID src/Dodge/Wall/Move.hs 24;" f moveWallIDToward src/Dodge/Wall/Move.hs 47;" f @@ -4591,7 +4586,6 @@ positionRoomsFromTree src/Dodge/Tree/Shift.hs 35;" f postGenerationProcessing src/Dodge/LevelGen.hs 33;" f postUniverseLoadSideEffect src/Dodge/WorldLoad.hs 11;" f postWorldLoad src/Dodge/WorldLoad.hs 15;" f -powerDownTerminal src/Dodge/WorldEffect.hs 107;" f powerFakeout src/Dodge/Room/Start.hs 27;" f powerFakeout' src/Dodge/Room/Start.hs 24;" f powerLegs src/Dodge/Item/Equipment.hs 85;" f @@ -4679,7 +4673,7 @@ qToV2 src/Quaternion.hs 56;" f qToV3 src/Quaternion.hs 53;" f quarterRoomSquare src/Dodge/Room/Procedural.hs 213;" f quarterRoomTri src/Dodge/Room/Procedural.hs 177;" f -quitCommand src/Dodge/Terminal.hs 118;" f +quitCommand src/Dodge/Terminal.hs 120;" f qz src/Quaternion.hs 71;" f rLauncher src/Dodge/Item/Held/Launcher.hs 14;" f rLauncherX src/Dodge/Item/Held/Launcher.hs 30;" f @@ -4772,6 +4766,7 @@ replacePutID src/Dodge/Placement/Instance/Wall.hs 102;" f resetCrVocCoolDown src/Dodge/Creature/Vocalization.hs 47;" f resetPLUse src/Dodge/PlacementSpot.hs 96;" f resetStride src/Dodge/Creature/State/WalkCycle.hs 24;" f +resetTerminal src/Dodge/WorldEffect.hs 101;" f resizeFBOTO src/Framebuffer/Update.hs 203;" f resizeFBOTO3 src/Framebuffer/Update.hs 175;" f resizeRBO src/Framebuffer/Update.hs 87;" f @@ -4936,7 +4931,7 @@ selectedItemScroll src/Dodge/Update/Scroll.hs 50;" f sensAboveDoor src/Dodge/Room/SensorDoor.hs 52;" f sensInsideDoor src/Dodge/Room/SensorDoor.hs 58;" f senseDamage src/Dodge/Machine/Update.hs 160;" f -sensorCommand src/Dodge/Terminal.hs 86;" f +sensorCommand src/Dodge/Terminal.hs 85;" f sensorRoom src/Dodge/Room/SensorDoor.hs 25;" f sensorRoomRunPast src/Dodge/Room/SensorDoor.hs 45;" f sensorSPic src/Dodge/Machine/Draw.hs 70;" f @@ -5072,7 +5067,7 @@ shuffleRoomPos src/Dodge/Layout.hs 78;" f shuffleTail src/RandomHelp.hs 59;" f sigmoid src/Dodge/Base.hs 151;" f simpleCrSprings src/Dodge/Update.hs 883;" f -simpleTermMessage src/Dodge/Terminal.hs 184;" f +simpleTermMessage src/Dodge/Terminal.hs 186;" f sineRaisePitchOneSecS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 680;" f sineRaisePitchTwoSecS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 472;" f singleAmmo src/Dodge/Item/AmmoSlots.hs 62;" f @@ -5220,7 +5215,7 @@ t src/ShortShow.hs 33;" f tEast src/Dodge/Room/Corridor.hs 90;" f tToBTree src/Dodge/Tree/Compose.hs 92;" f tWest src/Dodge/Room/Corridor.hs 115;" f -tabComplete src/Dodge/Terminal.hs 143;" f +tabComplete src/Dodge/Terminal.hs 145;" f takeN src/RandomHelp.hs 44;" f takeNMore src/RandomHelp.hs 41;" f takeOne src/RandomHelp.hs 22;" f @@ -5251,7 +5246,7 @@ termScreenColor src/Dodge/Terminal/Color.hs 10;" f termSoundLine src/Dodge/Terminal.hs 49;" f termTextColor src/Dodge/Terminal.hs 52;" f terminalColor src/Dodge/Placement/Instance/Terminal.hs 51;" f -terminalReturnEffect src/Dodge/Terminal.hs 187;" f +terminalReturnEffect src/Dodge/Terminal.hs 189;" f terminalSPic src/Dodge/Machine/Draw.hs 29;" f terminalScreenGlow src/Dodge/Machine/Update.hs 35;" f terminalShape src/Dodge/Machine/Draw.hs 32;" f @@ -5305,8 +5300,8 @@ tingS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 574;" f tinitusS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 566;" f titleOptionsMenu src/Dodge/Menu.hs 102;" f titleOptionsNoWrite src/Dodge/Menu.hs 105;" f -tlDoEffect src/Dodge/Terminal.hs 127;" f -tlSetStatus src/Dodge/Terminal.hs 124;" f +tlDoEffect src/Dodge/Terminal.hs 129;" f +tlSetStatus src/Dodge/Terminal.hs 126;" f tmUpdate src/Dodge/Update.hs 499;" f toBinary src/Dodge/Inventory/SelectionList.hs 138;" f toBothLnk src/Dodge/RoomLink.hs 121;" f @@ -5321,7 +5316,7 @@ toV2 src/Geometry/Data.hs 54;" f toV3 src/Geometry/Data.hs 57;" f toV4 src/Geometry/Data.hs 60;" f toggleCombineInv src/Dodge/DisplayInventory.hs 318;" f -toggleCommand src/Dodge/Terminal.hs 96;" f +toggleCommands src/Dodge/Terminal.hs 95;" f toggleEquipmentAt src/Dodge/Creature/Impulse/UseItem.hs 65;" f toggleExamineInv src/Dodge/Creature/Impulse/UseItem.hs 103;" f toggleJust src/MaybeHelp.hs 41;" f @@ -5337,7 +5332,7 @@ topTestPart src/Dodge/TestString.hs 60;" f torch src/Dodge/Item/Held/Utility.hs 23;" f torchShape src/Dodge/Item/Draw/SPic.hs 290;" f torqueAmount src/Dodge/HeldUse.hs 579;" f -torqueCr src/Dodge/WorldEffect.hs 72;" f +torqueCr src/Dodge/WorldEffect.hs 70;" f torso src/Dodge/Creature/Picture.hs 100;" f tractCr src/Dodge/TractorBeam/Update.hs 28;" f tractFlIt src/Dodge/TractorBeam/Update.hs 23;" f