extends CharacterBody2D @onready var collision_shape_2d: CollisionShape2D = $CollisionShape2D @onready var animated_sprite: AnimatedSprite2D = $AnimatedSprite2D @onready var player: CharacterBody2D = $"." var hovered = null var selected = null var hover_indicator = preload("res://assets/sprites/ui/ui_icons_green_down4.png") var selected_indicator = preload("res://assets/sprites/ui/ui_icons_blue_down4.png") var map_renderer = null func set_map_renderer(renderer): map_renderer = renderer func _ready(): var hover_sprite = Sprite2D.new() hover_sprite.texture = hover_indicator hover_sprite.position.y = -15 hover_sprite.visible = false hover_sprite.name = "HoverIndicator" hover_sprite.z_index = 100 player.add_child(hover_sprite) func toggle_selection(): selected = !selected if selected: get_node("HoverIndicator").texture = selected_indicator # Tell the map renderer to darken everything if map_renderer: map_renderer.darken_all_except_player(self) else: get_node("HoverIndicator").texture = hover_indicator # Reset darkening if map_renderer: map_renderer.reset_darkening() # Keep indicator visible when selected get_node("HoverIndicator").visible = selected or hovered == player var player_data = { "stats": { "health": 100, "mana": 100, "speed": 3, "attack": 10, "defense": 5, "actionpoints": 5, }, "inventory": [], "name": "Hero" } func _input(event): if event is InputEventMouseMotion: check_hover() func _unhandled_input(event): if event is InputEventMouseButton and event.button_index == MOUSE_BUTTON_LEFT and event.pressed: # If we're being hovered and clicked if hovered == player: toggle_selection() func check_hover(): var mouse_pos = get_global_mouse_position() var was_hovered = hovered != null # print("Mouse pos: ", mouse_pos, " Player pos: ", player.position) if hovered: hovered.get_node("HoverIndicator").visible = false hovered = null if player.has_node("CollisionShape2D"): var collision = player.get_node("CollisionShape2D") var shape = collision.shape var local_pos = player.to_local(mouse_pos) if shape is RectangleShape2D: var extents = shape.extents if local_pos.x >= -extents.x and local_pos.x <= extents.x and \ local_pos.y >= -extents.y and local_pos.y <= extents.y: hovered = player player.get_node("HoverIndicator").visible = true if (was_hovered != (hovered != null)) and map_renderer: map_renderer.set_unit_hover_state(hovered != null) func set_unit_position(x, y, z): var z_layer = z var x_position = x + 16 var y_position = y # Update the main node position global_position = Vector2(x_position, y_position) # Update the visual z-index directly animated_sprite.z_index = z_layer # Keep sprite centered at node position animated_sprite.position = Vector2.ZERO print("Player Z-Layer: ", z_layer) print("Player position updated to: ", global_position) func get_sprite_size(): return collision_shape_2d.shape func _process(_delta: float): check_hover() play_player_animation("idle") func play_player_animation(state="idle"): if state == "idle": animated_sprite.play("down")