swarm/swarm.cabal
Karl Ostmo b382494f7b
Scenario launch options selection (#1010)
Closes #358 and closes #866.

Allows specification of a seed value and/or the path of a script to run.  Specifying a script to run in advance allows eligibility for code size scoring.

Some effort was invested into integrating the Brick `FileBrowser` widget and discovering its idiosyncrasies.  This paves the way for more applications of `FileBrowser` within Swarm.

## Usage

From the scenario selection menu, press the `o` key to pop up a dialog for launch options.

![Screenshot from 2023-06-06 01-38-25](https://github.com/swarm-game/swarm/assets/261693/e306f2ce-db30-4906-9b02-db8e44bc5e99)

Any manually-selected initial-script or seed are persisted to disk and will pre-populate the launch configuration dialog upon the next play.  If a certain scenario is subsequently launched the normal way (i.e. by pressing `Enter` instead of `o`), then this clears the saved script path/seed, and the next pop-up of the launch configuration dialog will not see its fields pre-populated.

## Warning: Save format changed

This PR changes the `ScenarioStatus` datatype, and therefore game status/progress saved previously to this PR will not be recognized.  See https://github.com/swarm-game/swarm/pull/974#discussion_r1111335102 for discussion about this situation.
2023-06-09 06:38:51 +00:00

342 lines
14 KiB
Plaintext

cabal-version: 2.4
name: swarm
version: 0.3.0.1
synopsis: 2D resource gathering game with programmable robots
description: Swarm is a 2D programming and resource gathering
game. Program your robots to explore the world and
collect resources, which in turn allows you to
build upgraded robots that can run more
interesting and complex programs. See the README
for more information and instructions on how to
play or contribute!
license: BSD-3-Clause
license-file: LICENSE
author: Brent Yorgey
maintainer: byorgey@gmail.com
bug-reports: https://github.com/swarm-game/swarm/issues
copyright: Brent Yorgey 2021
category: Game
tested-with: GHC ==8.10.7 || ==9.0.2 || ==9.2.4 || ==9.4.2
extra-source-files: CHANGELOG.md
example/*.sw
editors/emacs/*.el
editors/vscode/syntaxes/*.json
data-dir: data/
data-files: *.yaml, scenarios/**/*.yaml, scenarios/**/*.txt, scenarios/**/*.sw, *.txt, test/language-snippets/**/*.sw
source-repository head
type: git
location: git://github.com/swarm-game/swarm.git
flag ci
description: Make warnings error
default: False
manual: True
common common
if flag(ci)
ghc-options: -Werror
ghc-options: -Wall
-Wcompat
-Widentities
-Wincomplete-uni-patterns
-Wincomplete-record-updates
-Wno-star-is-type
if impl(ghc >= 8.4)
ghc-options: -Wpartial-fields
default-language: Haskell2010
common stan-config
ghc-options: -fwrite-ide-info
-hiedir=.hie
-- Harmless extensions from GHC2021
common ghc2021-extensions
ghc-options: -Wprepositive-qualified-module
default-extensions:
BangPatterns
DeriveAnyClass
DeriveDataTypeable
DeriveFunctor
DeriveGeneric
DeriveTraversable
ExplicitForAll
FlexibleContexts
FlexibleInstances
GADTSyntax
MultiParamTypeClasses
NumericUnderscores
RankNTypes
ScopedTypeVariables
StandaloneDeriving
TupleSections
TypeApplications
TypeOperators
-- Note we warn on prequalified
ImportQualifiedPost
-- Not GHC2021, but until we get \cases we use \case a lot
LambdaCase
library
import: stan-config, common, ghc2021-extensions
exposed-modules: Data.BoolExpr.Simplify
Swarm.App
Swarm.Constant
Swarm.Doc.Gen
Swarm.Doc.Pedagogy
Swarm.Game.Failure
Swarm.Game.Failure.Render
Swarm.Game.Achievement.Attainment
Swarm.Game.Achievement.Definitions
Swarm.Game.Achievement.Description
Swarm.Game.Achievement.Persistence
Swarm.Game.CESK
Swarm.Game.Display
Swarm.Game.Entity
Swarm.Game.Exception
Swarm.Game.Location
Swarm.Game.Log
Swarm.Game.Recipe
Swarm.Game.ResourceLoading
Swarm.Game.Robot
Swarm.Game.Scenario
Swarm.Game.Scenario.Cell
Swarm.TUI.Launch.Controller
Swarm.TUI.Launch.Model
Swarm.TUI.Launch.Prep
Swarm.TUI.Launch.View
Swarm.Game.Scenario.Objective
Swarm.Game.Scenario.Objective.Graph
Swarm.Game.Scenario.Objective.Logic
Swarm.Game.Scenario.Objective.Validation
Swarm.Game.Scenario.Objective.WinCheck
Swarm.Game.Scenario.RobotLookup
Swarm.Game.Scenario.Scoring.Best
Swarm.Game.Scenario.Scoring.CodeSize
Swarm.Game.Scenario.Scoring.ConcreteMetrics
Swarm.Game.Scenario.Scoring.GenericMetrics
Swarm.Game.Scenario.Status
Swarm.Game.Scenario.Style
Swarm.Game.Scenario.WorldDescription
Swarm.Game.ScenarioInfo
Swarm.Game.State
Swarm.Game.Step
Swarm.Game.Terrain
Swarm.Game.Value
Swarm.Game.World
Swarm.Game.WorldGen
Swarm.Language.Capability
Swarm.Language.Context
Swarm.Language.Elaborate
Swarm.Language.Key
Swarm.Language.LSP
Swarm.Language.LSP.Hover
Swarm.Language.LSP.VarUsage
Swarm.Language.Module
Swarm.Language.Parse
Swarm.Language.Parse.QQ
Swarm.Language.Pipeline
Swarm.Language.Pipeline.QQ
Swarm.Language.Pretty
Swarm.Language.Requirement
Swarm.Language.Syntax
Swarm.Language.Typecheck
Swarm.Language.Typecheck.Unify
Swarm.Language.Typed
Swarm.Language.Types
Swarm.Language.Value
Swarm.ReadableIORef
Swarm.TUI.Attr
Swarm.TUI.Border
Swarm.TUI.Controller
Swarm.TUI.Controller.Util
Swarm.TUI.Inventory.Sorting
Swarm.TUI.List
Swarm.TUI.Model
Swarm.TUI.Model.Goal
Swarm.TUI.Model.Menu
Swarm.TUI.Model.Name
Swarm.TUI.Model.Repl
Swarm.TUI.Model.StateUpdate
Swarm.TUI.Model.UI
Swarm.TUI.Panel
Swarm.TUI.View
Swarm.TUI.View.Achievement
Swarm.TUI.View.CellDisplay
Swarm.TUI.View.CustomStyling
Swarm.TUI.View.Objective
Swarm.TUI.View.Util
Swarm.Util
Swarm.Util.Lens
Swarm.Util.Yaml
Swarm.Version
Swarm.Web
other-modules: Paths_swarm
autogen-modules: Paths_swarm
build-depends: base >= 4.14 && < 4.18,
brick-list-skip >= 0.1.1.2 && < 0.2,
aeson >= 2 && < 2.2,
array >= 0.5.4 && < 0.6,
blaze-html >= 0.9.1 && < 0.9.2,
boolexpr >= 0.2 && < 0.3,
brick >= 1.5 && < 1.7,
bytestring >= 0.10 && < 0.12,
clock >= 0.8.2 && < 0.9,
cmark-gfm >= 0.2 && < 0.3,
colour >= 2.3.6 && < 2.4,
containers >= 0.6.2 && < 0.7,
directory >= 1.3 && < 1.4,
dotgen >= 0.4 && < 0.5,
either >= 5.0 && < 5.1,
extra >= 1.7 && < 1.8,
filepath >= 1.4 && < 1.5,
fused-effects >= 1.1.1.1 && < 1.2,
fused-effects-lens >= 1.2.0.1 && < 1.3,
fuzzy >= 0.1 && < 0.2,
githash >= 0.1.6 && < 0.2,
hashable >= 1.3.4 && < 1.5,
hsnoise >= 0.0.3 && < 0.1,
http-client >= 0.7 && < 0.8,
http-client-tls >= 0.3 && < 0.4,
http-types >= 0.12 && < 0.13,
lens >= 4.19 && < 5.3,
linear >= 1.21.6 && < 1.23,
lsp >= 1.6 && < 1.7,
megaparsec >= 9.0 && < 9.4,
minimorph >= 0.3 && < 0.4,
mtl >= 2.2.2 && < 2.3,
murmur3 >= 1.0.4 && < 1.1,
natural-sort >= 0.1.2 && < 0.2,
parser-combinators >= 1.2 && < 1.4,
prettyprinter >= 1.7.0 && < 1.8,
random >= 1.2.0 && < 1.3,
servant >= 0.19 && < 0.20,
servant-docs >= 0.12 && < 0.13,
servant-server >= 0.19 && < 0.20,
SHA >= 1.6.4 && < 1.6.5,
simple-enumeration >= 0.2 && < 0.3,
split >= 0.2.3 && < 0.3,
stm >= 2.5.0 && < 2.6,
syb >= 0.7 && < 0.8,
tagged >= 0.8 && < 0.9,
template-haskell >= 2.16 && < 2.20,
text >= 1.2.4 && < 2.1,
text-rope >= 0.2 && < 0.3,
text-zipper >= 0.10 && < 0.14,
time >= 1.9 && < 1.14,
transformers >= 0.5.6.2 && < 0.6.2.0,
unification-fd >= 0.11 && < 0.12,
unordered-containers >= 0.2.14 && < 0.3,
vector >= 0.12 && < 0.14,
vty >= 5.33 && < 5.39,
wai >= 3.2 && < 3.3,
warp >= 3.2 && < 3.4,
witch >= 1.1.1.0 && < 1.3,
word-wrap >= 0.5 && < 0.6,
yaml >= 0.11 && < 0.11.12.0,
hs-source-dirs: src
default-language: Haskell2010
default-extensions:
-- Avoid unexpected unevaluated thunk buildup
-- See discussion in #415
StrictData
executable swarm
import: stan-config, common
main-is: Main.hs
build-depends: optparse-applicative >= 0.16 && < 0.18,
githash >= 0.1.6 && < 0.2,
-- Imports shared with the library don't need bounds
base,
text,
swarm
hs-source-dirs: app
default-language: Haskell2010
ghc-options: -threaded
default-extensions: ImportQualifiedPost
test-suite swarm-unit
import: stan-config, common, ghc2021-extensions
main-is: Main.hs
type: exitcode-stdio-1.0
other-modules: TestEval
TestInventory
TestModel
TestPedagogy
TestNotification
TestLanguagePipeline
TestPretty
TestBoolExpr
TestCommand
TestLSP
TestScoring
TestUtil
build-depends: tasty >= 0.10 && < 1.5,
tasty-hunit >= 0.10 && < 0.11,
tasty-quickcheck >= 0.10 && < 0.11,
QuickCheck >= 2.14 && < 2.15,
-- Imports shared with the library don't need bounds
aeson,
base,
boolexpr,
containers,
filepath,
hashable,
lens,
linear,
mtl,
swarm,
text,
time,
witch,
vty
hs-source-dirs: test/unit
default-language: Haskell2010
ghc-options: -threaded
test-suite swarm-integration
import: stan-config, common, ghc2021-extensions
main-is: Main.hs
type: exitcode-stdio-1.0
build-depends: tasty >= 0.10 && < 1.5,
tasty-hunit >= 0.10 && < 0.11,
tasty-expected-failure >= 0.12 && < 0.13,
-- Imports shared with the library don't need bounds
base,
containers,
directory,
filepath,
lens,
linear,
mtl,
swarm,
text,
transformers,
witch,
yaml
hs-source-dirs: test/integration
default-language: Haskell2010
ghc-options: -threaded
benchmark benchmark
import: stan-config, common, ghc2021-extensions
main-is: Benchmark.hs
hs-source-dirs: bench
type: exitcode-stdio-1.0
build-depends: criterion >= 1.6.0.0 && < 1.7,
-- Import shared with the library don't need bounds
base,
lens,
linear,
mtl,
random,
swarm,
text
default-language: Haskell2010
ghc-options: -threaded