extends Area2D @export var speed := 2.0 @export var projectile_speed := 3.0 @export var visibility := 320.0 @export var arrow: PackedScene @export var fireball: PackedScene @onready var primogemmes = get_node("../CanvasUI/UI/Primogemmes") @onready var sfxs = [ $SfxOO, $SfxEE, $SfxOO2 ] var sfx = 0 var character: String = "venti" var aiming: Area2D = null func type() -> String: return "player" # Called when the node enters the scene tree for the first time. func _ready() -> void: SignalHub.select_character.connect(select_character) select_character("venti") func get_input() -> Vector2: var vec := Vector2.ZERO if Input.is_action_pressed("ui_left"): vec.x -= 1 if Input.is_action_pressed("ui_right"): vec.x += 1 if Input.is_action_pressed("ui_up"): vec.y -= 1 if Input.is_action_pressed("ui_down"): vec.y += 1 return vec # Called every frame. 'delta' is the elapsed time since the previous frame. func _physics_process(_delta2: float) -> void: 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: match area.type(): "coin": area.queue_free() sfxs[sfx].play() sfx = (sfx + 1) % len(sfxs) primogemmes.count += 1 $Sprite2D.rotation_degrees += 90 func select_character(s: String) -> void: character = s match s: "venti": $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 projectile := arrow if character == "venti" else fireball var e: Area2D = projectile.instantiate() e.position = position var norm := (aiming.position - position).normalized() e.rotation = norm.angle() e.velocity = norm * projectile_speed get_node("..").add_child(e)