summaryrefslogtreecommitdiff
path: root/Units/digger.gd
diff options
context:
space:
mode:
Diffstat (limited to 'Units/digger.gd')
-rw-r--r--Units/digger.gd46
1 files changed, 46 insertions, 0 deletions
diff --git a/Units/digger.gd b/Units/digger.gd
new file mode 100644
index 0000000..29a8275
--- /dev/null
+++ b/Units/digger.gd
@@ -0,0 +1,46 @@
+extends Unit
+
+
+var tick_frequency := 0.5
+
+
+func _ready():
+ $TickTimer.wait_time = tick_frequency / Game.speed
+ $TickTimer.start()
+
+ Game.speed_changed.connect(func():
+ $TickTimer.wait_time = tick_frequency / Game.speed
+ $TickTimer.start()
+ # calculate remaining time and set fraction accordingly
+ )
+
+ $AnimatedSprite.play("dig")
+
+
+func _physics_process(delta: float) -> void:
+ if not is_on_floor():
+ velocity += get_gravity() * delta * Game.speed
+
+ $RayGround.force_raycast_update()
+ if not $RayGround.is_colliding():
+ var default = load("res://Units/Default.tscn").instantiate()
+ default.global_position = global_position
+ get_tree().current_scene.add_child(default)
+ queue_free()
+
+ move_and_slide()
+
+
+func _on_tick_timer_timeout() -> void:
+ var size = Vector2($NavigationShape.shape.size.x + 4, 4)
+
+ Game.erase_map(
+ PackedVector2Array([
+ $DigReference.global_position + (size / 2) * Vector2(-1, -1),
+ $DigReference.global_position + (size / 2) * Vector2(1, -1),
+ $DigReference.global_position + (size / 2) * Vector2(1, 1),
+ $DigReference.global_position + (size / 2) * Vector2(-1, 1),
+ ]),
+ get_tree().current_scene.get_node("GroundCollision"),
+ get_tree().current_scene.get_node("Map")
+ )