Skip to content
Snippets Groups Projects

Extended scripts support

All threads resolved!
1 file
+ 87
1
Compare changes
  • Side-by-side
  • Inline
+ 87
1
@@ -175,6 +175,8 @@ checkTileset = do
where checkTileProperty :: Property -> LintWriter Tileset
checkTileProperty p@(Property name _) = case name of
"collides" -> isBool p
-- named tiles are needed for scripting and do not hurt otherwise
"name" -> isString p
_ -> warn $ "unknown tile property " <> prettyprint name
<> " in tile with global id "
<> showText (tileId tile)
@@ -225,7 +227,10 @@ checkLayer = do
checkObjectProperty :: Object -> Property -> LintWriter Layer
checkObjectProperty obj p@(Property name _) = case name of
"url" -> pure ()
"url" -> do
pure ()
unless (objectType obj == "website")
$ complain "\"url\" can only be set for objects of type \"website\""
"allowApi" -> forbidProperty name
"getBadge" -> do
when (1 /= length (getProperties obj))
$ warn "Objects with the property \"getBadge\" set are removed at runtime, \
\and any other properties set on them will be gone."
unwrapString p $ \str ->
@@ -245,3+250,3 @@
(Just w, Just h) | w /= 0 && h /= 0 ->
BadgeRect objectX objectY w h
_ -> BadgePoint objectX objectY
-- | these properties are used by the extended script to allow doors
"door" -> do
isBool p
unless (objectType obj == "variable") $
complain "Door variables must be of type \"variable\""
when (null (objectName obj) || objectName obj == Just mempty) $
complain "Door variables objects must have a name given"
"default" -> do
isBool p
requireProperty "door"
"persist" -> do
isBool p
requireProperty "door"
"openLayer" -> do
isString p
requireProperty "door"
"closeLayer" -> do
isString p
requireProperty "door"
"openSound" -> do
isString p
unwrapURI (Proxy @"audio") p
(dependsOn . Link)
(dependsOn . Local)
unless (containsProperty obj "soundRadius")
$ suggest "set \"soundRadius\" to a limit the door sound to a certain area\"."
requireProperty "door"
"closeSound" -> do
isString p
unwrapURI (Proxy @"audio") p
(dependsOn . Link)
(dependsOn . Local)
requireProperty "door"
"soundRadius" -> do
isInt p
unless (containsProperty obj "soundRadius")
$ suggest "set \"soundRadius\" to a limit the door sound to a certain area\"."
requireProperty "door"
_ -> warn $ "unknown object property " <> prettyprint name <> "."
where
requireProperty req = do
unless (containsProperty obj req) $
complain( "property " <> prettyprint req <> " is required by property " <> prettyprint name <> ".")
-- | Checks a single (custom) property of an objectgroup layer
@@ -384,6 +441,31 @@ checkTileLayerProperty p@(Property name _value) = case name of
-- False -> warn "property \"collides\" set to 'false' is useless."
"getBadge" -> complain "\"getBadge\" must be set on an \"objectgroup\" \
\ layer; it does not work on tile layers."
-- | these properties are used by the extended script to allow doors
"zone" -> do
isString p
uselessEmptyLayer
"doorVariable" -> do
isString p
requireProperty "zone"
"autoOpen" -> do
isBool p
requireProperty "zone"
"autoClose" -> do
isBool p
requireProperty "zone"
"code" -> do
isString p
requireProperty "zone"
"openTriggerMessage" -> do
isString p
requireProperty "zone"
"closeTriggerMessage" -> do
isString p
requireProperty "zone"
-- name on tile layer unsupported
"name" -> isUnsupported
_ ->
warn $ "unknown property type " <> prettyprint name
@@ -592,6 +674,10 @@ isString = flip unwrapString (const $ pure ())
isBool :: Property -> LintWriter a
isBool = flip unwrapBool (const $ pure ())
-- | just asserts that this is a int
isInt:: Property -> LintWriter a
isInt = flip unwrapInt (const $ pure ())
isIntInRange :: Int -> Int -> Property -> LintWriter b
isIntInRange = isOrdInRange @Int unwrapInt
Loading