Files
net-gunner/scripts/gas_emitter.gd

47 lines
1.2 KiB
GDScript

extends Node3D
var gas_square_template = preload("res://templates/gas_square.tscn")
var cycles : int = 3
var square : Vector3i = Vector3i(2,0,0)
var squares : Dictionary[Vector3i, bool] = {}
var last_spread : Array[Vector3i]
var hack_owner : int
var damage : int = 4
func _ready() -> void:
emit_gas.call_deferred(square)
last_spread = [square]
squares[square] = true
func _on_timeout() -> void:
cycles -= 1
if cycles <= 0:
queue_free()
return
spread()
func spread() -> void:
var new_squares : Dictionary[Vector3i, bool] = {}
for sq in last_spread:
for i in range(-1, 2):
for j in range(-1, 2):
for k in range(-1, 2):
#var ts = sq + Vector3i(i, j, k)
new_squares[sq + Vector3i(i, j, k)] = true
last_spread = []
for sq in new_squares.keys():
if squares.has(sq):
continue
var floor_square = sq + Vector3i(0,-1,0)
if(Game.level.floor_layer.get_cell_item(floor_square) == GridMap.INVALID_CELL_ITEM
and Game.level.ramp_layer.get_cell_item(floor_square) == GridMap.INVALID_CELL_ITEM):
continue
last_spread.append(sq)
squares[sq] = true
emit_gas(sq)
func emit_gas(sq) -> void:
var gas = gas_square_template.instantiate()
gas.setup(hack_owner, damage)
Game.level.add_vfx(gas, sq)