swarm-0.5.0.0: 2D resource gathering game with programmable robots
LicenseBSD-3-Clause
Safe HaskellSafe-Inferred
LanguageHaskell2010

Swarm.Game.ScenarioInfo

Description

Saving and loading info about scenarios (status, path, etc.) as well as loading recursive scenario collections.

Synopsis

Scenario info

data ScenarioStatus Source #

A ScenarioStatus stores the status of a scenario along with appropriate metadata: NotStarted, or Played. The Played status has two sub-states: Attempted or Completed.

Instances

Instances details
FromJSON ScenarioStatus Source # 
Instance details

Defined in Swarm.Game.Scenario.Status

ToJSON ScenarioStatus Source # 
Instance details

Defined in Swarm.Game.Scenario.Status

Generic ScenarioStatus Source # 
Instance details

Defined in Swarm.Game.Scenario.Status

Associated Types

type Rep ScenarioStatus :: Type -> Type #

Read ScenarioStatus Source # 
Instance details

Defined in Swarm.Game.Scenario.Status

Show ScenarioStatus Source # 
Instance details

Defined in Swarm.Game.Scenario.Status

Eq ScenarioStatus Source # 
Instance details

Defined in Swarm.Game.Scenario.Status

Ord ScenarioStatus Source # 
Instance details

Defined in Swarm.Game.Scenario.Status

type Rep ScenarioStatus Source # 
Instance details

Defined in Swarm.Game.Scenario.Status

data ScenarioInfo Source #

A ScenarioInfo record stores metadata about a scenario: its canonical path and status. By way of the ScenarioStatus record, it stores the most recent status and best-ever status.

Instances

Instances details
FromJSON ScenarioInfo Source # 
Instance details

Defined in Swarm.Game.Scenario.Status

ToJSON ScenarioInfo Source # 
Instance details

Defined in Swarm.Game.Scenario.Status

Generic ScenarioInfo Source # 
Instance details

Defined in Swarm.Game.Scenario.Status

Associated Types

type Rep ScenarioInfo :: Type -> Type #

Read ScenarioInfo Source # 
Instance details

Defined in Swarm.Game.Scenario.Status

Show ScenarioInfo Source # 
Instance details

Defined in Swarm.Game.Scenario.Status

Eq ScenarioInfo Source # 
Instance details

Defined in Swarm.Game.Scenario.Status

Ord ScenarioInfo Source # 
Instance details

Defined in Swarm.Game.Scenario.Status

type Rep ScenarioInfo Source # 
Instance details

Defined in Swarm.Game.Scenario.Status

type Rep ScenarioInfo = D1 ('MetaData "ScenarioInfo" "Swarm.Game.Scenario.Status" "swarm-0.5.0.0-6qXEbhCmuXA4wRndqqhBu" 'False) (C1 ('MetaCons "ScenarioInfo" 'PrefixI 'True) (S1 ('MetaSel ('Just "_scenarioPath") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedStrict) (Rec0 FilePath) :*: S1 ('MetaSel ('Just "_scenarioStatus") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedStrict) (Rec0 ScenarioStatus)))

scenarioPath :: Lens' ScenarioInfo FilePath Source #

The path of the scenario, relative to data/scenarios.

scenarioStatus :: Lens' ScenarioInfo ScenarioStatus Source #

The status of the scenario.

updateScenarioInfoOnFinish :: CodeSizeDeterminators -> ZonedTime -> TickNumber -> Bool -> ScenarioInfo -> ScenarioInfo Source #

Update the current ScenarioInfo record when quitting a game.

Note that when comparing "best" times, shorter is not always better! As long as the scenario is not completed (e.g. some do not have win condition) we consider having fun longer to be better.

Scenario collection

data ScenarioCollection Source #

A scenario collection is a tree of scenarios, keyed by name, together with an optional order.

Invariant: every item in the scOrder exists as a key in the scMap.

Constructors

SC 

Instances

Instances details
Show ScenarioCollection Source # 
Instance details

Defined in Swarm.Game.ScenarioInfo

scenarioCollectionToList :: ScenarioCollection -> [ScenarioItem] Source #

Convert a scenario collection to a list of scenario items.

scenarioItemByPath :: FilePath -> Traversal' ScenarioCollection ScenarioItem Source #

Access and modify ScenarioItems in collection based on their path.

normalizeScenarioPath :: MonadIO m => ScenarioCollection -> FilePath -> m FilePath Source #

Canonicalize a scenario path, making it usable as a unique key.

data ScenarioItem Source #

A scenario item is either a specific scenario, or a collection of scenarios (e.g. the scenarios contained in a subdirectory).

Instances

Instances details
Show ScenarioItem Source # 
Instance details

Defined in Swarm.Game.ScenarioInfo

scenarioItemName :: ScenarioItem -> Text Source #

Retrieve the name of a scenario item.

Loading and saving scenarios

loadScenarios :: (Has (Accum (Seq SystemFailure)) sig m, Has (Lift IO) sig m) => EntityMap -> WorldMap -> m ScenarioCollection Source #

Load all the scenarios from the scenarios data directory.

loadScenarioInfo :: (Has (Throw SystemFailure) sig m, Has (Lift IO) sig m) => FilePath -> m ScenarioInfo Source #

Load saved info about played scenario from XDG data directory.

saveScenarioInfo :: FilePath -> ScenarioInfo -> IO () Source #

Save info about played scenario to XDG data directory.

Re-exports