summaryrefslogtreecommitdiff
path: root/Units/miner.gd
diff options
context:
space:
mode:
Diffstat (limited to 'Units/miner.gd')
-rw-r--r--Units/miner.gd46
1 files changed, 46 insertions, 0 deletions
diff --git a/Units/miner.gd b/Units/miner.gd
new file mode 100644
index 0000000..ac8d0b4
--- /dev/null
+++ b/Units/miner.gd
@@ -0,0 +1,46 @@
+extends Unit
+
+
+var direction := Vector2.RIGHT
+
+
+func _ready():
+ $AnimationPlayer.play("mine")
+ scale = Vector2(direction.x, 1)
+
+ $RayGround.force_raycast_update()
+ $RayForward.force_raycast_update()
+
+
+func _physics_process(delta: float) -> void:
+ if not is_on_floor():
+ velocity += get_gravity() * delta * Game.speed
+
+ velocity.x = direction.x * 100 * delta * Game.speed
+
+ if not $RayGround.is_colliding() and not $RayForward.is_colliding():
+ var default = load("res://Units/Default.tscn").instantiate()
+ default.global_position = global_position
+ default.direction = direction
+ get_tree().current_scene.add_child(default)
+ queue_free()
+
+ move_and_slide()
+
+
+func mine() -> void:
+ var points = []
+ for point: Vector2 in $PickaxePolygon.polygon:
+ points.append(
+ global_position +
+ ($PickaxePolygon.position * Vector2(direction.x, 1)) +
+ (point.rotated($PickaxePolygon.rotation) * Vector2(direction.x, 1))
+ )
+
+ (func():
+ Game.erase_map(
+ PackedVector2Array(points),
+ get_tree().current_scene.get_node("GroundCollision"),
+ get_tree().current_scene.get_node("Map")
+ )
+ ).call_deferred()