its done?

This commit is contained in:
Tabby 2025-07-04 17:53:08 +10:00
parent d5455ef493
commit 0191cadf6a
8 changed files with 138 additions and 43 deletions

View file

@ -1,21 +1,25 @@
[gd_scene load_steps=6 format=3 uid="uid://biu528mgexdyp"] [gd_scene load_steps=7 format=3 uid="uid://biu528mgexdyp"]
[ext_resource type="Script" uid="uid://bdc53dgnhonif" path="res://worldManager.gd" id="1_gy87s"] [ext_resource type="Script" uid="uid://bdc53dgnhonif" path="res://worldManager.gd" id="1_gy87s"]
[ext_resource type="Texture2D" uid="uid://c4auuun5q0gjy" path="res://Sprites/captains_flat.png" id="2_u230a"] [ext_resource type="Texture2D" uid="uid://c4auuun5q0gjy" path="res://Sprites/captains_flat.png" id="2_u230a"]
[ext_resource type="PackedScene" uid="uid://vv75ycmtipn7" path="res://Prefabs/cyclone.tscn" id="3_u230a"]
[ext_resource type="Script" uid="uid://b1w10iwwhm5bj" path="res://addons/Fantail-Interactive.top_down_camera/td_camera_2d.gd" id="4_u230a"] [ext_resource type="Script" uid="uid://b1w10iwwhm5bj" path="res://addons/Fantail-Interactive.top_down_camera/td_camera_2d.gd" id="4_u230a"]
[ext_resource type="Script" uid="uid://c31ds6gafd223" path="res://cyclone_spawner.gd" id="5_3wvl1"]
[ext_resource type="Texture2D" uid="uid://bqk4uax36mf72" path="res://Sprites/spawner.png" id="6_3wvl1"]
[sub_resource type="RectangleShape2D" id="RectangleShape2D_u230a"] [sub_resource type="RectangleShape2D" id="RectangleShape2D_u230a"]
size = Vector2(1292, 34) size = Vector2(1292, 34)
[node name="2dWorld" type="Node2D" node_paths=PackedStringArray("camera", "map", "cyclone_holder", "speed_slider", "speed_label", "file_picker")] [node name="2dWorld" type="Node2D" node_paths=PackedStringArray("camera", "map", "cyclone_holder", "speed_slider", "speed_label", "file_picker", "spawner_prop", "walls_node", "walls_button")]
script = ExtResource("1_gy87s") script = ExtResource("1_gy87s")
camera = NodePath("TDCamera2D") camera = NodePath("TDCamera2D")
map = NodePath("WorldMap") map = NodePath("WorldMap")
cyclone_holder = NodePath("Cyclones") cyclone_holder = NodePath("Cyclones")
speed_slider = NodePath("UI/Control/VBoxContainer/TheControls/HSlider") speed_slider = NodePath("UI/Control/VBoxContainer/TabContainer/Show Controls/HSlider")
speed_label = NodePath("UI/Control/VBoxContainer/TheControls/Speed label") speed_label = NodePath("UI/Control/VBoxContainer/TabContainer/Show Controls/Speed label")
file_picker = NodePath("FileDialog") file_picker = NodePath("FileDialog")
spawner_prop = NodePath("CycloneSpawner")
walls_node = NodePath("Walls")
walls_button = NodePath("UI/Control/VBoxContainer/TabContainer/Show Controls/Walls")
[node name="WorldMap" type="Sprite2D" parent="."] [node name="WorldMap" type="Sprite2D" parent="."]
texture_filter = 1 texture_filter = 1
@ -25,15 +29,6 @@ texture = ExtResource("2_u230a")
[node name="Cyclones" type="Node2D" parent="."] [node name="Cyclones" type="Node2D" parent="."]
[node name="Cyclone" parent="Cyclones" instance=ExtResource("3_u230a")]
position = Vector2(514, 230)
[node name="Cyclone2" parent="Cyclones" instance=ExtResource("3_u230a")]
position = Vector2(746, 473)
[node name="Cyclone3" parent="Cyclones" instance=ExtResource("3_u230a")]
position = Vector2(463, 494)
[node name="UI" type="CanvasLayer" parent="."] [node name="UI" type="CanvasLayer" parent="."]
[node name="Control" type="Control" parent="UI"] [node name="Control" type="Control" parent="UI"]
@ -53,61 +48,53 @@ anchor_bottom = 1.0
offset_right = 128.0 offset_right = 128.0
grow_vertical = 2 grow_vertical = 2
[node name="Button" type="Button" parent="UI/Control/VBoxContainer"] [node name="TabContainer" type="TabContainer" parent="UI/Control/VBoxContainer"]
layout_mode = 2 layout_mode = 2
text = "Toggle Controls" current_tab = 0
[node name="TheControls" type="VBoxContainer" parent="UI/Control/VBoxContainer"] [node name="Show Controls" type="VBoxContainer" parent="UI/Control/VBoxContainer/TabContainer"]
layout_mode = 2 layout_mode = 2
metadata/_tab_index = 0
[node name="Speed label" type="Label" parent="UI/Control/VBoxContainer/TheControls"] [node name="Speed label" type="Label" parent="UI/Control/VBoxContainer/TabContainer/Show Controls"]
layout_mode = 2 layout_mode = 2
text = "Speed: 1.0x" text = "Speed: 1.0x"
[node name="HSlider" type="HSlider" parent="UI/Control/VBoxContainer/TheControls"] [node name="HSlider" type="HSlider" parent="UI/Control/VBoxContainer/TabContainer/Show Controls"]
layout_mode = 2 layout_mode = 2
max_value = 6.0 max_value = 6.0
value = 3.0 value = 3.0
tick_count = 7 tick_count = 7
ticks_on_borders = true ticks_on_borders = true
[node name="TabContainer" type="TabContainer" parent="UI/Control/VBoxContainer"] [node name="LoadImage" type="Button" parent="UI/Control/VBoxContainer/TabContainer/Show Controls"]
layout_mode = 2
current_tab = 0
[node name="Tools" type="VBoxContainer" parent="UI/Control/VBoxContainer/TabContainer"]
layout_mode = 2
metadata/_tab_index = 0
[node name="meow" type="Label" parent="UI/Control/VBoxContainer/TabContainer/Tools"]
layout_mode = 2
text = "meow"
[node name="LoadImage" type="Button" parent="UI/Control/VBoxContainer/TabContainer/Tools"]
layout_mode = 2 layout_mode = 2
text = "Change Image" text = "Change Image"
[node name="Spawn" type="Button" parent="UI/Control/VBoxContainer/TabContainer/Tools"] [node name="Spawn" type="Button" parent="UI/Control/VBoxContainer/TabContainer/Show Controls"]
layout_mode = 2 layout_mode = 2
text = "Spawn Cyclone" text = "Spawn Cyclone"
[node name="Spawn2" type="Button" parent="UI/Control/VBoxContainer/TabContainer/Tools"] [node name="meow" type="Label" parent="UI/Control/VBoxContainer/TabContainer/Show Controls"]
layout_mode = 2
text = "(Press ESC to cancel spawn)"
[node name="Walls" type="Button" parent="UI/Control/VBoxContainer/TabContainer/Show Controls"]
layout_mode = 2 layout_mode = 2
text = "Toggle Walls" text = "Toggle Walls"
[node name="Exit" type="Button" parent="UI/Control/VBoxContainer/TabContainer/Tools"] [node name="HSeparator" type="HSeparator" parent="UI/Control/VBoxContainer/TabContainer/Show Controls"]
layout_mode = 2
[node name="Exit" type="Button" parent="UI/Control/VBoxContainer/TabContainer/Show Controls"]
layout_mode = 2 layout_mode = 2
text = "Close Program" text = "Close Program"
[node name="Settings" type="VBoxContainer" parent="UI/Control/VBoxContainer/TabContainer"] [node name="Hide" type="VBoxContainer" parent="UI/Control/VBoxContainer/TabContainer"]
visible = false visible = false
layout_mode = 2 layout_mode = 2
metadata/_tab_index = 1 metadata/_tab_index = 1
[node name="meow" type="Label" parent="UI/Control/VBoxContainer/TabContainer/Settings"]
layout_mode = 2
text = "meow"
[node name="TDCamera2D" type="Camera2D" parent="."] [node name="TDCamera2D" type="Camera2D" parent="."]
position = Vector2(579, 330) position = Vector2(579, 330)
script = ExtResource("4_u230a") script = ExtResource("4_u230a")
@ -154,5 +141,17 @@ access = 2
filters = PackedStringArray("*.png") filters = PackedStringArray("*.png")
use_native_dialog = true use_native_dialog = true
[connection signal="pressed" from="UI/Control/VBoxContainer/TabContainer/Tools/LoadImage" to="." method="_on_load_image_pressed"] [node name="CycloneSpawner" type="Node2D" parent="."]
visible = false
script = ExtResource("5_3wvl1")
[node name="Sprite2D" type="Sprite2D" parent="CycloneSpawner"]
scale = Vector2(0.5, 0.5)
texture = ExtResource("6_3wvl1")
[connection signal="pressed" from="UI/Control/VBoxContainer/TabContainer/Show Controls/LoadImage" to="." method="_on_load_image_pressed"]
[connection signal="pressed" from="UI/Control/VBoxContainer/TabContainer/Show Controls/Spawn" to="." method="_on_spawn_pressed"]
[connection signal="pressed" from="UI/Control/VBoxContainer/TabContainer/Show Controls/Walls" to="." method="_on_walls_pressed"]
[connection signal="pressed" from="UI/Control/VBoxContainer/TabContainer/Show Controls/Exit" to="." method="_on_exit_pressed"]
[connection signal="file_selected" from="FileDialog" to="." method="_on_file_dialog_file_selected"] [connection signal="file_selected" from="FileDialog" to="." method="_on_file_dialog_file_selected"]
[connection signal="spawn" from="CycloneSpawner" to="." method="_on_cyclone_spawner_spawn"]

BIN
Sprites/spawner.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

View file

@ -0,0 +1,34 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://bqk4uax36mf72"
path="res://.godot/imported/spawner.png-357a463fc12577bda0a71725d3464fdf.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://Sprites/spawner.png"
dest_files=["res://.godot/imported/spawner.png-357a463fc12577bda0a71725d3464fdf.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1

20
cyclone_spawner.gd Normal file
View file

@ -0,0 +1,20 @@
extends Node2D
var loaded : bool = false
signal spawn(spawn_position : Vector2)
# Called when the node enters the scene tree for the first time.
func _ready() -> void:
pass # Replace with function body.
# Called every frame. 'delta' is the elapsed time since the previous frame.
func _process(delta: float) -> void:
visible = loaded
if loaded:
global_position = get_global_mouse_position()
if(Input.is_action_just_pressed("spawn")):
loaded = false
spawn.emit(get_global_mouse_position())
if(Input.is_action_just_pressed("cancel_spawn")):
loaded = false

1
cyclone_spawner.gd.uid Normal file
View file

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

View file

@ -76,8 +76,19 @@ zoom_out={
"events": [Object(InputEventMouseButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"button_mask":16,"position":Vector2(129, 16),"global_position":Vector2(138, 64),"factor":1.0,"button_index":5,"canceled":false,"pressed":true,"double_click":false,"script":null) "events": [Object(InputEventMouseButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"button_mask":16,"position":Vector2(129, 16),"global_position":Vector2(138, 64),"factor":1.0,"button_index":5,"canceled":false,"pressed":true,"double_click":false,"script":null)
] ]
} }
spawn={
"deadzone": 0.2,
"events": [Object(InputEventMouseButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"button_mask":1,"position":Vector2(85, 25),"global_position":Vector2(94, 73),"factor":1.0,"button_index":1,"canceled":false,"pressed":true,"double_click":false,"script":null)
]
}
cancel_spawn={
"deadzone": 0.2,
"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":4194305,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null)
]
}
[rendering] [rendering]
renderer/rendering_method="gl_compatibility" renderer/rendering_method="gl_compatibility"
renderer/rendering_method.mobile="gl_compatibility" renderer/rendering_method.mobile="gl_compatibility"
environment/defaults/default_clear_color=Color(0.764706, 0.85098, 0.921569, 1)

View file

@ -2,7 +2,8 @@
- [x] Make cyclones loop around edges - nah dont, they should just leave i think - [x] Make cyclones loop around edges - nah dont, they should just leave i think
- [x] simulation speed control - [x] simulation speed control
- [ ] create cyclones by picking a point on the map - [ ] create cyclones by picking a point on the map
- [ ] load custom images - [x] load custom images
- [ ] recalculate bounds based on custom images - [ ] recalculate bounds based on custom images
- [ ] landfall effect? - [ ] landfall effect? nuh uh
- [x] scale culones depending on camera zoom - [x] scale culones depending on camera zoom
- [ ] ui stuff

View file

@ -7,6 +7,11 @@ extends Node2D
@export var speed_slider : HSlider @export var speed_slider : HSlider
@export var speed_label : Label @export var speed_label : Label
@export var file_picker : FileDialog @export var file_picker : FileDialog
@export var spawner_prop : Node2D
@export var walls_node : Node2D
var walls_active = true
@export var walls_button : Button
# Called when the node enters the scene tree for the first time. # Called when the node enters the scene tree for the first time.
func _ready() -> void: func _ready() -> void:
@ -64,6 +69,12 @@ func update_ui():
speed_label.text = "Speed: " + str(round(actual_speed*100)/100) + "x" speed_label.text = "Speed: " + str(round(actual_speed*100)/100) + "x"
Engine.time_scale = actual_speed Engine.time_scale = actual_speed
if(walls_active):
walls_button.text = "Toggle Walls: On"
walls_node.position.x = 0
else:
walls_button.text = "Toggle Walls: Off"
walls_node.position.x = 1000000
func _on_load_image_pressed() -> void: func _on_load_image_pressed() -> void:
@ -74,3 +85,21 @@ func _on_file_dialog_file_selected(path: String) -> void:
var new_image : Image = Image.load_from_file(path) var new_image : Image = Image.load_from_file(path)
var image_texture : ImageTexture = ImageTexture.create_from_image(new_image) var image_texture : ImageTexture = ImageTexture.create_from_image(new_image)
map.texture = image_texture map.texture = image_texture
func _on_spawn_pressed() -> void:
spawner_prop.loaded = !spawner_prop.loaded
func _on_cyclone_spawner_spawn(spawn_position: Vector2) -> void:
var new_cyclone : Node2D = load("res://Prefabs/cyclone.tscn").instantiate()
new_cyclone.global_position = spawn_position
cyclone_holder.add_child(new_cyclone)
func _on_walls_pressed() -> void:
walls_active = !walls_active
func _on_exit_pressed() -> void:
get_tree().quit()