diff --git a/base.tscn b/base.tscn index 60a3d75..2e1c83e 100644 --- a/base.tscn +++ b/base.tscn @@ -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) diff --git a/dragon.tscn b/dragon.tscn new file mode 100644 index 0000000..5a8e7ce --- /dev/null +++ b/dragon.tscn @@ -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") diff --git a/project.godot b/project.godot index 6d4d51c..e60b1a6 100644 --- a/project.godot +++ b/project.godot @@ -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] diff --git a/scripts/dragon.gd b/scripts/dragon.gd new file mode 100644 index 0000000..95ee141 --- /dev/null +++ b/scripts/dragon.gd @@ -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 diff --git a/scripts/dragon.gd.uid b/scripts/dragon.gd.uid new file mode 100644 index 0000000..d649bfd --- /dev/null +++ b/scripts/dragon.gd.uid @@ -0,0 +1 @@ +uid://bmlkcni4km614 diff --git a/scripts/window.gd b/scripts/window.gd index 33288f4..4195a80 100644 --- a/scripts/window.gd +++ b/scripts/window.gd @@ -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()