feat: basic dragon instantiating

This commit is contained in:
Gerard Gascón 2025-04-03 17:40:27 +02:00
parent a0bb24464d
commit 9e153b63ac
6 changed files with 76 additions and 1 deletions

View file

@ -1,10 +1,12 @@
[gd_scene load_steps=3 format=3 uid="uid://ctytpqaed0yqx"]
[gd_scene load_steps=4 format=3 uid="uid://ctytpqaed0yqx"]
[ext_resource type="Script" uid="uid://3kyt3shje5r1" path="res://scripts/window.gd" id="1_3vi8l"]
[ext_resource type="Texture2D" uid="uid://fdqnc2qrrvn1" path="res://icon.svg" id="1_rpg24"]
[ext_resource type="PackedScene" uid="uid://c7nfcgjxqeg7l" path="res://dragon.tscn" id="2_8rhti"]
[node name="Base" type="Node2D"]
script = ExtResource("1_3vi8l")
dragon_template = ExtResource("2_8rhti")
[node name="Icon" type="Sprite2D" parent="."]
position = Vector2(576, 324)

24
dragon.tscn Normal file
View file

@ -0,0 +1,24 @@
[gd_scene load_steps=3 format=3 uid="uid://c7nfcgjxqeg7l"]
[ext_resource type="Texture2D" uid="uid://fdqnc2qrrvn1" path="res://icon.svg" id="1_ixu8j"]
[ext_resource type="Script" uid="uid://bmlkcni4km614" path="res://scripts/dragon.gd" id="1_n6spy"]
[node name="Dragon" type="Window"]
disable_3d = true
transparent_bg = true
position = Vector2i(0, 36)
size = Vector2i(128, 128)
unresizable = true
borderless = true
transparent = true
[node name="DragDropDetector" type="Control" parent="."]
layout_mode = 3
anchors_preset = 0
offset_right = 40.0
offset_bottom = 40.0
script = ExtResource("1_n6spy")
[node name="Icon" type="Sprite2D" parent="."]
position = Vector2(64, 65)
texture = ExtResource("1_ixu8j")

View file

@ -20,6 +20,7 @@ config/icon="res://icon.svg"
window/size/borderless=true
window/size/transparent=true
window/subwindows/embed_subwindows=false
window/per_pixel_transparency/allowed=true
[dotnet]

29
scripts/dragon.gd Normal file
View file

@ -0,0 +1,29 @@
extends Control
var dragging = false
var dragging_start_position = Vector2i()
@onready var window: Window = $".."
func _ready():
set_process_input(true)
func _input(event):
if event is not InputEventMouseButton:
return
if event.button_index != MOUSE_BUTTON_LEFT:
return
if event.pressed:
dragging = true
dragging_start_position = Vector2i(get_global_mouse_position())
else:
dragging = false
func _process(_delta):
if dragging:
window.position = window.position + Vector2i(get_global_mouse_position()) - dragging_start_position

1
scripts/dragon.gd.uid Normal file
View file

@ -0,0 +1 @@
uid://bmlkcni4km614

View file

@ -1,5 +1,9 @@
extends Node
@export var dragon_template: PackedScene
func _ready():
await get_tree().process_frame
move_window_to_bottom_right()
@ -16,3 +20,17 @@ func move_window_to_bottom_right():
var new_position: Vector2i = work_area_position + Vector2i(work_area_size.x - window_size.x, work_area_size.y - window_size.y)
DisplayServer.window_set_position(new_position)
func _unhandled_input(event: InputEvent) -> void:
if event.is_action_pressed("ui_accept"):
_instantiate_dragon(Vector2i(0, 0))
func _instantiate_dragon(relative_position: Vector2i) -> void:
var dragon = dragon_template.instantiate()
add_child(dragon)
if dragon is Window:
var window_position: Vector2i = DisplayServer.window_get_position()
dragon.position = window_position + relative_position
dragon.show()