begin adding shield slime enemy variant
This commit is contained in:
@@ -517,6 +517,9 @@ struct
|
||||
EnemyPatch.withPatches (enemy, patches)
|
||||
end
|
||||
|
||||
fun updateShieldSlime
|
||||
(player, enemy, walls, wallTree, platforms, platformTree) = enemy
|
||||
|
||||
fun updateEnemyState
|
||||
(enemy, walls, wallTree, platforms, platformTree, player, graph) =
|
||||
case #variant enemy of
|
||||
@@ -527,4 +530,7 @@ struct
|
||||
updateFollowState
|
||||
(player, enemy, walls, wallTree, platforms, platformTree, graph)
|
||||
| STRAIGHT_BAT => updateStraightBat (player, enemy, walls, wallTree)
|
||||
| SHIELD_SLIME =>
|
||||
updateShieldSlime
|
||||
(player, enemy, walls, wallTree, platforms, platformTree)
|
||||
end
|
||||
|
||||
@@ -13,6 +13,7 @@ sig
|
||||
| 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
|
||||
|
||||
@@ -34,6 +35,7 @@ struct
|
||||
| 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
|
||||
@@ -50,6 +52,7 @@ struct
|
||||
, batMaxY
|
||||
, batMinY
|
||||
, facing
|
||||
, shieldOn
|
||||
) =
|
||||
{ id = id
|
||||
, health = health
|
||||
@@ -65,6 +68,7 @@ struct
|
||||
, batMaxY = batMaxY
|
||||
, batMinY = batMinY
|
||||
, facing = facing
|
||||
, shieldOn = shieldOn
|
||||
}
|
||||
|
||||
fun withPatch (enemy, patch) =
|
||||
@@ -84,6 +88,7 @@ struct
|
||||
, batMaxY
|
||||
, batMinY
|
||||
, facing
|
||||
, shieldOn
|
||||
} = enemy
|
||||
in
|
||||
case patch of
|
||||
@@ -103,6 +108,7 @@ struct
|
||||
, batMaxY
|
||||
, batMinY
|
||||
, facing
|
||||
, shieldOn
|
||||
)
|
||||
| W_X x =>
|
||||
mkEnemy
|
||||
@@ -120,6 +126,7 @@ struct
|
||||
, batMaxY
|
||||
, batMinY
|
||||
, facing
|
||||
, shieldOn
|
||||
)
|
||||
| W_X_AXIS xAxis =>
|
||||
mkEnemy
|
||||
@@ -137,6 +144,7 @@ struct
|
||||
, batMaxY
|
||||
, batMinY
|
||||
, facing
|
||||
, shieldOn
|
||||
)
|
||||
| W_Y y =>
|
||||
mkEnemy
|
||||
@@ -154,6 +162,7 @@ struct
|
||||
, batMaxY
|
||||
, batMinY
|
||||
, facing
|
||||
, shieldOn
|
||||
)
|
||||
| W_Y_AXIS yAxis =>
|
||||
mkEnemy
|
||||
@@ -171,6 +180,7 @@ struct
|
||||
, batMaxY
|
||||
, batMinY
|
||||
, facing
|
||||
, shieldOn
|
||||
)
|
||||
| W_PLAT_ID platID =>
|
||||
mkEnemy
|
||||
@@ -188,6 +198,7 @@ struct
|
||||
, batMaxY
|
||||
, batMinY
|
||||
, facing
|
||||
, shieldOn
|
||||
)
|
||||
| W_NEXT_PLAT_ID nextPlatID =>
|
||||
mkEnemy
|
||||
@@ -205,6 +216,7 @@ struct
|
||||
, batMaxY
|
||||
, batMinY
|
||||
, facing
|
||||
, shieldOn
|
||||
)
|
||||
| W_BAT_REST batRest =>
|
||||
mkEnemy
|
||||
@@ -222,6 +234,7 @@ struct
|
||||
, batMaxY
|
||||
, batMinY
|
||||
, facing
|
||||
, shieldOn
|
||||
)
|
||||
| W_BAT_MAX_Y batMaxY =>
|
||||
mkEnemy
|
||||
@@ -239,6 +252,7 @@ struct
|
||||
, batMaxY
|
||||
, batMinY
|
||||
, facing
|
||||
, shieldOn
|
||||
)
|
||||
| W_BAT_MIN_Y batMinY =>
|
||||
mkEnemy
|
||||
@@ -256,6 +270,7 @@ struct
|
||||
, batMaxY
|
||||
, batMinY
|
||||
, facing
|
||||
, shieldOn
|
||||
)
|
||||
| W_BAT_DIR_Y batDirY =>
|
||||
mkEnemy
|
||||
@@ -273,6 +288,7 @@ struct
|
||||
, batMaxY
|
||||
, batMinY
|
||||
, facing
|
||||
, shieldOn
|
||||
)
|
||||
| W_FACING facing =>
|
||||
mkEnemy
|
||||
@@ -290,6 +306,25 @@ struct
|
||||
, 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
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
signature ENEMY_TYPE =
|
||||
sig
|
||||
datatype variant = PATROL_SLIME | FOLLOW_SLIME | STRAIGHT_BAT
|
||||
datatype variant = PATROL_SLIME | FOLLOW_SLIME | STRAIGHT_BAT | SHIELD_SLIME
|
||||
|
||||
datatype bat_dir_y = UP | DOWN
|
||||
|
||||
@@ -19,6 +19,7 @@ sig
|
||||
, batMaxY: int
|
||||
, batMinY: int
|
||||
, facing: EntityType.facing
|
||||
, shieldOn: bool
|
||||
}
|
||||
|
||||
type falling_enemy = {x: int, y: int, variant: variant}
|
||||
@@ -29,7 +30,7 @@ end
|
||||
|
||||
structure EnemyType: ENEMY_TYPE =
|
||||
struct
|
||||
datatype variant = PATROL_SLIME | FOLLOW_SLIME | STRAIGHT_BAT
|
||||
datatype variant = PATROL_SLIME | FOLLOW_SLIME | STRAIGHT_BAT | SHIELD_SLIME
|
||||
|
||||
datatype bat_dir_y = UP | DOWN
|
||||
|
||||
@@ -48,6 +49,7 @@ struct
|
||||
, batMaxY: int
|
||||
, batMinY: int
|
||||
, facing: EntityType.facing
|
||||
, shieldOn: bool
|
||||
}
|
||||
|
||||
type falling_enemy = {x: int, y: int, variant: variant}
|
||||
|
||||
@@ -86,6 +86,7 @@ struct
|
||||
PATROL_SLIME => (0.5, 0.5, 1.0)
|
||||
| FOLLOW_SLIME => (1.0, 0.5, 0.5)
|
||||
| STRAIGHT_BAT => (0.55, 0.55, 0.55)
|
||||
| SHIELD_SLIME => (0.33, 0.33, 0.11)
|
||||
in
|
||||
if wratio < hratio then
|
||||
let
|
||||
|
||||
@@ -110,6 +110,7 @@ struct
|
||||
, batMaxY = 485
|
||||
, batMinY = 625
|
||||
, facing = EntityType.FACING_RIGHT
|
||||
, shieldOn = false
|
||||
}
|
||||
val enemy2 =
|
||||
{ id = 2
|
||||
@@ -118,7 +119,7 @@ struct
|
||||
, health = 1
|
||||
, xAxis = EntityType.MOVE_RIGHT
|
||||
, yAxis = EntityType.FALLING
|
||||
, variant = EnemyType.PATROL_SLIME
|
||||
, variant = EnemyType.SHIELD_SLIME
|
||||
, batDirY = EnemyType.UP
|
||||
, platID = ~1
|
||||
, nextPlatID = ~1
|
||||
@@ -126,6 +127,7 @@ struct
|
||||
, batMaxY = 485
|
||||
, batMinY = 625
|
||||
, facing = EntityType.FACING_RIGHT
|
||||
, shieldOn = false
|
||||
}
|
||||
val enemies = enemyMapFromList ([enemy1, enemy2], EnemyMap.empty)
|
||||
val graph = Graph.fromPlatforms (platforms, platformTree)
|
||||
|
||||
@@ -17,11 +17,17 @@ struct
|
||||
(defeatedList, enemyMap)
|
||||
end
|
||||
|
||||
fun shieldSlimeAttacked (enemyID, enemy, enemyMap, defeatedList) =
|
||||
if #shieldOn enemy then (defeatedList, enemyMap)
|
||||
else defeatEnemy (enemyID, enemyMap, defeatedList)
|
||||
|
||||
fun onPlayerAttack (enemyID, enemy, enemyMap, defeatedList) =
|
||||
case #variant enemy of
|
||||
PATROL_SLIME => defeatEnemy (enemyID, enemyMap, defeatedList)
|
||||
| FOLLOW_SLIME => defeatEnemy (enemyID, enemyMap, defeatedList)
|
||||
| STRAIGHT_BAT => defeatEnemy (enemyID, enemyMap, defeatedList)
|
||||
| SHIELD_SLIME =>
|
||||
shieldSlimeAttacked (enemyID, enemy, enemyMap, defeatedList)
|
||||
|
||||
fun fold (enemyID, (), (defeatedList, enemyMap)) =
|
||||
case EnemyMap.get (enemyID, enemyMap) of
|
||||
@@ -105,11 +111,17 @@ struct
|
||||
(fallingMap, enemyMap)
|
||||
end
|
||||
|
||||
fun onShieldSlimeAttacked (enemyID, enemy, enemyMap, fallingMap) =
|
||||
if #shieldOn enemy then (fallingMap, enemyMap)
|
||||
else onDefeated (enemyID, enemy, enemyMap, fallingMap)
|
||||
|
||||
fun onProjectileAttack (enemyID, enemy, enemyMap, fallingMap) =
|
||||
case #variant enemy of
|
||||
PATROL_SLIME => onDefeated (enemyID, enemy, enemyMap, fallingMap)
|
||||
| FOLLOW_SLIME => onDefeated (enemyID, enemy, enemyMap, fallingMap)
|
||||
| STRAIGHT_BAT => onDefeated (enemyID, enemy, enemyMap, fallingMap)
|
||||
| SHIELD_SLIME =>
|
||||
onShieldSlimeAttacked (enemyID, enemy, enemyMap, fallingMap)
|
||||
|
||||
fun fold (enemyID, (), (fallingMap, enemyMap)) =
|
||||
case EnemyMap.get (enemyID, enemyMap) of
|
||||
|
||||
Reference in New Issue
Block a user