swarm-0.1.0.0: 2D resource gathering game with programmable robots
CopyrightBrent Yorgey
LicenseBSD-3-Clause
Maintainerbyorgey@gmail.com
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: not started, in progress, or complete. Note that "in progress" is currently a bit of a misnomer since games cannot be saved; at the moment it really means more like "you played this scenario before but didn't win".

Constructors

NotStarted 
InProgress 

Fields

Complete 

Fields

Instances

Instances details
FromJSON ScenarioStatus Source # 
Instance details

Defined in Swarm.Game.ScenarioInfo

ToJSON ScenarioStatus Source # 
Instance details

Defined in Swarm.Game.ScenarioInfo

Generic ScenarioStatus Source # 
Instance details

Defined in Swarm.Game.ScenarioInfo

Associated Types

type Rep ScenarioStatus :: Type -> Type #

Read ScenarioStatus Source # 
Instance details

Defined in Swarm.Game.ScenarioInfo

Show ScenarioStatus Source # 
Instance details

Defined in Swarm.Game.ScenarioInfo

Eq ScenarioStatus Source # 
Instance details

Defined in Swarm.Game.ScenarioInfo

Ord ScenarioStatus Source # 
Instance details

Defined in Swarm.Game.ScenarioInfo

type Rep ScenarioStatus Source # 
Instance details

Defined in Swarm.Game.ScenarioInfo

type Rep ScenarioStatus = D1 ('MetaData "ScenarioStatus" "Swarm.Game.ScenarioInfo" "swarm-0.1.0.0-CFIPFkeeTOhKLDsfeG4aYn" 'False) (C1 ('MetaCons "NotStarted" 'PrefixI 'False) (U1 :: Type -> Type) :+: (C1 ('MetaCons "InProgress" 'PrefixI 'True) (S1 ('MetaSel ('Just "_scenarioStarted") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedStrict) (Rec0 ZonedTime) :*: (S1 ('MetaSel ('Just "_scenarioElapsed") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedStrict) (Rec0 NominalDiffTime) :*: S1 ('MetaSel ('Just "_scenarioElapsedTicks") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedStrict) (Rec0 Integer))) :+: C1 ('MetaCons "Complete" 'PrefixI 'True) (S1 ('MetaSel ('Just "_scenarioStarted") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedStrict) (Rec0 ZonedTime) :*: (S1 ('MetaSel ('Just "_scenarioElapsed") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedStrict) (Rec0 NominalDiffTime) :*: S1 ('MetaSel ('Just "_scenarioElapsedTicks") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedStrict) (Rec0 Integer)))))

data ScenarioInfo Source #

A ScenarioInfo record stores metadata about a scenario: its canonical path, most recent status, and best-ever status.

Instances

Instances details
FromJSON ScenarioInfo Source # 
Instance details

Defined in Swarm.Game.ScenarioInfo

ToJSON ScenarioInfo Source # 
Instance details

Defined in Swarm.Game.ScenarioInfo

Generic ScenarioInfo Source # 
Instance details

Defined in Swarm.Game.ScenarioInfo

Associated Types

type Rep ScenarioInfo :: Type -> Type #

Read ScenarioInfo Source # 
Instance details

Defined in Swarm.Game.ScenarioInfo

Show ScenarioInfo Source # 
Instance details

Defined in Swarm.Game.ScenarioInfo

Eq ScenarioInfo Source # 
Instance details

Defined in Swarm.Game.ScenarioInfo

Ord ScenarioInfo Source # 
Instance details

Defined in Swarm.Game.ScenarioInfo

type Rep ScenarioInfo Source # 
Instance details

Defined in Swarm.Game.ScenarioInfo

type Rep ScenarioInfo = D1 ('MetaData "ScenarioInfo" "Swarm.Game.ScenarioInfo" "swarm-0.1.0.0-CFIPFkeeTOhKLDsfeG4aYn" 'False) (C1 ('MetaCons "ScenarioInfo" 'PrefixI 'True) ((S1 ('MetaSel ('Just "_scenarioPath") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedStrict) (Rec0 FilePath) :*: S1 ('MetaSel ('Just "_scenarioStatus") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedStrict) (Rec0 ScenarioStatus)) :*: (S1 ('MetaSel ('Just "_scenarioBestTime") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedStrict) (Rec0 ScenarioStatus) :*: S1 ('MetaSel ('Just "_scenarioBestTicks") '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.

scenarioBestTime :: Lens' ScenarioInfo ScenarioStatus Source #

The best status of the scenario, measured in real world time.

scenarioBestTicks :: Lens' ScenarioInfo ScenarioStatus Source #

The best status of the scenario, measured in game ticks.

updateScenarioInfoOnQuit :: ZonedTime -> Integer -> 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 

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 :: ScenarioCollection -> FilePath -> IO 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

Eq 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 (Lift IO) sig m => EntityMap -> m (Either Text ScenarioCollection) Source #

Load all the scenarios from the scenarios data directory.

loadScenarioInfo :: (Has (Lift IO) sig m, Has (Throw Text) 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

Orphan instances