Tales-of-PKMN/game/player/aim/aim_reticule.gd
2026-10-12 09:57:35 +02:00

53 lines
1.7 KiB
GDScript

extends CanvasLayer
class_name AimReticle
#reticule 2D au centre de l'ecran (visee libre / charge du lancer)
#cree a la volee, une seule instance partagee par AimState et ThrowState
static var _instance : AimReticle
static func get_instance(from : Node) -> AimReticle:
if is_instance_valid(_instance): return _instance
_instance = AimReticle.new()
from.get_tree().current_scene.add_child(_instance)
return _instance
static func show_instance(from : Node) -> void:
get_instance(from).visible = true
static func hide_instance() -> void:
if is_instance_valid(_instance): _instance.visible = false
func _init() -> void:
layer = 10
visible = false
add_child(Drawer.new())
class Drawer extends Control:
@export var radius : float = 14.0
@export var tick_length : float = 8.0
@export var color : Color = Color(1.0, 1.0, 1.0, 0.9)
@export var outline_color : Color = Color(0.0, 0.0, 0.0, 0.5) #contour sombre pour rester lisible sur fond clair
func _init() -> void:
set_anchors_preset(Control.PRESET_FULL_RECT)
mouse_filter = Control.MOUSE_FILTER_IGNORE
func _ready() -> void:
resized.connect(queue_redraw)
func _draw() -> void:
var c : Vector2 = size / 2.0
#contour sombre, puis trait clair par-dessus
draw_arc(c, radius, 0.0, TAU, 40, outline_color, 4.0, true)
draw_circle(c, 3.0, outline_color)
for dir : Vector2 in [Vector2.UP, Vector2.DOWN, Vector2.LEFT, Vector2.RIGHT]:
draw_line(c + dir * (radius + 2.0), c + dir * (radius + 2.0 + tick_length), outline_color, 4.0)
draw_arc(c, radius, 0.0, TAU, 40, color, 2.0, true)
draw_circle(c, 1.5, color)
for dir : Vector2 in [Vector2.UP, Vector2.DOWN, Vector2.LEFT, Vector2.RIGHT]:
draw_line(c + dir * (radius + 2.0), c + dir * (radius + 2.0 + tick_length), color, 2.0)