From 7e968df4a644d671ea47a56d90a9e6c6ed4320fc Mon Sep 17 00:00:00 2001 From: orosmatthew Date: Wed, 29 Dec 2021 15:08:26 -0500 Subject: [PATCH] Tweaks --- Main.cs | 11 ++- Main.tscn | 4 +- ParticleNode.cs | 4 +- ParticleNode.tscn | 2 +- ParticleSimulation/Particle.cs | 7 +- ParticleSimulation/ParticleSimulation.cs | 118 ++++++++++++++--------- Particles.csproj | 8 +- Particles.sln | 17 ++-- Particles.sln.DotSettings.user | 2 - default_env.tres | 7 ++ icon.ico | Bin 0 -> 112226 bytes project.godot | 21 ++-- textures/particle.png | Bin 1278 -> 1637 bytes textures/particle_noborder.png | Bin 0 -> 1727 bytes textures/particle_noborder.png.import | 35 +++++++ textures/particle_old.png | Bin 0 -> 1278 bytes textures/particle_old.png.import | 35 +++++++ 17 files changed, 188 insertions(+), 83 deletions(-) delete mode 100644 Particles.sln.DotSettings.user create mode 100644 default_env.tres create mode 100644 icon.ico create mode 100644 textures/particle_noborder.png create mode 100644 textures/particle_noborder.png.import create mode 100644 textures/particle_old.png create mode 100644 textures/particle_old.png.import diff --git a/Main.cs b/Main.cs index 7f4c6f3..e0aa4b9 100644 --- a/Main.cs +++ b/Main.cs @@ -12,14 +12,17 @@ public class Main : Node2D public override void _Ready() { - _particleNodes = GetNode("ParticlesNodes"); + _particleNodes = GetNode("ParticleNodes"); GD.Randomize(); - var randomSeed = GD.Randi(); + ulong randomSeed = GD.Randi(); GD.Seed(randomSeed); GD.Print("Last Seed: " + randomSeed); + var viewSize = GetViewportRect().Size; + var zoom = GetNode("Camera2D").Zoom; + var spaceSize = new Vector2(viewSize.x * zoom.x, viewSize.y * zoom.y); _particleSimulation = new ParticleSimulation { - SpaceSize = GetViewportRect().Size * 1.15f + SpaceSize = spaceSize }; _particleSimulation.Initialize(); foreach (var id in _particleSimulation.LastParticlesAdded) CreateParticleNode(id); @@ -51,7 +54,7 @@ public class Main : Node2D particleNode.CurrentSimulationPosition = simulationParticle.Position; particleNode.SetColor(simulationParticle.Type.Hue, simulationParticle.Health, Mathf.Clamp(simulationParticle.AverageSpeed / 1.5f, 1f, 1f)); - particleNode.ScreenWrappedLast = simulationParticle.ScreenWrappedLast; + particleNode.WasTeleportedLast = simulationParticle.WasTeleportedLast; } } diff --git a/Main.tscn b/Main.tscn index 820ba09..d3c1728 100644 --- a/Main.tscn +++ b/Main.tscn @@ -5,9 +5,9 @@ [node name="Main" type="Node2D"] script = ExtResource( 1 ) -[node name="ParticlesNodes" type="Node2D" parent="."] +[node name="ParticleNodes" type="Node2D" parent="."] [node name="Camera2D" type="Camera2D" parent="."] anchor_mode = 0 current = true -zoom = Vector2( 1.15, 1.15 ) +zoom = Vector2( 1.35, 1.35 ) diff --git a/ParticleNode.cs b/ParticleNode.cs index 403d2d0..9f23ef2 100644 --- a/ParticleNode.cs +++ b/ParticleNode.cs @@ -9,7 +9,7 @@ public class ParticleNode : Node2D public Vector2 CurrentSimulationPosition = new Vector2(); public Vector2 LastSimulationPosition; - public bool ScreenWrappedLast = false; + public bool WasTeleportedLast = true; public int SimulationId; public override void _Ready() @@ -20,7 +20,7 @@ public class ParticleNode : Node2D public override void _Process(float delta) { - Position = ScreenWrappedLast == false + Position = WasTeleportedLast == false ? LastSimulationPosition.LinearInterpolate(CurrentSimulationPosition, GetParent().GetParent
().PhysicsInterpolationFraction) : CurrentSimulationPosition; diff --git a/ParticleNode.tscn b/ParticleNode.tscn index eb89554..2bd8f95 100644 --- a/ParticleNode.tscn +++ b/ParticleNode.tscn @@ -1,7 +1,7 @@ [gd_scene load_steps=3 format=2] [ext_resource path="res://ParticleNode.cs" type="Script" id=1] -[ext_resource path="res://textures/particle.png" type="Texture" id=2] +[ext_resource path="res://textures/particle_noborder.png" type="Texture" id=2] [node name="ParticleNode" type="Node2D"] script = ExtResource( 1 ) diff --git a/ParticleSimulation/Particle.cs b/ParticleSimulation/Particle.cs index 69e19b9..58f2e1d 100644 --- a/ParticleSimulation/Particle.cs +++ b/ParticleSimulation/Particle.cs @@ -7,7 +7,7 @@ namespace Particles.ParticleSimulation private float _health = 1f; public Vector2 Position = new Vector2(); - public bool ScreenWrappedLast = true; + public bool WasTeleportedLast = true; public Vector2 Velocity = new Vector2(); public Particle(int id, ParticleType type) @@ -33,5 +33,10 @@ namespace Particles.ParticleSimulation { AverageSpeed = 0.99f * AverageSpeed + 0.01f * speed; } + + public void ResetAverageSpeed() + { + AverageSpeed = 1f; + } } } \ No newline at end of file diff --git a/ParticleSimulation/ParticleSimulation.cs b/ParticleSimulation/ParticleSimulation.cs index 5fce004..68436ec 100644 --- a/ParticleSimulation/ParticleSimulation.cs +++ b/ParticleSimulation/ParticleSimulation.cs @@ -1,27 +1,39 @@ -using System.Collections.Generic; -using System.Threading.Tasks; +#define MULTITHREADED + +using System.Collections.Generic; +using System.Linq; using Godot; +#if MULTITHREADED + using System.Threading.Tasks; +#endif namespace Particles.ParticleSimulation { public class ParticleSimulation { - + // size of simulation space public Vector2 SpaceSize; + // dictionary of particles with particle Id being the key private readonly Dictionary _particles = new Dictionary(); private readonly List _particleTypes = new List(); - private readonly List _tasks = new List(); - + + // task list if multi-threaded + #if MULTITHREADED + private readonly List _tasks = new List(); + #endif + + // updated on every simulation update public List LastParticlesAdded { get; private set; } = new List(); - // ReSharper disable once CollectionNeverUpdated.Global public List LastParticlesRemoved { get; private set; } = new List(); + // counts up for each particle added private int _idCount; private const int MaxParticles = 1100; - private const int MaxParticleTypes = 12; + private const int MaxParticleTypes = 10; + private const float HealthDelta = 0.005f; private const float NegativeHealthMultiplier = 2f; private const float PositiveHealthMultiplier = 4f; @@ -32,35 +44,41 @@ namespace Particles.ParticleSimulation { for (var i = 0; i < MaxParticleTypes; i++) CreateRandomParticleType(); - //for (var i = 0; i < MaxParticles; i++) - // CreateRandomParticle(); } public void Update() { LastParticlesRemoved.Clear(); LastParticlesAdded.Clear(); - _tasks.Clear(); + + // update all particles + #if MULTITHREADED + _tasks.Clear(); + foreach (var id in _particles.Keys) + _tasks.Add(Task.Factory.StartNew(UpdateParticle, id)); + Task.WaitAll(_tasks.ToArray()); + #else foreach (var id in _particles.Keys) - _tasks.Add(Task.Factory.StartNew(UpdateParticle, id)); - Task.WaitAll(_tasks.ToArray()); - var deletedParticle = false; - foreach (var p in _particles) + UpdateParticle(id); + #endif + + // used to ensure only one particle is moved per update + var movedParticle = false; + + foreach (var particle in _particles.Select(p => p.Value)) { - var particle = p.Value; - particle.ScreenWrappedLast = false; - if (deletedParticle == false && particle.Health == 0f) + particle.WasTeleportedLast = false; + if (movedParticle == false && particle.Health == 0f) { - if (GD.Randf() < 0.2f) + if (GD.Randf() < 0.1f) { particle.Position = GetRandomParticlePosition(); - particle.ScreenWrappedLast = true; - //LastParticlesRemoved.Add(p.Key); - deletedParticle = true; + particle.WasTeleportedLast = true; + particle.Health = 1f; + movedParticle = true; continue; } } - var position = particle.Position; particle.Velocity = particle.Velocity.Clamped(5f); position += particle.Velocity; @@ -68,52 +86,48 @@ namespace Particles.ParticleSimulation if (position.x > SpaceSize.x) { position.x -= SpaceSize.x; - particle.ScreenWrappedLast = true; + particle.WasTeleportedLast = true; } else if (position.x < 0) { position.x += SpaceSize.x; - particle.ScreenWrappedLast = true; + particle.WasTeleportedLast = true; } if (position.y > SpaceSize.y) { position.y -= SpaceSize.y; - particle.ScreenWrappedLast = true; + particle.WasTeleportedLast = true; } else if (position.y < 0) { position.y += SpaceSize.y; - particle.ScreenWrappedLast = true; + particle.WasTeleportedLast = true; } - - particle.AddAverageSpeedValue(particle.Position.DistanceTo(position)); /* - if (particle.AverageSpeed < 0.3f) + particle.AddAverageSpeedValue(particle.Velocity.Length()); + + if (particle.AverageSpeed < 0.5f) particle.Health -= HealthDelta * NegativeHealthMultiplier; else - particle.Health += HealthDelta; - */ - if (deletedParticle == false && particle.Health == 0f) + particle.Health += HealthDelta * PositiveHealthMultiplier; + + if (movedParticle == false && particle.Health == 0f) { - if (GD.Randf() < 0.2f) + if (GD.Randf() < 0.1f) { - //LastParticlesRemoved.Add(p.Key); particle.Position = GetRandomParticlePosition(); - particle.ScreenWrappedLast = true; - deletedParticle = true; + particle.ResetAverageSpeed(); + particle.WasTeleportedLast = true; + particle.Health = 1f; + movedParticle = true; continue; } } - + */ particle.Position = position; } - - foreach (var id in LastParticlesRemoved) - { - _particles.Remove(id); - } - + // ReSharper disable once InvertIf if (_particles.Count < MaxParticles) { @@ -132,6 +146,13 @@ namespace Particles.ParticleSimulation } } + // ReSharper disable once UnusedMember.Local + private void RemoveParticle(int id) + { + _particles.Remove(id); + LastParticlesRemoved.Add(id); + } + private void CreateRandomParticleType() { var type = new ParticleType() @@ -192,7 +213,7 @@ namespace Particles.ParticleSimulation return _particles[id]; } - private Task UpdateParticle(object i) + private void UpdateParticle(object i) { var id = (int)i; var particle1 = _particles[id]; @@ -206,15 +227,17 @@ namespace Particles.ParticleSimulation var distanceSquared = particle1.Position.DistanceSquaredTo(position); if (distanceSquared > (55f * 55f)) continue; - var direction = particle1.Position.DirectionTo(position); if (distanceSquared < (35f * 35f)) closeCount++; // collision force float distance; + Vector2 direction; + if (distanceSquared < (ParticleCollisionRadius * ParticleCollisionRadius)) { + direction = particle1.Position.DirectionTo(position); distance = particle1.Position.DistanceTo(position); var collisionForce = 1f / (0.35f + Mathf.Pow(Mathf.E, -1.15f * (distance - 12f))) - 1f / 0.35f; particle1.Velocity += direction * collisionForce; @@ -225,6 +248,7 @@ namespace Particles.ParticleSimulation if (props.Force != 0f && distanceSquared >= props.MinRadius * props.MinRadius && distanceSquared <= props.MaxRadius * props.MaxRadius) { + direction = particle1.Position.DirectionTo(position); distance = particle1.Position.DistanceTo(position); var mid = (props.MinRadius + props.MaxRadius) / 2f; float particleForce; @@ -256,12 +280,10 @@ namespace Particles.ParticleSimulation } } - if (closeCount > 50) + if (closeCount > 70) particle1.Health -= HealthDelta * NegativeHealthMultiplier; else particle1.Health += HealthDelta * PositiveHealthMultiplier; - - return Task.CompletedTask; } } } diff --git a/Particles.csproj b/Particles.csproj index 647872a..db88a8d 100644 --- a/Particles.csproj +++ b/Particles.csproj @@ -1,7 +1,5 @@ - - net472 - Debug;ExportDebug;ExportRelease;Release - AnyCPU - + + net472 + \ No newline at end of file diff --git a/Particles.sln b/Particles.sln index f96954d..388aa17 100644 --- a/Particles.sln +++ b/Particles.sln @@ -1,22 +1,19 @@ Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio 2012 -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Particles", "Particles.csproj", "{E15A1F42-C497-4EDE-8944-84CB055B33CB}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Particles", "Particles.csproj", "{87802628-5B53-4FFD-8ACF-E7227985842E}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU ExportDebug|Any CPU = ExportDebug|Any CPU ExportRelease|Any CPU = ExportRelease|Any CPU - Release|Any CPU = Release|Any CPU EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution - {E15A1F42-C497-4EDE-8944-84CB055B33CB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {E15A1F42-C497-4EDE-8944-84CB055B33CB}.Debug|Any CPU.Build.0 = Debug|Any CPU - {E15A1F42-C497-4EDE-8944-84CB055B33CB}.ExportDebug|Any CPU.ActiveCfg = ExportDebug|Any CPU - {E15A1F42-C497-4EDE-8944-84CB055B33CB}.ExportDebug|Any CPU.Build.0 = ExportDebug|Any CPU - {E15A1F42-C497-4EDE-8944-84CB055B33CB}.ExportRelease|Any CPU.ActiveCfg = Debug|Any CPU - {E15A1F42-C497-4EDE-8944-84CB055B33CB}.ExportRelease|Any CPU.Build.0 = Debug|Any CPU - {E15A1F42-C497-4EDE-8944-84CB055B33CB}.Release|Any CPU.ActiveCfg = Release|Any CPU - {E15A1F42-C497-4EDE-8944-84CB055B33CB}.Release|Any CPU.Build.0 = Release|Any CPU + {87802628-5B53-4FFD-8ACF-E7227985842E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {87802628-5B53-4FFD-8ACF-E7227985842E}.Debug|Any CPU.Build.0 = Debug|Any CPU + {87802628-5B53-4FFD-8ACF-E7227985842E}.ExportDebug|Any CPU.ActiveCfg = ExportDebug|Any CPU + {87802628-5B53-4FFD-8ACF-E7227985842E}.ExportDebug|Any CPU.Build.0 = ExportDebug|Any CPU + {87802628-5B53-4FFD-8ACF-E7227985842E}.ExportRelease|Any CPU.ActiveCfg = ExportRelease|Any CPU + {87802628-5B53-4FFD-8ACF-E7227985842E}.ExportRelease|Any CPU.Build.0 = ExportRelease|Any CPU EndGlobalSection EndGlobal diff --git a/Particles.sln.DotSettings.user b/Particles.sln.DotSettings.user deleted file mode 100644 index f591ba1..0000000 --- a/Particles.sln.DotSettings.user +++ /dev/null @@ -1,2 +0,0 @@ - - INFO \ No newline at end of file diff --git a/default_env.tres b/default_env.tres new file mode 100644 index 0000000..20207a4 --- /dev/null +++ b/default_env.tres @@ -0,0 +1,7 @@ +[gd_resource type="Environment" load_steps=2 format=2] + +[sub_resource type="ProceduralSky" id=1] + +[resource] +background_mode = 2 +background_sky = SubResource( 1 ) diff --git a/icon.ico b/icon.ico new file mode 100644 index 0000000000000000000000000000000000000000..2fdf457589d0483e5144bc875323f1b5952ae92e GIT binary patch literal 112226 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 literal 0 HcmV?d00001 diff --git a/project.godot b/project.godot index b83d025..b32a24f 100644 --- a/project.godot +++ b/project.godot @@ -13,26 +13,30 @@ config_version=4 config/name="Particles" run/main_scene="res://Main.tscn" config/icon="res://icon.png" +config/windows_native_icon="res://icon.ico" [display] -window/size/width=1920 -window/size/height=1080 window/size/resizable=false window/size/borderless=true +window/size/fullscreen=true [input] -quit={ -"deadzone": 0.5, -"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":0,"physical_scancode":16777217,"unicode":0,"echo":false,"script":null) - ] -} reset={ "deadzone": 0.5, -"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":0,"physical_scancode":82,"unicode":0,"echo":false,"script":null) +"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":82,"physical_scancode":0,"unicode":0,"echo":false,"script":null) ] } +quit={ +"deadzone": 0.5, +"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":16777217,"physical_scancode":0,"unicode":0,"echo":false,"script":null) + ] +} + +[mono] + +profiler/enabled=true [physics] @@ -45,3 +49,4 @@ quality/driver/driver_name="GLES2" vram_compression/import_etc=true vram_compression/import_etc2=false environment/default_clear_color=Color( 0, 0, 0, 1 ) +environment/default_environment="res://default_env.tres" diff --git a/textures/particle.png b/textures/particle.png index 73190c34a6f245c4ecc3e8e62bfad70be4817a5f..47b4f19973b5a3396dfabcc5de8911f63c5aa7e6 100644 GIT binary patch delta 1583 zcmV+~2GIHb3FQosNq@os01mUtI03WWUy^;32w3i~tKXg`uiVGk{zbA)J zrF|rAguV)}CoK@;FWpliDkgv!{+S%Ul~yUEZQvQtMTp`qH1G z1Q5e9n7jUs?uZ{hN_#3oAcz;<0*LV}VZTZvx|c*lLxXB*X;E!$ZK}DsS)aqz)s?!w zzE&3(7y7)+xWttBTtx8NOLz$&#I8f*3=cczP{+0HLh``ZFqyXm5|1Hhic<%Jb$cP#m8d6N1V`F3b&R3Gl%S*Mfv7z?&_lub# zOotC#F@K@a9BmNryo~Se?pCw2vub*Jy5hz|Yiq0i-*aguZ6+hd39#bfb;&?Pcd05P6T&ayP;I*-ebkB_U- z(NWX$uxxH_spDDo z8;r?gb(k_XX2|ydp69JF*Cr${MUSnB7S$24Fhk)4F7#7-c$k>|wm(Cp@d;4na@G1>YnH~W;W2+WG zT!O&obbrq%8w-Yqhs~K4rhyLjfd}yF+6s3*&T~H>-Zyk~beJnE+U7t2-rHN@c|K|I z{viTwb07do3o9P~EOzwv21zF?+U7=?3x7m5Yjh*}`@YGE6O1`xPtcC-cz{!?;JsZE z@fdqA0yv*&2q;O#W9$Qw0_-SdRfZKZHc7=} z><5t^K)Ncac#J(-fdBavNHs2`lZaMd;gvJFx}?FFBVLzZV|%a)kVmsZqB3b59e+6; z8??=V02CluAxoPyJZ_q{IS}BbIfg=tnk;QnAdz}<5?LOgZPo&ql#%l`lcG)vySuyQ z%*tMnCJQ_OoMmU^=TSE9u=a0lZJ8@8nJJ$wfO8s9oIrj)?yRq`tDBq15}}N(83Dv4 zsK9it1{5cpo}QYk_`%pbQs!@rt$&(q4}j<97z*p^%F2q)&&LhM#MnGij4M$TM@yP#}OPMC~obMNX*9 zh{FbnF)$VnUK`tT2=f3yDQ75Ut}QJs)zlOCZN}g+@3E!e?nAv4Nl{1qvwu0yA*xQ0 z60@(;S8gayAU{uvx|*=m5$!z!Ucd`6{;@ePz%~T}2#AsK02t8X;-Xq!UarbpB>pFc z^BYAN&wBqPeHxC_13SG4g^k_TiX-cX;P&E+FP)aQqj`G^qp`RQyJA}9vaqP{+!b|Hcw h0QCql`Fvif{{SH*j3M!?N7euU002ovPDHLkV1ii?_1XXc delta 1221 zcmV;$1UmcW4E_m_Nq@rt01m?e$8V@)0000ObVXQnQ*UN;cVTj60B~VxZgehgWpp4k zE-@}OWJg$1000DUNkl>ReDZzk?L^0-Rd{{R}z=Z7eAtdO-@i0nV`R{>q#iChS&=%BOCS!cKs3 z_V4G+nT}XpU4Jzj8yjYOd)piw9GH`nlNS7)GCpG&Rkr~8(DOJUh3$aBb?`THAj;a> zn%UjmHRtE&=HcPNJUu;i1k2Xz^;TW#P`W+n%ewNl9a0zrMkWCVBjv;w`}_Om>gvio zK0e9-yMa2WYj1B)+VZG_N#%PCDO5l)=kR7`NW$0n_J8(P2GS3xn>Li~9PAPu=Mqxr z1BEky^RhB%Ha9oT_4T!MdJr@kjh0R2OU7?7r(*Gu!aPvK|9mv~C| zTltj1>2g}dlt&6JP{2MfUwe+$9H^9Y!-PH*%pB|vg=2ygT2NUIc(q#1+}zwqheiQ? zp-;+JaDSmVcPB72&RV&kf-iN+Lx&vd8 z$xBN-r)eUU$OnjU|+=%GM zdVbU}hRCK$D>1SSz^!Yi0C!`Q!YZ<}v*W~;ahPuaZZJ9pxQ(ThRgtr^Gbgr;R!(3W zAb&Wt=w=VE?A+hqJF#Vav>E`vaKpoS$OVN`RAnNIq#tYmp2s;4xIL|uR2jzP#|dWH z0Kwv?%GqCxNLIMW2H?r8^MD5xN=cPrOn#hTnGL|>Y3Bh?Ym|~I!nm+ zK=Om&oF`0f8l3WkDJ4QvHWlWb9OvOUrGLVV#g7ks=GOwj*_w2#IJ z3Z#2DN>C{6<8gw5>0Xc^D4g~c8G;JqbV;hFVkA;%K}FuZ4HVK)ncf8YQV@JY#eZgz zLJKPMqNE%T_^Op*OrQ^u*Pi?Yy80`tyHZv-wJW}Wb zMcg(EvP28#+>%|EX7K&FENy|pX&}3Ug{kKt*ACPjNpJJ;wQu{Mw@6_ODCU@Okr|3I z!Ve}IU@#v{WYxUPCkIabU&KP1LJ9aHs=Fp()@7J2hOGW>8t_{bDT)) j*25 diff --git a/textures/particle_noborder.png b/textures/particle_noborder.png new file mode 100644 index 0000000000000000000000000000000000000000..55b789f0c717a09e206d668e050dcedc7249aa7c GIT binary patch literal 1727 zcmV;w20;0VP)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGizyJUazyWI3i3tDz22@EzK~#8N<=fe7 zTy+@6@uZEdwyt%l^+Lr3_d6F9LByrf7DN%f5WQ5qcf&tG-0ns3O1)7;5t?E}5fv2F zD_6t?^+H>p$=-}#*IV6!^2DR zaalN~u(aU&>i?ezhr)k_gN3n)iHSoSHf+ep&S=2{P)v{H<8fg{I4xXOI5(^brv%>% z2r>J2*b)8+zl3iJzTX@6B^cui9gGDD!070xi{E1U#BhGNG29R?3IZVu1O{4P7BouB z%YyO3SYZ77@L~8M{1pBP`@+Qf_3Lw)pXL>S2ICB_4!4He!xiC#ARtvM&sDO6;eW$d z;qCBl*ct?AUV)f%0E+qLK}yTZ`+}BdTx)kivO*wa!Yg58&}9zHH3)47VDsk9L*wJ) zQg~IkE<6;j4El9*T6apii}B)%@O=0rY#$jJIka}|+I*b7+6q8vb**bKdm!8$q<*Jb zd?v{VUE%fcVla4)wUZ6A4nQ%#GF%-V3D<^`!koL&0?8D*D|{NB4WETQvkk(mZoZgj z_O|eFxI7#ix=H)P*WtPFPS`b@Aj}wmVqX8gGdv!ozp1PnW%|?&o(gY<9Ww=C+5j}P z{9WORz`Oyln`JE_2v3GL!nB!iL^BP2UfNeJ-|gnfJ-S!-?A})vFD=#5kf|;*vK#R9 z`Cc(!sS3hl;hM0lc$%V?rpi3;2aNUxyl(CD)5$$w5^4=tJWbJ*FH5>uif;&jmHa$ z=Xw{A63+1Yx%Df_^jku$8w{6IT!Y`M!6D{+&+xik&KN%m_fAYqY+X{$?Hy4&z3q4N z#3Qe(d1qd~aAt1}Feu`c=VbyQBDFulpor&-U8?}t`Ss$CZ?58%=UMf$K~&l#4FFWS-{3%5T?Io@myO24792Mc-A&(s(BUwAO5Po z7!cJxR{_`_JWv=E@w(Hs3V>(q9xDxsc>Uc~0PK!DN*c5P{N`E(Kpl?jporIR!YyW7jVEF2;>E&Zt;fRT|A8K4g>|rg79nTr2`Z9>Ym-ZQu+f&dex?70H~ykMUhGZRoJ}}gvz{ocJI4erGBMJ z6;rJ=Iy&m#c!;3XOyT4?pA~+ zoDml5$&wYGMUHviR3`)4dV#9#)+;47#(-19O+f{w!XqWAM{8`**RAa>Z>{hwa<-Z3 z+I_Kd&gomSK{4`KK_=W2&I`Ilr!qo|OLuD&8yhWec{^o=H(SlC|CS*54KG%l85AMj z5oCn%LM7IG>kgdZ*}j^RwYdGfrMh#>Jz;TPoNQEim(Xu9tSej^RGdNmq3>mdV8HsL zxw}Yfb2!7$+KfA&aD)XXIZ}V0Ep5B+2)5FK1fWqRE0|?kF_O#>5S$%!8B^-%p$Y=? zp4B;rkkTGnFbgehn=Tj!=hND)wBP|~)TT|F>?^dkH3Qno0Q35oqw8{V-2n{^{SOC| V#?KvT$I<`*002ovPDHLkV1jxpNGkvU literal 0 HcmV?d00001 diff --git a/textures/particle_noborder.png.import b/textures/particle_noborder.png.import new file mode 100644 index 0000000..5cca5c8 --- /dev/null +++ b/textures/particle_noborder.png.import @@ -0,0 +1,35 @@ +[remap] + +importer="texture" +type="StreamTexture" +path="res://.import/particle_noborder.png-2c964d106064b04cd1632e2feec7d5d8.stex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://textures/particle_noborder.png" +dest_files=[ "res://.import/particle_noborder.png-2c964d106064b04cd1632e2feec7d5d8.stex" ] + +[params] + +compress/mode=0 +compress/lossy_quality=0.7 +compress/hdr_mode=0 +compress/bptc_ldr=0 +compress/normal_map=0 +flags/repeat=0 +flags/filter=true +flags/mipmaps=false +flags/anisotropic=false +flags/srgb=2 +process/fix_alpha_border=true +process/premult_alpha=false +process/HDR_as_SRGB=false +process/invert_color=false +process/normal_map_invert_y=false +stream=false +size_limit=0 +detect_3d=true +svg/scale=1.0 diff --git a/textures/particle_old.png b/textures/particle_old.png new file mode 100644 index 0000000000000000000000000000000000000000..73190c34a6f245c4ecc3e8e62bfad70be4817a5f GIT binary patch literal 1278 zcmVPx#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D02p*dSaefwW^{L9 za%BK;VQFr3E^cLXAT%y9E;VFFSW*B01aC=1K~#8N?VGDkBtaC05y%w?1P_2f@&E`P z0*L^En4l0q2!VuzfF&@3z=R+WB%sIyg?0r$D{B9L(nY$e{_43fm+q+* zAA!?V=TdZ4ox1ddF=lA2tgQS1vtSV{gRKnyP8pv~sk(zg3i}0unFoj91$+S0A)nwC z9D#YIyI)A*cYwnS;1s+86n%UjmHRtE&=HcPNJUu;i1k2Xz^;TW#P`W+n%ewNl9a0zrMkWCV zBjv;w`}_Om>gvioK0e9-yMa2WYj1B)+VZG_N#%PCDO5l)=kR7`NW$0n_V!i=(hsPc zHk9og>=GU45>n^`g)@NjvNC8kH#g1o^|f?*5HuQ%mQCeL#&0mEV)2o}JW#~{d^Gsu z<73loHl?G3gf?kg`IN!wa$3cdM+z-az&b%8<}y1ToRj*JreRL}^~DN+hifk{p<&+}C) z(|_KFzD2qNW0A>HARs6#GrThN`F7ApHr~;9+`7IxF zK6vir1QiCE+YcK0u3`dTJ4^Wn2$CMI>XhOt5m`l^ss;#Ne=b9n(kgLzdFjNI@zo7% z@JxK1LfnYx$9jI$FowvcN-Ht44Zy8yrvP_jl)@^qv$NyGmT{PG0B$fk1-Ol+lvRE`vaKpoS$OVN`RAnNIq#tYmp2s;4xIL|u zR2jzP#|dWH0Kwv?%GqCxNLIMW2H?r8^MD5xN=cPrOn#hTnGL|>Y3Bh?Ym|~I!nm+K=Om&oF`0f8l3WkDJ4QvHWlWb9OvOUrNWHGj}Lt2*8;)WUlq2%J0-GJ z{+e$9-o|nYjMH+MvH0W^Xjgaoa z2*Ja&kH!cJq{kbe{fx>AZyMu+P=OEV()E!B0^YFEA`=7T+VGJnd zm~fF9iZa3vCK_NcA57$dkurWV6P@ackit%Y!E`^G$^+wRem3U=XVUy|(g)6^`RS|z o4s)DH>*MJn5KPHFpEnc#05l>N{T5MfTmS$707*qoM6N<$f*im=D*ylh literal 0 HcmV?d00001 diff --git a/textures/particle_old.png.import b/textures/particle_old.png.import new file mode 100644 index 0000000..6be5f19 --- /dev/null +++ b/textures/particle_old.png.import @@ -0,0 +1,35 @@ +[remap] + +importer="texture" +type="StreamTexture" +path="res://.import/particle_old.png-70319fb8cbbe1fe7999a1d4ae575ed1d.stex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://textures/particle_old.png" +dest_files=[ "res://.import/particle_old.png-70319fb8cbbe1fe7999a1d4ae575ed1d.stex" ] + +[params] + +compress/mode=0 +compress/lossy_quality=0.7 +compress/hdr_mode=0 +compress/bptc_ldr=0 +compress/normal_map=0 +flags/repeat=0 +flags/filter=true +flags/mipmaps=false +flags/anisotropic=false +flags/srgb=2 +process/fix_alpha_border=true +process/premult_alpha=false +process/HDR_as_SRGB=false +process/invert_color=false +process/normal_map_invert_y=false +stream=false +size_limit=0 +detect_3d=true +svg/scale=1.0