80 lines
2.3 KiB
GDScript
80 lines
2.3 KiB
GDScript
extends CharacterBody2D
|
|
|
|
@onready var collision_shape_2d: CollisionShape2D = $CollisionShape2D
|
|
@onready var animated_sprite: AnimatedSprite2D = $AnimatedSprite2D
|
|
@onready var player: CharacterBody2D = $"."
|
|
|
|
var hovered_unit = null
|
|
|
|
var hover_indicator = preload("res://assets/sprites/ui/ui_icons_green_down4.png")
|
|
|
|
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)
|
|
|
|
var player_data = {
|
|
"stats": {
|
|
"health": 100,
|
|
"speed": 3,
|
|
"attack": 10,
|
|
"defense": 5
|
|
},
|
|
"inventory": [],
|
|
"name": "Hero"
|
|
}
|
|
func _input(event):
|
|
if event is InputEventMouseMotion:
|
|
check_hover()
|
|
|
|
func check_hover():
|
|
var mouse_pos = get_global_mouse_position()
|
|
print("Mouse pos: ", mouse_pos, " Player pos: ", player.position)
|
|
|
|
if hovered_unit:
|
|
hovered_unit.get_node("HoverIndicator").visible = false
|
|
hovered_unit = 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_unit = player
|
|
player.get_node("HoverIndicator").visible = true
|
|
|
|
|
|
func set_unit_position(x, y, z):
|
|
var z_layer = z
|
|
#var x_position = x
|
|
var x_position = x + 16
|
|
var y_position = y
|
|
#var y_position = y + get_sprite_size().size.y/2
|
|
# Update the visual z-index directly
|
|
animated_sprite.z_index = z_layer
|
|
animated_sprite.position = Vector2i(x_position, y_position)
|
|
print("Palyer Global Pos: ", animated_sprite.position)
|
|
print("Palyer Z-Layer: ", z_layer)
|
|
|
|
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")
|