-
Notifications
You must be signed in to change notification settings - Fork 53
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
12 changed files
with
113 additions
and
86 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
28 changes: 28 additions & 0 deletions
28
src/swarm-topography/Swarm/Game/Scenario/Topography/Structure/Named.hs
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,28 @@ | ||
-- | | ||
-- SPDX-License-Identifier: BSD-3-Clause | ||
module Swarm.Game.Scenario.Topography.Structure.Named where | ||
|
||
import Data.Set (Set) | ||
import Data.Text (Text) | ||
import Swarm.Game.Scenario.Topography.Grid (Grid) | ||
import Swarm.Game.Scenario.Topography.Placement (StructureName) | ||
import Swarm.Language.Syntax.Direction (AbsoluteDir) | ||
|
||
data NamedArea a = NamedArea | ||
{ name :: StructureName | ||
, recognize :: Set AbsoluteDir | ||
-- ^ whether this structure should be registered for automatic recognition | ||
-- and which orientations shall be recognized. | ||
-- The supplied direction indicates which cardinal direction the | ||
-- original map's "North" has been re-oriented to. | ||
-- E.g., 'DWest' represents a rotation of 90 degrees counter-clockwise. | ||
, description :: Maybe Text | ||
-- ^ will be UI-facing only if this is a recognizable structure | ||
, structure :: a | ||
} | ||
deriving (Eq, Show, Functor) | ||
|
||
isRecognizable :: NamedArea a -> Bool | ||
isRecognizable = not . null . recognize | ||
|
||
type NamedGrid c = NamedArea (Grid c) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
57 changes: 57 additions & 0 deletions
57
src/swarm-topography/Swarm/Game/Scenario/Topography/Structure/Recognition/Static.hs
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,57 @@ | ||
{-# LANGUAGE TemplateHaskell #-} | ||
|
||
-- | | ||
-- SPDX-License-Identifier: BSD-3-Clause | ||
module Swarm.Game.Scenario.Topography.Structure.Recognition.Static where | ||
|
||
import Control.Lens (Lens') | ||
import Data.Map (Map) | ||
import Swarm.Game.Location | ||
import Swarm.Game.Scenario.Topography.Placement (StructureName) | ||
import Swarm.Game.Scenario.Topography.Structure.Named | ||
import Swarm.Game.Universe (SubworldName) | ||
import Swarm.Language.Syntax.Direction (AbsoluteDir) | ||
import Swarm.Util.Lens (makeLensesNoSigs) | ||
|
||
data RotationalSymmetry | ||
= -- | Aka 1-fold symmetry | ||
NoSymmetry | ||
| -- | Equivalent under rotation by 180 degrees | ||
TwoFold | ||
| -- | Equivalent under rotation by 90 degrees | ||
FourFold | ||
deriving (Show, Eq) | ||
|
||
data SymmetryAnnotatedGrid a = SymmetryAnnotatedGrid | ||
{ namedGrid :: NamedGrid a | ||
, symmetry :: RotationalSymmetry | ||
} | ||
deriving (Show) | ||
|
||
-- | For use in registering recognizable pre-placed structures | ||
data LocatedStructure = LocatedStructure | ||
{ placedName :: StructureName | ||
, upDirection :: AbsoluteDir | ||
, cornerLoc :: Location | ||
} | ||
deriving (Show) | ||
|
||
instance HasLocation LocatedStructure where | ||
modifyLoc f (LocatedStructure x y originalLoc) = | ||
LocatedStructure x y $ f originalLoc | ||
|
||
data StaticStructureInfo b = StaticStructureInfo | ||
{ _structureDefs :: [SymmetryAnnotatedGrid (Maybe b)] | ||
, _staticPlacements :: Map SubworldName [LocatedStructure] | ||
} | ||
deriving (Show) | ||
|
||
makeLensesNoSigs ''StaticStructureInfo | ||
|
||
-- | Structure templates that may be auto-recognized when constructed | ||
-- by a robot | ||
structureDefs :: Lens' (StaticStructureInfo b) [SymmetryAnnotatedGrid (Maybe b)] | ||
|
||
-- | A record of the static placements of structures, so that they can be | ||
-- added to the "recognized" list upon scenario initialization | ||
staticPlacements :: Lens' (StaticStructureInfo b) (Map SubworldName [LocatedStructure]) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters