diff options
Diffstat (limited to 'Units/miner.gd')
-rw-r--r-- | Units/miner.gd | 46 |
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() |