begin parameterising level so that it fits into larger type (with different modes like TITLE, LEVEL, SETTINGS, etc.)
This commit is contained in:
338
fcore/level/enemy/enemy-patch.sml
Normal file
338
fcore/level/enemy/enemy-patch.sml
Normal file
@@ -0,0 +1,338 @@
|
||||
signature ENEMY_PATCH =
|
||||
sig
|
||||
datatype enemy_patch =
|
||||
W_HEALTH of int
|
||||
| W_X of int
|
||||
| W_Y of int
|
||||
| W_X_AXIS of EntityType.x_axis
|
||||
| W_Y_AXIS of EntityType.y_axis
|
||||
| W_PLAT_ID of int
|
||||
| W_NEXT_PLAT_ID of int
|
||||
| W_BAT_REST of int
|
||||
| W_BAT_MAX_Y of int
|
||||
| W_BAT_MIN_Y of int
|
||||
| W_BAT_DIR_Y of EnemyType.bat_dir_y
|
||||
| W_FACING of EntityType.facing
|
||||
| W_SHIELD_ON of bool
|
||||
|
||||
val withPatch: EnemyType.enemy * enemy_patch -> EnemyType.enemy
|
||||
|
||||
val withPatches: EnemyType.enemy * enemy_patch list -> EnemyType.enemy
|
||||
end
|
||||
|
||||
structure EnemyPatch: ENEMY_PATCH =
|
||||
struct
|
||||
datatype enemy_patch =
|
||||
W_HEALTH of int
|
||||
| W_X of int
|
||||
| W_Y of int
|
||||
| W_X_AXIS of EntityType.x_axis
|
||||
| W_Y_AXIS of EntityType.y_axis
|
||||
| W_PLAT_ID of int
|
||||
| W_NEXT_PLAT_ID of int
|
||||
| W_BAT_REST of int
|
||||
| W_BAT_MAX_Y of int
|
||||
| W_BAT_MIN_Y of int
|
||||
| W_BAT_DIR_Y of EnemyType.bat_dir_y
|
||||
| W_FACING of EntityType.facing
|
||||
| W_SHIELD_ON of bool
|
||||
|
||||
fun mkEnemy
|
||||
( id
|
||||
, health
|
||||
, x
|
||||
, y
|
||||
, xAxis
|
||||
, yAxis
|
||||
, variant
|
||||
, platID
|
||||
, nextPlatID
|
||||
, batRest
|
||||
, batDirY
|
||||
, batMaxY
|
||||
, batMinY
|
||||
, facing
|
||||
, shieldOn
|
||||
) =
|
||||
{ id = id
|
||||
, health = health
|
||||
, x = x
|
||||
, y = y
|
||||
, xAxis = xAxis
|
||||
, yAxis = yAxis
|
||||
, variant = variant
|
||||
, platID = platID
|
||||
, nextPlatID = nextPlatID
|
||||
, batRest = batRest
|
||||
, batDirY = batDirY
|
||||
, batMaxY = batMaxY
|
||||
, batMinY = batMinY
|
||||
, facing = facing
|
||||
, shieldOn = shieldOn
|
||||
}
|
||||
|
||||
fun withPatch (enemy, patch) =
|
||||
let
|
||||
val
|
||||
{ id
|
||||
, health
|
||||
, x
|
||||
, y
|
||||
, xAxis
|
||||
, yAxis
|
||||
, variant
|
||||
, platID
|
||||
, nextPlatID
|
||||
, batRest
|
||||
, batDirY
|
||||
, batMaxY
|
||||
, batMinY
|
||||
, facing
|
||||
, shieldOn
|
||||
} = enemy
|
||||
in
|
||||
case patch of
|
||||
W_HEALTH health =>
|
||||
mkEnemy
|
||||
( id
|
||||
, health
|
||||
, x
|
||||
, y
|
||||
, xAxis
|
||||
, yAxis
|
||||
, variant
|
||||
, platID
|
||||
, nextPlatID
|
||||
, batRest
|
||||
, batDirY
|
||||
, batMaxY
|
||||
, batMinY
|
||||
, facing
|
||||
, shieldOn
|
||||
)
|
||||
| W_X x =>
|
||||
mkEnemy
|
||||
( id
|
||||
, health
|
||||
, x
|
||||
, y
|
||||
, xAxis
|
||||
, yAxis
|
||||
, variant
|
||||
, platID
|
||||
, nextPlatID
|
||||
, batRest
|
||||
, batDirY
|
||||
, batMaxY
|
||||
, batMinY
|
||||
, facing
|
||||
, shieldOn
|
||||
)
|
||||
| W_X_AXIS xAxis =>
|
||||
mkEnemy
|
||||
( id
|
||||
, health
|
||||
, x
|
||||
, y
|
||||
, xAxis
|
||||
, yAxis
|
||||
, variant
|
||||
, platID
|
||||
, nextPlatID
|
||||
, batRest
|
||||
, batDirY
|
||||
, batMaxY
|
||||
, batMinY
|
||||
, facing
|
||||
, shieldOn
|
||||
)
|
||||
| W_Y y =>
|
||||
mkEnemy
|
||||
( id
|
||||
, health
|
||||
, x
|
||||
, y
|
||||
, xAxis
|
||||
, yAxis
|
||||
, variant
|
||||
, platID
|
||||
, nextPlatID
|
||||
, batRest
|
||||
, batDirY
|
||||
, batMaxY
|
||||
, batMinY
|
||||
, facing
|
||||
, shieldOn
|
||||
)
|
||||
| W_Y_AXIS yAxis =>
|
||||
mkEnemy
|
||||
( id
|
||||
, health
|
||||
, x
|
||||
, y
|
||||
, xAxis
|
||||
, yAxis
|
||||
, variant
|
||||
, platID
|
||||
, nextPlatID
|
||||
, batRest
|
||||
, batDirY
|
||||
, batMaxY
|
||||
, batMinY
|
||||
, facing
|
||||
, shieldOn
|
||||
)
|
||||
| W_PLAT_ID platID =>
|
||||
mkEnemy
|
||||
( id
|
||||
, health
|
||||
, x
|
||||
, y
|
||||
, xAxis
|
||||
, yAxis
|
||||
, variant
|
||||
, platID
|
||||
, nextPlatID
|
||||
, batRest
|
||||
, batDirY
|
||||
, batMaxY
|
||||
, batMinY
|
||||
, facing
|
||||
, shieldOn
|
||||
)
|
||||
| W_NEXT_PLAT_ID nextPlatID =>
|
||||
mkEnemy
|
||||
( id
|
||||
, health
|
||||
, x
|
||||
, y
|
||||
, xAxis
|
||||
, yAxis
|
||||
, variant
|
||||
, platID
|
||||
, nextPlatID
|
||||
, batRest
|
||||
, batDirY
|
||||
, batMaxY
|
||||
, batMinY
|
||||
, facing
|
||||
, shieldOn
|
||||
)
|
||||
| W_BAT_REST batRest =>
|
||||
mkEnemy
|
||||
( id
|
||||
, health
|
||||
, x
|
||||
, y
|
||||
, xAxis
|
||||
, yAxis
|
||||
, variant
|
||||
, platID
|
||||
, nextPlatID
|
||||
, batRest
|
||||
, batDirY
|
||||
, batMaxY
|
||||
, batMinY
|
||||
, facing
|
||||
, shieldOn
|
||||
)
|
||||
| W_BAT_MAX_Y batMaxY =>
|
||||
mkEnemy
|
||||
( id
|
||||
, health
|
||||
, x
|
||||
, y
|
||||
, xAxis
|
||||
, yAxis
|
||||
, variant
|
||||
, platID
|
||||
, nextPlatID
|
||||
, batRest
|
||||
, batDirY
|
||||
, batMaxY
|
||||
, batMinY
|
||||
, facing
|
||||
, shieldOn
|
||||
)
|
||||
| W_BAT_MIN_Y batMinY =>
|
||||
mkEnemy
|
||||
( id
|
||||
, health
|
||||
, x
|
||||
, y
|
||||
, xAxis
|
||||
, yAxis
|
||||
, variant
|
||||
, platID
|
||||
, nextPlatID
|
||||
, batRest
|
||||
, batDirY
|
||||
, batMaxY
|
||||
, batMinY
|
||||
, facing
|
||||
, shieldOn
|
||||
)
|
||||
| W_BAT_DIR_Y batDirY =>
|
||||
mkEnemy
|
||||
( id
|
||||
, health
|
||||
, x
|
||||
, y
|
||||
, xAxis
|
||||
, yAxis
|
||||
, variant
|
||||
, platID
|
||||
, nextPlatID
|
||||
, batRest
|
||||
, batDirY
|
||||
, batMaxY
|
||||
, batMinY
|
||||
, facing
|
||||
, shieldOn
|
||||
)
|
||||
| W_FACING facing =>
|
||||
mkEnemy
|
||||
( id
|
||||
, health
|
||||
, x
|
||||
, y
|
||||
, xAxis
|
||||
, yAxis
|
||||
, variant
|
||||
, platID
|
||||
, nextPlatID
|
||||
, batRest
|
||||
, batDirY
|
||||
, batMaxY
|
||||
, batMinY
|
||||
, facing
|
||||
, shieldOn
|
||||
)
|
||||
| W_SHIELD_ON shieldOn =>
|
||||
mkEnemy
|
||||
( id
|
||||
, health
|
||||
, x
|
||||
, y
|
||||
, xAxis
|
||||
, yAxis
|
||||
, variant
|
||||
, platID
|
||||
, nextPlatID
|
||||
, batRest
|
||||
, batDirY
|
||||
, batMaxY
|
||||
, batMinY
|
||||
, facing
|
||||
, shieldOn
|
||||
)
|
||||
end
|
||||
|
||||
fun withPatches (enemy, lst) =
|
||||
case lst of
|
||||
hd :: tl =>
|
||||
let val enemy = withPatch (enemy, hd)
|
||||
in withPatches (enemy, tl)
|
||||
end
|
||||
| [] => enemy
|
||||
end
|
||||
Reference in New Issue
Block a user