You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
59 lines
1.7 KiB
59 lines
1.7 KiB
|
|
|
|
function is_buildable(hex, tile, tower)
|
|
local blocked = mob_on_hex(hex)
|
|
return not blocked and is_passable(tile)
|
|
end
|
|
|
|
function make_and_register_tower(hex)
|
|
local tower = make_and_register_entity(
|
|
-- type
|
|
ENTITY_TYPE.TOWER,
|
|
|
|
-- spawning hex
|
|
hex,
|
|
|
|
-- node
|
|
pack_texture_into_sprite(TEX_TOWER2, 45, 34),
|
|
|
|
-- update function
|
|
function(_tower, _tower_index)
|
|
if not _tower.target_index then
|
|
for index,entity in pairs(ENTITIES) do
|
|
if entity and entity.type == ENTITY_TYPE.MOB then
|
|
local d = math.distance(entity.hex, _tower.hex)
|
|
if d <= _tower.range then
|
|
_tower.target_index = index
|
|
break
|
|
end
|
|
end
|
|
end
|
|
else
|
|
if ENTITIES[_tower.target_index] == nil then
|
|
_tower.target_index = false
|
|
|
|
elseif (TIME - _tower.last_shot_time) > 1 then
|
|
local entity = ENTITIES[_tower.target_index]
|
|
|
|
make_and_register_projectile(
|
|
_tower.hex,
|
|
math.normalize(hex_to_pixel(entity.hex) - _tower.position),
|
|
5
|
|
)
|
|
|
|
_tower.last_shot_time = TIME
|
|
_tower.node:action(am.play(am.sfxr_synth(SOUNDS.EXPLOSION3)))
|
|
end
|
|
end
|
|
end
|
|
)
|
|
|
|
tower.range = 10
|
|
tower.last_shot_time = tower.TOB
|
|
tower.target_index = false
|
|
|
|
-- make this cell impassable
|
|
HEX_MAP[hex.x][hex.y].elevation = 2
|
|
check_for_broken_mob_pathing(hex)
|
|
end
|
|
|