diff options
Diffstat (limited to 'player.gd')
-rw-r--r-- | player.gd | 38 |
1 files changed, 35 insertions, 3 deletions
@@ -1,9 +1,13 @@ extends Area2D @export var speed := 2.0 +@export var projectile_speed := 3.0 +@export var visibility := 320.0 +@export var arrow: PackedScene @onready var primogemmes = get_node("../CanvasUI/UI/Primogemmes") @onready var sfxs = [ $SfxOO, $SfxEE, $SfxOO2 ] -@onready var sfx = 0 +var sfx = 0 +var aiming: Area2D = null func type() -> String: return "player" @@ -26,14 +30,20 @@ func get_input() -> Vector2: # Called every frame. 'delta' is the elapsed time since the previous frame. func _physics_process(_delta2: float) -> void: - position += get_local_mouse_position().normalized() * speed + var mouse := get_local_mouse_position().normalized() + position += mouse * speed position = position.clamp(Globals.LIMITS_MIN, Globals.LIMITS_MAX) #var color := Color() #color.r = randi() % 2 #color.g = randi() % 2 #color.b = randi() % 2 #material.set_shader_parameter("color", color) - + var enemy = find_enemy() + aiming = null + if enemy != null: + var dist := absf((position - enemy.position).length()) + if dist < visibility: + aiming = enemy func _on_area_entered(area: Area2D) -> void: @@ -52,3 +62,25 @@ func select_character(s: String) -> void: $Sprite2D.frame = 0 "luigi": $Sprite2D.frame = 1 + + +func find_enemy() -> Area2D: + var closest: Area2D = null + var closest_dist: float = 10000000000000.0 + for e in get_node("..").get_children(): + if e.has_method("type") and e.type() == "dicaprio": + var dist := absf((position - e.position).length()) + if dist < closest_dist: + closest_dist = dist + closest = e + return closest + + +func _on_timer_timeout() -> void: + if aiming == null: return + var e: Area2D = arrow.instantiate() + e.position = position + var norm := (aiming.position - position).normalized() + e.rotation = norm.angle() + e.velocity = norm * projectile_speed + get_node("..").add_child(e) |