From 8d642f694d01b465eff19c7a6fb465d37f866823 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Melvin=20Wei=C3=9F?= Date: Fri, 3 Oct 2025 16:36:28 +0200 Subject: [PATCH] First Growing Vine --- main.tscn | 22 +++- main.tscn13002292799.tmp | 129 ++++++++++++++++++++++++ vine.gd | 3 - vines_petals/bud.gd | 19 +++- vines_petals/bud.tscn | 4 + vines_petals/vine.gd | 61 +++++++++++ vine.gd.uid => vines_petals/vine.gd.uid | 0 vines_petals/vine.pdn | Bin 6135 -> 6989 bytes vines_petals/vine.tscn | 7 +- vines_petals/vine_active_green.png | Bin 1490 -> 1910 bytes vines_petals/vine_active_purple.png | Bin 1554 -> 1966 bytes vines_petals/vine_node.gd | 12 +-- world/earth.tscn | 1 + 13 files changed, 243 insertions(+), 15 deletions(-) create mode 100644 main.tscn13002292799.tmp delete mode 100644 vine.gd create mode 100644 vines_petals/vine.gd rename vine.gd.uid => vines_petals/vine.gd.uid (100%) diff --git a/main.tscn b/main.tscn index ff2e288..0e31ad6 100644 --- a/main.tscn +++ b/main.tscn @@ -1,4 +1,4 @@ -[gd_scene load_steps=17 format=3 uid="uid://cxo6bq26huau7"] +[gd_scene load_steps=18 format=3 uid="uid://cxo6bq26huau7"] [ext_resource type="PackedScene" uid="uid://cmaovvr15b3qk" path="res://player/player.tscn" id="2_1bvp3"] [ext_resource type="Texture2D" uid="uid://d3fpq76anm4t7" path="res://world/Background Prototype/Background prototype.png" id="3_kek77"] @@ -16,6 +16,7 @@ [ext_resource type="PackedScene" uid="uid://cpe4s6vsn0ujd" path="res://enemies/boss/boss.tscn" id="11_efxa6"] [ext_resource type="Script" uid="uid://gul4u5tw1vxk" path="res://bg_image.gd" id="13_vivmo"] [ext_resource type="PackedScene" uid="uid://dhxnae8wbhp3u" path="res://vines_petals/bud.tscn" id="16_2cqfq"] +[ext_resource type="PackedScene" uid="uid://b7o82cdfwuqd1" path="res://vines_petals/vine.tscn" id="17_yaehf"] [node name="main" type="Node2D"] @@ -85,6 +86,7 @@ visible = false [node name="Water" parent="." instance=ExtResource("10_4c57u")] unique_name_in_owner = true z_index = 15 +position = Vector2(102, 0) [node name="Background" type="CanvasLayer" parent="."] layer = -1 @@ -104,8 +106,22 @@ colors = Array[Color]([Color(0, 0.6441987, 0.6693053, 1), Color(0.90588236, 0.15 script = ExtResource("10_efxa6") boss = ExtResource("11_efxa6") -[node name="Bud" parent="." instance=ExtResource("16_2cqfq")] -position = Vector2(897, -3027) +[node name="Vine" parent="." instance=ExtResource("17_yaehf")] + +[node name="Bud" parent="Vine" node_paths=PackedStringArray("vine") instance=ExtResource("16_2cqfq")] +position = Vector2(1320, -3484) +vine = NodePath("..") +location = Vector2(46, 1) +offset = Vector2(150, 150) + +[node name="Node2D2" type="Node2D" parent="Vine"] +position = Vector2(963, -3171) + +[node name="Node2D4" type="Node2D" parent="Vine"] +position = Vector2(1035, -3518) + +[node name="Node2D5" type="Node2D" parent="Vine"] +position = Vector2(1551, -2955) [connection signal="active_item_changed" from="Player" to="UIOverlay/ItemUI" method="_on_player_active_item_changed"] [connection signal="health_changed" from="Player" to="UIOverlay/Healthbar" method="_on_player_health_changed"] diff --git a/main.tscn13002292799.tmp b/main.tscn13002292799.tmp new file mode 100644 index 0000000..5ccc333 --- /dev/null +++ b/main.tscn13002292799.tmp @@ -0,0 +1,129 @@ +[gd_scene load_steps=18 format=3 uid="uid://cxo6bq26huau7"] + +[ext_resource type="PackedScene" uid="uid://cmaovvr15b3qk" path="res://player/player.tscn" id="2_1bvp3"] +[ext_resource type="Texture2D" uid="uid://d3fpq76anm4t7" path="res://world/Background Prototype/Background prototype.png" id="3_kek77"] +[ext_resource type="PackedScene" uid="uid://jjoyj1ldafkf" path="res://world/earth.tscn" id="3_lquwl"] +[ext_resource type="Script" uid="uid://colvx6wq0e8n7" path="res://world/building_generator.gd" id="4_1bvp3"] +[ext_resource type="PackedScene" uid="uid://snvs7fty1l5a" path="res://ui/initial_text/initial_text.tscn" id="4_dg77c"] +[ext_resource type="Texture2D" uid="uid://c6bd4kakb1tr3" path="res://utils/empty.png" id="4_ycdy4"] +[ext_resource type="PackedScene" uid="uid://73g8y37skebh" path="res://ui/item_ui/item_ui.tscn" id="6_4c57u"] +[ext_resource type="PackedScene" uid="uid://cjsrtswk4vgf2" path="res://ui/healthbar/healthbar.tscn" id="6_7mycd"] +[ext_resource type="PackedScene" uid="uid://dpdn2php3ydsv" path="res://ui/death_screen/death_screen.tscn" id="7_5vw27"] +[ext_resource type="Script" uid="uid://3k6r3jnko4hg" path="res://utils/show_fps.gd" id="8_5vw27"] +[ext_resource type="PackedScene" uid="uid://ca5ndobertnp4" path="res://water/water.tscn" id="10_4c57u"] +[ext_resource type="Script" uid="uid://cpaskpj67pnaj" path="res://enemies/boss/boss_spawner.gd" id="10_efxa6"] +[ext_resource type="PackedScene" uid="uid://cqn67nwyrtq3k" path="res://ui/journal/journal.tscn" id="10_w48qg"] +[ext_resource type="PackedScene" uid="uid://cpe4s6vsn0ujd" path="res://enemies/boss/boss.tscn" id="11_efxa6"] +[ext_resource type="Script" uid="uid://gul4u5tw1vxk" path="res://bg_image.gd" id="13_vivmo"] +[ext_resource type="PackedScene" uid="uid://dhxnae8wbhp3u" path="res://vines_petals/bud.tscn" id="16_2cqfq"] +[ext_resource type="PackedScene" uid="uid://b7o82cdfwuqd1" path="res://vines_petals/vine.tscn" id="17_yaehf"] + +[node name="main" type="Node2D"] + +[node name="Earth" parent="." instance=ExtResource("3_lquwl")] +unique_name_in_owner = true + +[node name="Player" parent="." instance=ExtResource("2_1bvp3")] +unique_name_in_owner = true +position = Vector2(578, -3017) +scale = Vector2(3, 3) + +[node name="Camera2D" type="Camera2D" parent="Player"] +position = Vector2(0, -50) +ignore_rotation = false + +[node name="Debug_Camera" type="Camera2D" parent="."] +scale = Vector2(41.02, 41.02) +zoom = Vector2(0.12, 0.12) + +[node name="Building Generator" type="Node" parent="."] +script = ExtResource("4_1bvp3") +initial_buildings = 10 + +[node name="Timer" type="Timer" parent="Building Generator"] +wait_time = 3.0 +autostart = true + +[node name="UIOverlay" type="CanvasLayer" parent="."] + +[node name="TextureRect" type="TextureRect" parent="UIOverlay"] +offset_right = 40.0 +offset_bottom = 40.0 +texture = ExtResource("4_ycdy4") + +[node name="InitialText" parent="UIOverlay" instance=ExtResource("4_dg77c")] + +[node name="Healthbar" parent="UIOverlay" instance=ExtResource("6_7mycd")] +offset_right = 96.0 +offset_bottom = 96.0 + +[node name="ActiveItemUses" type="VBoxContainer" parent="UIOverlay"] +unique_name_in_owner = true +offset_left = 1863.0 +offset_top = 25.0 +offset_right = 1895.0 +offset_bottom = 120.0 +alignment = 2 + +[node name="ItemUI" parent="UIOverlay" node_paths=PackedStringArray("player") instance=ExtResource("6_4c57u")] +player = NodePath("../../Player") + +[node name="DeathScreen" parent="UIOverlay" instance=ExtResource("7_5vw27")] +visible = false + +[node name="FPS" type="Label" parent="UIOverlay"] +anchors_preset = 1 +anchor_left = 1.0 +anchor_right = 1.0 +offset_left = -40.0 +offset_bottom = 23.0 +grow_horizontal = 0 +script = ExtResource("8_5vw27") + +[node name="Journal" parent="UIOverlay" instance=ExtResource("10_w48qg")] +visible = false + +[node name="Water" parent="." instance=ExtResource("10_4c57u")] +unique_name_in_owner = true +z_index = 15 +position = Vector2(102, 0) + +[node name="Background" type="CanvasLayer" parent="."] +layer = -1 + +[node name="ColorRect" type="TextureRect" parent="Background"] +modulate = Color(0.544974, 0.544974, 0.544974, 1) +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 +texture = ExtResource("3_kek77") +script = ExtResource("13_vivmo") +colors = Array[Color]([Color(0, 0.6441987, 0.6693053, 1), Color(0.90588236, 0.15686275, 0.21176471, 0.60784316), Color(0.69803923, 0.69803923, 0.69803923, 1)]) + +[node name="BossSpawner" type="Node" parent="."] +script = ExtResource("10_efxa6") +boss = ExtResource("11_efxa6") + +[node name="Vine" parent="." instance=ExtResource("17_yaehf")] + +[node name="Bud" parent="Vine" instance=ExtResource("16_2cqfq")] +position = Vector2(271, -3293) + +[node name="Node2D2" type="Node2D" parent="Vine"] +position = Vector2(963, -3171) + +[node name="Node2D4" type="Node2D" parent="Vine"] +position = Vector2(1035, -3518) + +[node name="Node2D5" type="Node2D" parent="Vine"] +position = Vector2(1551, -2955) + +[connection signal="active_item_changed" from="Player" to="UIOverlay/ItemUI" method="_on_player_active_item_changed"] +[connection signal="health_changed" from="Player" to="UIOverlay/Healthbar" method="_on_player_health_changed"] +[connection signal="max_hp_changed" from="Player" to="UIOverlay/Healthbar" method="_on_player_max_hp_changed"] +[connection signal="player_died" from="Player" to="UIOverlay/DeathScreen" method="_on_player_player_died"] +[connection signal="timeout" from="Building Generator/Timer" to="Building Generator" method="_on_timer_timeout"] +[connection signal="visibility_changed" from="UIOverlay/DeathScreen" to="Player" method="_on_death_screen_visibility_changed"] +[connection signal="water_reached_max_height" from="Water" to="BossSpawner" method="_on_water_water_reached_max_height"] diff --git a/vine.gd b/vine.gd deleted file mode 100644 index ecec406..0000000 --- a/vine.gd +++ /dev/null @@ -1,3 +0,0 @@ -extends Node2D - -var vine_nodes : Array[Vector2] diff --git a/vines_petals/bud.gd b/vines_petals/bud.gd index 2938b29..3886b59 100644 --- a/vines_petals/bud.gd +++ b/vines_petals/bud.gd @@ -1,6 +1,23 @@ -class_name Bud extends Node2D +class_name Bud extends VineNode +signal opened func _on_opened(): $AnimatedSprite2D.play("open") + opened.emit() + spread() await $AnimatedSprite2D.animation_finished queue_free() + +func spread(): + for dir in [Vector2.UP, Vector2.DOWN, Vector2.RIGHT, Vector2.LEFT]: + if not vine.vine_locations.has(location + dir): + vine.vine_locations.append(location + dir) + grow_to_next_bud(dir) + +func grow_to_next_bud(dir): + var target_offset = Vector2(randf_range(60, 240), randf_range(60, 240)) + var pos1 = grid.get_world_position(location, offset) + var pos2 = grid.get_world_position(location + dir, target_offset) + var num_seg = floor((pos1-pos2).length() / 96) + var path = "res://vines_petals/vine_active_green.png" + await vine.grow_vine_sequence(location, offset, location + dir, target_offset, num_seg, path, true) diff --git a/vines_petals/bud.tscn b/vines_petals/bud.tscn index 08f8b86..1d81967 100644 --- a/vines_petals/bud.tscn +++ b/vines_petals/bud.tscn @@ -34,14 +34,17 @@ radius = 12.0 [sub_resource type="CircleShape2D" id="CircleShape2D_rupnl"] [node name="Bud" type="Node2D"] +z_index = 1 script = ExtResource("1_543bc") [node name="AnimatedSprite2D" type="AnimatedSprite2D" parent="."] +position = Vector2(0, -46) scale = Vector2(3, 3) sprite_frames = SubResource("SpriteFrames_rnmbv") animation = &"open" [node name="EnemyHurtbox" type="Area2D" parent="."] +position = Vector2(0, -46) scale = Vector2(3, 3) collision_layer = 16 collision_mask = 0 @@ -61,5 +64,6 @@ scale = Vector2(0.5, 1) shape = SubResource("CircleShape2D_rupnl") [node name="EarthAligner" parent="." instance=ExtResource("7_tg157")] +position = Vector2(0, -46) [connection signal="died" from="EnemyHurtbox" to="." method="_on_opened"] diff --git a/vines_petals/vine.gd b/vines_petals/vine.gd new file mode 100644 index 0000000..7328597 --- /dev/null +++ b/vines_petals/vine.gd @@ -0,0 +1,61 @@ +class_name Vine extends Node2D +var petal_location : Vector2 +@export var vine_locations : Array[Vector2] +@export var bud_resource : PackedScene +@onready var grid : Grid = get_tree().get_root().get_node("main/Earth/Grid") + +func draw_vine(pos1 : Vector2, pos2 : Vector2, img_path): + var sprite = Sprite2D.new() + get_tree().get_root().get_node("main").add_child(sprite) + sprite.texture = ResourceLoader.load(img_path) + sprite.position = (pos1 + pos2)/2.0 + sprite.rotation = (pos1 - pos2).angle() + PI/2 + sprite.scale *= (pos1 - pos2).length() * 1 / sprite.texture.get_width() + sprite.scale.x = 3 + +func grow_vine_sequence(location1 : Vector2, offset1 : Vector2, location2: Vector2, offset2 : Vector2, num_segments: int, img_path, grow_bud = false): + var pos1 = grid.get_world_position(location1, offset1) + var pos2 = grid.get_world_position(location2, offset2) + var positions = [] + positions.append(pos1) + + var segment_length = (pos1 - pos2).length() / num_segments + var offsets = generate_random_offsets(num_segments, 0.6 * segment_length) + for i in range(num_segments - 1): + var t = (i + 1) * 1.0/num_segments + var center = t * pos2 + (1 - t) * pos1 + var offset = offsets[i + 1] * (pos2 - pos1).normalized().rotated(PI/2) + positions.append(center + offset) + positions.append(pos2) + for i in range(num_segments): + draw_vine(positions[i], positions[i+1], img_path) + await get_tree().create_timer(0.2).timeout + if grow_bud and location2.y > 0: + spawn_bud(location2, offset2) + +func generate_random_offsets(segment_count, max_second_derivative): + var differences = [] + var last_diff = 0 + for i in range(segment_count): + var new_diff = last_diff + randf_range(-max_second_derivative, max_second_derivative) + differences.append(new_diff) + last_diff = new_diff + var sum = 0.0 + for i in range(segment_count): + sum += differences[i] + var correction = - sum / segment_count + for i in range(segment_count): + differences[i] += correction + var ret = [] + var next_val = 0 + for i in range(segment_count): + ret.append(next_val) + next_val += differences[i] + return ret + +func spawn_bud(location, offset): + var bud = bud_resource.instantiate() + bud.location = location + bud.offset = offset + bud.vine = self + get_tree().get_root().get_node("main").add_child(bud) diff --git a/vine.gd.uid b/vines_petals/vine.gd.uid similarity index 100% rename from vine.gd.uid rename to vines_petals/vine.gd.uid diff --git a/vines_petals/vine.pdn b/vines_petals/vine.pdn index c66be67851560a7999c5d39cdd4c2d30d39eb54b..ce42cc7a433cac2a51c736a6c12429c04dab2753 100644 GIT binary patch delta 3747 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 PP@nsC8=6+BenjZsJ*HR! diff --git a/vines_petals/vine.tscn b/vines_petals/vine.tscn index 83f3984..4afc66e 100644 --- a/vines_petals/vine.tscn +++ b/vines_petals/vine.tscn @@ -1,6 +1,9 @@ -[gd_scene load_steps=2 format=3 uid="uid://b7o82cdfwuqd1"] +[gd_scene load_steps=3 format=3 uid="uid://b7o82cdfwuqd1"] -[ext_resource type="Script" uid="uid://dnxttryo3t3sx" path="res://vine.gd" id="1_3bbo6"] +[ext_resource type="Script" uid="uid://dnxttryo3t3sx" path="res://vines_petals/vine.gd" id="1_3bbo6"] +[ext_resource type="PackedScene" uid="uid://dhxnae8wbhp3u" path="res://vines_petals/bud.tscn" id="2_r0bsc"] [node name="Vine" type="Node2D"] script = ExtResource("1_3bbo6") +vine_locations = Array[Vector2]([Vector2(46, 1)]) +bud_resource = ExtResource("2_r0bsc") diff --git a/vines_petals/vine_active_green.png b/vines_petals/vine_active_green.png index 1c2bee62e7fa49666e1a0297da2369bab8e94a5b..2ae0be507a4325f8d8434ff54d245c091a2ff1d4 100644 GIT binary patch delta 1629 zcmV-j2BP`W3-%6>7YZ;41^@s6aIAQ5u^}1(e+DH_=Q9hMZUF>Ac7(& zks7rYB?2urEfgsIxI4%Hf45iK(B7TJNBt+i?B3b!&Y3f3&YY?I=Vb=2-U>F@QMk+p zfA@k(pcwRkQ(%Airn`!(w^A8^&e`cpU@4#>7UY!!AA=1r;(FBLp*r{8fYVXWcYKv-0K`#k0W$%{jE;9}e^yWEEIBVz<&vzFZg~*T_$^MupTJu_20R6( z0R_k1A#Icn8O;ZgFmCM-tNqG(-v#ImZxs&0hHPn2-v1@Wy$HY5T`(JUU-&%ktE1<6 zl}Nvgm7UTlKVUuFgO+{Zz35qjk~~l<##pgdftbr~9@;A7M}yQW8M!Fy(fKR*f3*hG zM(rL-GN2m5~&Tu zOu?_w=(8JP(Gx{~3s?qT0~Y|>yp)&+bb9gcwp4p04C_>Fxv|ceJ77emimAi2Ot8IX zVX#f>i@%oHnJyST@Rxon9E5o_e`GWAM_6k*a$lM0cDz(!J%0^fk?Qf9T{)c9MRu8&~Eb1+_cf3(RUPq6JQ*o0NEpO1XxGX=3`XDWknZoAZ)Pmf*o@F|{3)E8a6Hi_ccW+>iW0_6e?g`9fJhB^7!>JMnXJw5 z!xg0E03DaYkiY?{#2I=qrfWZ@tzda}I|i`oT??4`xE~np#K>D)g0Thkc35G5{NY85- zDrJ6`2GA7+f4%HK1r6CCSYqblpt9DK*;#tdy^L07ydlDIp2s-Wg*5J6R7PJgheQvD zQL+abve7#@q|O)T4&b1=RmRI^QyTqy=BD6i`;g^E#L^s5As--nZpKO|SQ>jRLyU?e zJp$(NG~zD0P!DQR)YTx_vGS>`vTwM)V%7sK=-jI)e;H8&{~h6VH3;cm^Q37*lBG)- zfP-QFXU&*ONmG#b&|DDRn|2hPUBh~gX9FJ3QYkS82D~s4#GO{5)S8MB^Vq>qi^a*{ zxgfQY44`YN;~>gtNV%izeMaqaqoy9ugQ#Q z{-i(aM_+PAu0*?EFGww41Na_GZC1LIK^ORu|B&P}T=SkvEiVJ|LT8*Z{!JA5|EA;r b6-(rAkm~x=`SkHr00000NkvXXu0mjf4LlpA delta 1206 zcmV;n1WEh$4$=#d7YZN<1^@s6b9#F8u^}1(e*}R^L_t(oN1c~lXdG1($ItBSmo+in zHce`5qHQsiP!vBvi5RFKpsf~5RuDu`@Ih1%ee+qtH$MHX4(d-JPBB_n+A`Nt2zK?H_(KcP}&do;~N>bMH77r*iQUuCK$x;MTL`}N^K7;qdUkS=I?#(0v20+hctz!3czY;FgHh87MF6e_)N-|&$ z&O}Yr;|^P2#G@Dikw+qkc;QO~o1Y>n1#$Xkx7FXt7}#++5(Y@X1V z{Q^VqD*O)WOQm=Nq=D>jT<0wa`Yo^ye|+Xx5y!2=fWEBRhD^n_XZPB5xg$I~jnUD2 zDHWfD3n~}0cBbBEgGSue;wef6i6( zYSm~(_=Mw7nsCVSBoSzP9&Uu?1}oLh1#9i|>T9$f2f1F)KM3+zqS6?!7W$!?w+c2J z+-{ZN5bXuGuYr!J8Lu=UP%Zcqxae<(?)=Mt4B1d+-`-*y$|Y*XeGOOOm~=s#$4veXIn z{R+>*0Z64ZA&4}P?X;ZpHcM{@8SmPp?}TQA^?*M6K}TO7DTF z#t$)hfs$N3?*lDKEw^K}l8scZW!f=%<8ZpPPg5X?`Qcb1(!-;dKxC+G;D@g zrC)}lo;H}{w01zZxm3UIe@uWmuFc^2Wdl{%SA67>*r8htt^`UGvgYV%5cn4;nsai8YI_(8E7mRZvYA1lbI6Y%)@O%$L>3opI1cz!k zXK(Rz?BtSS)~a+acm!(JW#8EL{E&4pjN2H>#{o6+rQkfkexSUGe^u)qFuMZogB<0z z*Tz`({{~JtQbC4rcL|T<3=*ybge~@Xb}z6)MH#R#>fSp4Y_~AjydLVfo^d#{G8O zuW@BS6p$FD4?(%;f8x&TVW(Z{Y_mW77wJ{STdv^(L1B4D#=Q$)hBcmSwjau`sZ zgq{F>q_*3vKW$%COY8`X@5|9Q=jt5S>lmQrrw`O;SP80%O_e4DgYYpt1toA;<8ADD z%Z;zV32%h^FfA3T$C4(O(sb%7 diff --git a/vines_petals/vine_active_purple.png b/vines_petals/vine_active_purple.png index 9cc997256a15f004260c8a34532e939c467c9bf4..580bf04c2a24861322df97b29c8f56cbffd6347e 100644 GIT binary patch delta 1685 zcmV;G25R||46YB57YZ;41^@s6aIAQ5u^}1(e+FGiL_t(oN9~yTZ&Xzj$G@|*owgP_ zrKM%*LMbhZDG0$3lts~iA|&dNkf3pk2?i4k@jp=fL5;!CAd#4eM59o*ppc>sgtFQM zslo_STMAfc!R~u!=K1};c4(pP%pLSM{WhPxJNHfBJ@4Fe&pmhWpO<6sYOFMl(S$uJRb_UU>c`qgMhOr{YfX|aS%|CxLM^?0>I`_~! zH(Gyxnavbp2e8EnX+wQ~3od_Ii;AjR9C?o2iR6s#M^iKpBs$@6y5Y1466;d$e`8>PdvX87F?-3(K zo&tX$kdKA^Y^^5oA-EGVk&pCX5tBeFn!I&NL5ltwvY5P2>WTV{6g3aj`c7TU_ut>s zhd`kV*7zWtj%0>F5;Bq3GoNNmf9);6gF7z!{Ks*RyNyN<{->GDGNI4oMqMyxV&(Ls zSt!a%MiytmL!Udi@ZI``+<$>=EBBS`LTOKnI!zQyDxN@oBKb&hU`l&2(%4MHlzH3OBY@iWMY)6$*DyAMIJBYHJ6HLDCXh5U$9O}H4joIDv_PgNDf8#wZzamaq zh*NjaWI9X|k$n6HnMZClSfSQrr5;W$*~->>BG>EtYl%D-RVD_cl0q_;w-V54JzTzO z>p`}|Zr4sZexMmyCI;Lf8_5as7g0(cE(g4hCztMB{{h?K1azM0yHOQO5Xu8H$ah2= z)POka^SYl2q#{fA^*kB;e?mFl)%T*x!~+BJc|us3(3OtDvs`;aUg(y;Q{BuH>Z>K2 zxC+Ybd;h9@p7dpS{fDL4*j<1nLHa`jS~7;&(z+YV&*AZed+8CyOq%^a1~T@*veH+T z;}^RSm%z=S@1_s9Bx@YU@Egj!*w>VlhAgW>urY#Yd0a4+owlH1IlNR2ju$z%Rs_fLtf%pP@G_5Qn5b zZN+=+PX>y`fFDU)4vL+Nf*abr$oYPtdxTV&DiC#zDq{nkIs)=gJe~2>Oj8vRxgE`HO<{^H{bi(cRBG+P3>S}j4++Kp{xhhu<7^WG6#pGFDn?#NkMlQ7m~N zEE%A~s+VaB#&!L`5_}zm8O3i^Z$X1qwR-4$ycSpJjBR<@W!*P84)H zAsH*$6odyUCU(0G*KUk5xTLc|OoK~NV_@(%qRGS_bR4pBC!oMeMg}8Lzf0NDWawNF zvm!2$e_SjWY{5&k_8F0`xO5u8ozT9~iR&zfLwfsrr){XT-DJXwvQ%ak-5pQv>up57BF9lQwcjKS+iHm7niOMh1k%!4xz49}Q^z flY#%&fPlXN)sX4;zgRd*00000NkvXXu0mjf^p`Yf delta 1270 zcmVC;;kJzg=trD?g$eR6u*dm5ckc`>Q_+&1t*9Mzi1Jpb8~JmJ18BS zmrY#e+}5qDitV)7(o51d7oVp|*K2Z4hEMr%-n{4JJx~Ad`~LrLP*j$0-8NXCk`$T6 ze|_$!*n5d&S8$HJp64_29C0Kwe=VeSq>bn~cgxAGPxE>kS*ZwlFHbjVB#vZfV44i) znm{$`c8AgEf;Zo>D1)TQL9&CqOB~6SzpkxlD%FIxIkpsfkBKsG6>3qPZeVCOA{HD4 zlF0Dh5a}ZClfQ`i9I3bgYSL!|LqYf3QOwo+ilE%_>eMJ+m(Zo30wz8dqyq+NY$QEK^7MMT`e`DrV zj0Arlt538ZGGR9Ho_0-yQ9dj}rcDq1wlefs-WVvB2wef6VV8hoRu=NU2==J;_ zqKMhbiGcv&0xTFUFQ&4O_V@H1V|yX&>xn=e>m%RCbp+45Y&B*C&MrGqgT(_%1H!rvV0kId#6LF zKg%7s7=?s9Y;-eEsP8h_%Uy7I{@(v8%NJrnI?{<}5-sRRGak7@L^Dm;nvLL|-|(cj zoo=*dD(AoBK#n7@t#_w#d>6Ny*M+j#n=#;)ykeZ?r2i1a!I=(5kAVpI#n)rz(bovP~67C>2A(#mx#kH5&UY_lxW=)Rp}7`Hj^GwHiM~#zg?G+$W9ps zhbm)w&>khB=4j+WPS;^hThZg$tr*a$cPCNiGdSbMG~&2sjNk?m>9l zd4ZHCFcm+I?}M{QEPkJ_?3n3F`}wO3&SmuoE)l@kMR@}jJ!XJc{1zB`A(T}e!@TwMAQ g`#8}rB!>e219O;O!j=a@CjbBd07*qoM6N<$f=6p>?*IS* diff --git a/vines_petals/vine_node.gd b/vines_petals/vine_node.gd index 54092af..8bbcb67 100644 --- a/vines_petals/vine_node.gd +++ b/vines_petals/vine_node.gd @@ -1,9 +1,9 @@ class_name VineNode extends Node2D -@onready var grid : Grid = %Grid -var grid_position : Vector2 -var angular_offset : float -var height_offset : float -var bud : Bud + +@export var vine : Vine +@onready var grid : Grid = get_tree().get_root().get_node("main/Earth/Grid") +@export var location : Vector2 +@export var offset : Vector2 func _ready() -> void: - position = grid. + position = grid.get_world_position(location, offset) diff --git a/world/earth.tscn b/world/earth.tscn index bc2a6b3..733e53a 100644 --- a/world/earth.tscn +++ b/world/earth.tscn @@ -43,5 +43,6 @@ script = ExtResource("3_2bhor") ground_radius = 3000.0 cell_height = 300.0 num_collumns = 60 +debug = true packed_buildings = Array[PackedScene]([ExtResource("4_r4pw8"), ExtResource("4_ml5no"), ExtResource("6_640fc"), ExtResource("7_abvrx"), ExtResource("3_nihcy"), ExtResource("9_ej0af"), ExtResource("10_640fc")]) metadata/_custom_type_script = "uid://m3vyyfk8gnma"