swarm-0.4: 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.4-ISnx5FXhZ2Y66vKOx5hQmE" '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