@@ -80,21 +80,8 @@ module Swarm.TUI.Model (
80
80
modalScroll ,
81
81
replScroll ,
82
82
83
- -- * Runtime state
84
- RuntimeState ,
85
- webPort ,
86
- upstreamRelease ,
87
- eventLog ,
88
- worlds ,
89
- scenarios ,
90
- stdEntityMap ,
91
- stdRecipes ,
92
- appData ,
93
- nameParts ,
94
-
95
83
-- ** Utility
96
84
logEvent ,
97
- mkGameStateConfig ,
98
85
99
86
-- * App state
100
87
AppState (AppState ),
@@ -115,49 +102,39 @@ module Swarm.TUI.Model (
115
102
focusedItem ,
116
103
focusedEntity ,
117
104
nextScenario ,
118
- initRuntimeState ,
119
105
) where
120
106
121
107
import Brick
122
108
import Brick.Widgets.List qualified as BL
123
- import Control.Effect.Accum
124
- import Control.Effect.Lift
125
- import Control.Effect.Throw
126
109
import Control.Lens hiding (from , (<.>) )
127
110
import Control.Monad ((>=>) )
128
111
import Control.Monad.State (MonadState )
129
112
import Data.List (findIndex )
130
113
import Data.List.NonEmpty (NonEmpty (.. ))
131
- import Data.Map (Map )
132
114
import Data.Maybe (fromMaybe )
133
- import Data.Sequence (Seq )
134
115
import Data.Text (Text )
135
116
import Data.Vector qualified as V
136
117
import GitHash (GitInfo )
137
118
import Graphics.Vty (ColorMode (.. ))
138
119
import Network.Wai.Handler.Warp (Port )
139
120
import Swarm.Game.Entity as E
140
- import Swarm.Game.Failure
141
- import Swarm.Game.Recipe (Recipe , loadRecipes )
142
- import Swarm.Game.ResourceLoading (NameGenerator , initNameGenerator , readAppData )
143
121
import Swarm.Game.Robot
144
122
import Swarm.Game.Robot.Concrete
145
123
import Swarm.Game.Robot.Context
146
124
import Swarm.Game.Scenario.Status
147
- import Swarm.Game.ScenarioInfo (ScenarioCollection , loadScenarios , _SISingle )
125
+ import Swarm.Game.ScenarioInfo (_SISingle )
148
126
import Swarm.Game.State
127
+ import Swarm.Game.State.Runtime
149
128
import Swarm.Game.State.Substate
150
129
import Swarm.Game.Tick (TickNumber (.. ))
151
- import Swarm.Game.World.Load (loadWorlds )
152
- import Swarm.Game.World.Typecheck (WorldMap )
153
130
import Swarm.Log
154
131
import Swarm.TUI.Inventory.Sorting
155
132
import Swarm.TUI.Model.Menu
156
133
import Swarm.TUI.Model.Name
157
134
import Swarm.TUI.Model.Repl
158
135
import Swarm.TUI.Model.UI
159
136
import Swarm.Util.Lens (makeLensesNoSigs )
160
- import Swarm.Version (NewReleaseFailure ( NoMainUpstreamRelease ) )
137
+ import Swarm.Version (NewReleaseFailure )
161
138
import Text.Fuzzy qualified as Fuzzy
162
139
163
140
------------------------------------------------------------
@@ -188,87 +165,6 @@ modalScroll = viewportScroll ModalViewport
188
165
replScroll :: ViewportScroll Name
189
166
replScroll = viewportScroll REPLViewport
190
167
191
- -- ----------------------------------------------------------------------------
192
- -- Runtime state --
193
- -- ----------------------------------------------------------------------------
194
-
195
- data RuntimeState = RuntimeState
196
- { _webPort :: Maybe Port
197
- , _upstreamRelease :: Either NewReleaseFailure String
198
- , _eventLog :: Notifications LogEntry
199
- , _worlds :: WorldMap
200
- , _scenarios :: ScenarioCollection
201
- , _stdEntityMap :: EntityMap
202
- , _stdRecipes :: [Recipe Entity ]
203
- , _appData :: Map Text Text
204
- , _nameParts :: NameGenerator
205
- }
206
-
207
- initRuntimeState ::
208
- ( Has (Throw SystemFailure ) sig m
209
- , Has (Accum (Seq SystemFailure )) sig m
210
- , Has (Lift IO ) sig m
211
- ) =>
212
- m RuntimeState
213
- initRuntimeState = do
214
- entities <- loadEntities
215
- recipes <- loadRecipes entities
216
- worlds <- loadWorlds entities
217
- scenarios <- loadScenarios entities worlds
218
- appDataMap <- readAppData
219
- nameGen <- initNameGenerator appDataMap
220
- return $
221
- RuntimeState
222
- { _webPort = Nothing
223
- , _upstreamRelease = Left (NoMainUpstreamRelease [] )
224
- , _eventLog = mempty
225
- , _worlds = worlds
226
- , _scenarios = scenarios
227
- , _stdEntityMap = entities
228
- , _stdRecipes = recipes
229
- , _appData = appDataMap
230
- , _nameParts = nameGen
231
- }
232
-
233
- makeLensesNoSigs ''RuntimeState
234
-
235
- -- | The port on which the HTTP debug service is running.
236
- webPort :: Lens' RuntimeState (Maybe Port )
237
-
238
- -- | The upstream release version.
239
- upstreamRelease :: Lens' RuntimeState (Either NewReleaseFailure String )
240
-
241
- -- | A log of runtime events.
242
- --
243
- -- This logging is separate from the logging done during game-play.
244
- -- If some error happens before a game is even selected, this is the
245
- -- place to log it.
246
- eventLog :: Lens' RuntimeState (Notifications LogEntry )
247
-
248
- -- | A collection of typechecked world DSL terms that are available to
249
- -- be used in scenario definitions.
250
- worlds :: Lens' RuntimeState WorldMap
251
-
252
- -- | The collection of scenarios that comes with the game.
253
- scenarios :: Lens' RuntimeState ScenarioCollection
254
-
255
- -- | The standard entity map loaded from disk. Individual scenarios
256
- -- may define additional entities which will get added to this map
257
- -- when loading the scenario.
258
- stdEntityMap :: Lens' RuntimeState EntityMap
259
-
260
- -- | The standard list of recipes loaded from disk. Individual scenarios
261
- -- may define additional recipes which will get added to this list
262
- -- when loading the scenario.
263
- stdRecipes :: Lens' RuntimeState [Recipe Entity ]
264
-
265
- -- | Free-form data loaded from the @data@ directory, for things like
266
- -- the logo, about page, tutorial story, etc.
267
- appData :: Lens' RuntimeState (Map Text Text )
268
-
269
- -- | Lists of words/adjectives for use in building random robot names.
270
- nameParts :: Lens' RuntimeState NameGenerator
271
-
272
168
--------------------------------------------------
273
169
-- Utility
274
170
@@ -281,16 +177,6 @@ logEvent src sev who msg el =
281
177
where
282
178
l = LogEntry (TickNumber 0 ) src sev who msg
283
179
284
- -- | Create a 'GameStateConfig' record from the 'RuntimeState'.
285
- mkGameStateConfig :: RuntimeState -> GameStateConfig
286
- mkGameStateConfig rs =
287
- GameStateConfig
288
- { initNameParts = rs ^. nameParts
289
- , initEntities = rs ^. stdEntityMap
290
- , initRecipes = rs ^. stdRecipes
291
- , initWorldMap = rs ^. worlds
292
- }
293
-
294
180
-- ----------------------------------------------------------------------------
295
181
-- APPSTATE --
296
182
-- ----------------------------------------------------------------------------
0 commit comments