From f072515386091a98c7b9e33c23a4025c653fe6e0 Mon Sep 17 00:00:00 2001 From: "Andrii Doroshenko (Xrayez)" Date: Mon, 26 Oct 2020 16:07:33 +0200 Subject: [PATCH] Add circle spawn demo project See goostengine/goost#28. --- 2d/spawn/circle_spawn.gd | 59 +++++++++++++++++++++++++++++++++++++ 2d/spawn/circle_spawn.tscn | 12 ++++++++ 2d/spawn/goost.tscn | 6 ++++ 2d/spawn/icon.png | Bin 0 -> 3735 bytes 2d/spawn/icon.png.import | 34 +++++++++++++++++++++ 2d/spawn/project.godot | 17 +++++++++++ 6 files changed, 128 insertions(+) create mode 100644 2d/spawn/circle_spawn.gd create mode 100644 2d/spawn/circle_spawn.tscn create mode 100644 2d/spawn/goost.tscn create mode 100644 2d/spawn/icon.png create mode 100644 2d/spawn/icon.png.import create mode 100644 2d/spawn/project.godot diff --git a/2d/spawn/circle_spawn.gd b/2d/spawn/circle_spawn.gd new file mode 100644 index 0000000..9141645 --- /dev/null +++ b/2d/spawn/circle_spawn.gd @@ -0,0 +1,59 @@ +extends Node2D + +enum Type { + CIRCLE, + RING, +} +export(Type) var type = Type.CIRCLE setget set_type +export var count := 500 setget set_count +export var min_radius := 0.0 setget set_min_radius +export var max_radius := 0.0 setget set_max_radius + + +func set_type(p_type): + type = p_type + call_deferred("spawn") + + +func set_count(p_count): + count = p_count + call_deferred("spawn") + + +func set_min_radius(p_min_radius): + min_radius = p_min_radius + call_deferred("spawn") + + +func set_max_radius(p_max_radius): + max_radius = p_max_radius + call_deferred("spawn") + + +func _ready(): + randomize() + if max_radius <= 0.0: + # Fit screen size. + max_radius = get_viewport().size.y / 2 + # Make sure sprites are not clipped by viewport. + max_radius -= preload("res://icon.png").get_size().length() + if min_radius <= 0.0: + min_radius = max_radius / 2 + spawn() + + +func spawn(): + for child in get_children(): + if child is Sprite: + child.queue_free() + for i in count: + var goost = preload("res://goost.tscn").instance() + add_child(goost) + # Spawn a sprite at random position within a circle radius. + var point = Vector2() + match type: + Type.CIRCLE: + point = GoostGeometry2D.rand_point_in_circle(max_radius) + Type.RING: + point = GoostGeometry2D.rand_point_in_ring(min_radius, max_radius) + goost.global_position = point diff --git a/2d/spawn/circle_spawn.tscn b/2d/spawn/circle_spawn.tscn new file mode 100644 index 0000000..69027ca --- /dev/null +++ b/2d/spawn/circle_spawn.tscn @@ -0,0 +1,12 @@ +[gd_scene load_steps=2 format=2] + +[ext_resource path="res://circle_spawn.gd" type="Script" id=1] + +[node name="circle_spawn" type="Node2D"] +script = ExtResource( 1 ) + +[node name="camera" type="Camera2D" parent="."] +current = true +__meta__ = { +"_editor_description_": "Displays sprites centered." +} diff --git a/2d/spawn/goost.tscn b/2d/spawn/goost.tscn new file mode 100644 index 0000000..d024416 --- /dev/null +++ b/2d/spawn/goost.tscn @@ -0,0 +1,6 @@ +[gd_scene load_steps=2 format=2] + +[ext_resource path="res://icon.png" type="Texture" id=1] + +[node name="goost" type="Sprite"] +texture = ExtResource( 1 ) diff --git a/2d/spawn/icon.png b/2d/spawn/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..39b4b019642bdb1dcc773b7f051a89d906b5d8ee GIT binary patch literal 3735 zcmV;I4ruX-P)<{98FWQhbW?9;ba!ELWdL_~cP?peYja~^ zaAhuUa%Y?FJQ@H14irg5K~#9!)mvw9RM!<&l1U~%l1Z6K@+V~1io#xwy!yH65T7z9YNC_x_k@KAWL&DSeN%Dzq!5dtLLIrU=#sN64xxK;HrQc15;0wHg zAQel0gf8Vz+aFjus;T(&a^3GCl44P%88C7UN`?jg@ z_>z8RYA$?n6u3@20} zgS}htMuP`i-MXWJ>xIa^hi)iGz2{E=_xj}a6I?UMPN3b>c>opd*-ebXmhAy%D2uSQaIDU;7nr>tlmbS#;=`H<$4`W}Y&O^ZQ z=3L;XZ31EC9&0ir5h7YmB1Mi-A2W~=|24qYmN22$ePj3Y2Cj~uof(@iA3PI;CAr}8 z6hKr894$uJbTR}8y1~TcfyVDdkW83l)iWOPZ?*xzz+;KWL6r6XV2hu9R~d3 z9lDn%`GYXzz!g|mSPm!3s-d!`9-5n**|=BR0QYg!H#UX;M}MCwuLj@cN|tqQj1Lo@?fKw%ZBq1o-e(-RHlI+vv}0}|tSq<< zHy+eNO+zCbzx@D~=ih>X`z}Kl6e`Its;+-FTZGs4UV=&Aeb2x;S5XZOO-;~*poo#2*}}^RnQ?P0vUiN>aDMOwIMQaKds_i~x`%lQe#VxNd+nIYgmJu;&Zw@i{+OXX zA-nJb0&NR`q4V@cR7$;RTwkzAbx}qhB&JxC5`LjSd_7Hw_9+QZ`(A5A9d9p^!raMh z)eRFSOLnM<5E?h`wTZ|&vkZB^9RNrM1KuI3gy%h?OZ!mg$|C;^3@19F=x2_SCpZy4& z3<9x6Q{Zv?XuXXgAJF6z^z2Yvtla;bR9_+uwR~XTi7JbK>0S*3fGod~tWXLpd>?9o ztj5QY3mAP!6Buxda`f-SIKeq-4e$&6;GD9Kh2R1b9!kF0A!ov>eHswN&5AB~oF^~)dCLx=2$YtpWw613W;W(uW!m{Yk4U3$yF{dklcp zNK(S+t~;t{XSDyN@5_-N7=6}=<%SxVgxjs(o(oXZ7y|BoeG~NfstAOIzSx2?Tm)h5 zk;h2%PGaJur=aNUN*Wduofs@Ips5&+3;j>eZ)L-d!z z-7o;@UYpt6w^}Z|JZFqZ<4T%(gJp8^vo6fTlT&SP0gto=a<1HoYymWK@c=*x5CYQf zP)37x0U%mV^jx~Hf$9e=_m8}IxhpHbfs917@)oVI{NgWg(geW%8}}m`fW^#s062Q9 zilxh}2BpvBw3#wZW*>kw;HPe+taAez)FrH{jLE_gDjT3AAx8TMdANKnaetajeucsf zW}dZ`JdI}ykjs>bS3CfaY-%2WrFFCc>$G)z%YB3uTKU@Hhpw{8)M7%Dvbj&;%an*;tZ`-wXy?T-wCQD2qi6PLL&}EsIYU)C-#ie;MvTk zklnBvN}%Ef0QbMPK7maZ(-Pc%v5(HGVui)reWj}Mca*-S39S_)u8>7@F_IL^l~V*? z@dChU5;!3M0=*KR%|8D}ZOxzBRqT3#g=cTF3EjkGh%(Jh;pdMD03vwWUV?BNp0=|q z8k)%TWR`AgeL;&^jT+=j75 z0H6#ci@fit>}TE$;uC9P35>Xb(^UETiCEL4B4?99Z6L%kjK(BHpbvn=`xZ?RVufnLl-!6?6;>ulXpA~q0{11OxDP4vi)J-Ja-|!-W7L`X zd(74dpC7Pno}jcjc^kU`uqv@W;=E;E9Q6ff=?WyXGNUF*=^Eudl-oN|_8?sTUVi?z zt-8Ot;36Yh2TJd=XP!qbNVX9S88u5V@?-YtkWuhEtrn2_aec-|1%aQsLH9CBnV&`= zXiHRMm6$YQ!I_)TXZJ-*feEZMv?;_fDCh9y#A*;_g{+F1v_&Y8BH~05 z}_Jo$JvY zeApIS`@1H^O=kwEPk_jgbL3(+9K#ndL5U-9J>QKDWJ;UQ%Q65`tZ9V?X>paI@u9Z4 zj;T+)RhBV5eV`+cPg)GXKRx0va1VWLn2klI_M`#O5;0}dbgLb$p$FjuGmN$Z_4AMl zw|Bcd+cubUP$p@Wwg1*XSHxn4;8I2BWuq%IuR%$hS?rK9xa|bT{vpyjCA}54=GC)$ zeat4m29ga`58WPRj^)0fR%wYRZb5xMnP-eoiFn25DavctBXuF$ z5WHjB&x@U5%wOZGQG-)V29w(5=mZ(wPg_gd6Qrx|wB$@c3y;ur(Zvp$8Uxh{