From 00f7e0754e943b61967c044a96e46ffef71d9de6 Mon Sep 17 00:00:00 2001
From: Fortune <7847372+Fortune117@users.noreply.github.com>
Date: Thu, 2 Nov 2023 23:31:54 +1100
Subject: [PATCH 1/5] fill out particle system, fix naming issue
---
.../Components/Effects/ParticleSystem.cs | 61 ++++++++++++++++---
1 file changed, 53 insertions(+), 8 deletions(-)
diff --git a/code/GameEngine/Components/Effects/ParticleSystem.cs b/code/GameEngine/Components/Effects/ParticleSystem.cs
index 57c31f85..3d78dae6 100644
--- a/code/GameEngine/Components/Effects/ParticleSystem.cs
+++ b/code/GameEngine/Components/Effects/ParticleSystem.cs
@@ -8,12 +8,31 @@
public class ParticleSystem : BaseComponent, BaseComponent.ExecuteInEditor
{
Sandbox.ParticleSystem _particles;
-
+
[Property] public bool Looped { get; set; } = false;
[Range( 0, 2.0f )]
[Property] public float PlaybackSpeed { get; set; } = 1.0f;
+ private bool emissionStopped;
+
+ ///
+ /// Turn on or off particle emission.
+ /// Useful for particles with intermittent or permanent durations.
+ ///
+ [Property]
+ public bool EmissionStopped
+ {
+ get => emissionStopped;
+ set
+ {
+ emissionStopped = value;
+
+ if (_sceneObject is not null)
+ _sceneObject.EmissionStopped = value;
+ }
+ }
+
[Property] public Sandbox.ParticleSystem Particles
{
get => _particles;
@@ -26,9 +45,9 @@ [Property] public Sandbox.ParticleSystem Particles
}
}
+ [Property] public GameObject ControlPoint0 { get; set; }
[Property] public GameObject ControlPoint1 { get; set; }
[Property] public GameObject ControlPoint2 { get; set; }
- [Property] public GameObject ControlPoint3 { get; set; }
SceneParticles _sceneObject;
public SceneParticles SceneObject => _sceneObject;
@@ -60,6 +79,32 @@ void RecreateSceneObject()
_sceneObject = new SceneParticles( Scene.SceneWorld, _particles );
_sceneObject.Transform = Transform.World;
+ _sceneObject.EmissionStopped = emissionStopped;
+ }
+
+ public void PlayEffect()
+ {
+ RecreateSceneObject();
+ }
+
+ public void Set( int i, float value )
+ {
+ _sceneObject?.SetControlPoint( i, value );
+ }
+
+ public void Set( int i, Vector3 position )
+ {
+ _sceneObject?.SetControlPoint( i, position );
+ }
+
+ public void Set( int i, Transform transform )
+ {
+ _sceneObject?.SetControlPoint( i, transform );
+ }
+
+ public void Set( int i, Rotation rotation )
+ {
+ _sceneObject?.SetControlPoint( i, rotation );
}
public override void Update()
@@ -74,13 +119,13 @@ public override void Update()
if ( !_sceneObject.IsValid() )
return;
}
-
- _sceneObject.SetControlPoint( 0, ControlPoint1.IsValid() ? ControlPoint1.Transform.World : Transform.World );
- _sceneObject.SetControlPoint( 1, ControlPoint2.IsValid() ? ControlPoint2.Transform.World : Transform.World );
- _sceneObject.SetControlPoint( 2, ControlPoint3.IsValid() ? ControlPoint3.Transform.World : Transform.World );
-
+
+ _sceneObject.SetControlPoint( 0, ControlPoint0.IsValid() ? ControlPoint0.Transform.World : Transform.World );
+ _sceneObject.SetControlPoint( 1, ControlPoint1.IsValid() ? ControlPoint1.Transform.World : Transform.World );
+ _sceneObject.SetControlPoint( 2, ControlPoint2.IsValid() ? ControlPoint2.Transform.World : Transform.World );
+
_sceneObject.Simulate( Time.Delta * PlaybackSpeed );
-
+
if ( _sceneObject.Finished )
{
_sceneObject?.Delete();
From 27a2a5cb8cdb239951bbf5cd1ea540a3d0780943 Mon Sep 17 00:00:00 2001
From: Fortune <7847372+Fortune117@users.noreply.github.com>
Date: Thu, 2 Nov 2023 23:40:52 +1100
Subject: [PATCH 2/5] add `GetControlPointPosition`
---
code/GameEngine/Components/Effects/ParticleSystem.cs | 8 ++++++++
1 file changed, 8 insertions(+)
diff --git a/code/GameEngine/Components/Effects/ParticleSystem.cs b/code/GameEngine/Components/Effects/ParticleSystem.cs
index 3d78dae6..91a249c8 100644
--- a/code/GameEngine/Components/Effects/ParticleSystem.cs
+++ b/code/GameEngine/Components/Effects/ParticleSystem.cs
@@ -107,6 +107,14 @@ public void Set( int i, Rotation rotation )
_sceneObject?.SetControlPoint( i, rotation );
}
+ public Vector3 GetControlPointPosition( int i )
+ {
+ if ( _sceneObject is null )
+ return Vector3.Zero;
+
+ return _sceneObject.GetControlPointPosition( i );
+ }
+
public override void Update()
{
if ( !_sceneObject.IsValid() )
From a7e1ee5ff312489d64a6b5ab55d7aef7242ce984 Mon Sep 17 00:00:00 2001
From: Fortune <7847372+Fortune117@users.noreply.github.com>
Date: Thu, 2 Nov 2023 23:50:30 +1100
Subject: [PATCH 3/5] Update ParticleSystem.cs
---
code/GameEngine/Components/Effects/ParticleSystem.cs | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/code/GameEngine/Components/Effects/ParticleSystem.cs b/code/GameEngine/Components/Effects/ParticleSystem.cs
index 91a249c8..875f92e4 100644
--- a/code/GameEngine/Components/Effects/ParticleSystem.cs
+++ b/code/GameEngine/Components/Effects/ParticleSystem.cs
@@ -109,7 +109,7 @@ public void Set( int i, Rotation rotation )
public Vector3 GetControlPointPosition( int i )
{
- if ( _sceneObject is null )
+ if ( !_sceneObject.IsValid() )
return Vector3.Zero;
return _sceneObject.GetControlPointPosition( i );
From 257ef74211e32fdd0a62e14e271e59cac204d5ba Mon Sep 17 00:00:00 2001
From: Fortune <7847372+Fortune117@users.noreply.github.com>
Date: Mon, 13 Nov 2023 18:37:31 +1100
Subject: [PATCH 4/5] renamed `EmissionStopped` to `Emission` and flip the
assignments
---
code/GameEngine/Components/Effects/ParticleSystem.cs | 12 ++++++------
1 file changed, 6 insertions(+), 6 deletions(-)
diff --git a/code/GameEngine/Components/Effects/ParticleSystem.cs b/code/GameEngine/Components/Effects/ParticleSystem.cs
index 875f92e4..72a8e478 100644
--- a/code/GameEngine/Components/Effects/ParticleSystem.cs
+++ b/code/GameEngine/Components/Effects/ParticleSystem.cs
@@ -14,22 +14,22 @@ public class ParticleSystem : BaseComponent, BaseComponent.ExecuteInEditor
[Range( 0, 2.0f )]
[Property] public float PlaybackSpeed { get; set; } = 1.0f;
- private bool emissionStopped;
+ private bool _emission = true;
///
/// Turn on or off particle emission.
/// Useful for particles with intermittent or permanent durations.
///
[Property]
- public bool EmissionStopped
+ public bool Emission
{
- get => emissionStopped;
+ get => _emission;
set
{
- emissionStopped = value;
+ _emission = value;
if (_sceneObject is not null)
- _sceneObject.EmissionStopped = value;
+ _sceneObject.EmissionStopped = !value;
}
}
@@ -79,7 +79,7 @@ void RecreateSceneObject()
_sceneObject = new SceneParticles( Scene.SceneWorld, _particles );
_sceneObject.Transform = Transform.World;
- _sceneObject.EmissionStopped = emissionStopped;
+ _sceneObject.EmissionStopped = !_emission;
}
public void PlayEffect()
From 0c4a5498863afd229722854c5f1678f5b9897550 Mon Sep 17 00:00:00 2001
From: Fortune <7847372+Fortune117@users.noreply.github.com>
Date: Mon, 13 Nov 2023 18:41:29 +1100
Subject: [PATCH 5/5] add setter for named values
---
code/GameEngine/Components/Effects/ParticleSystem.cs | 5 +++++
1 file changed, 5 insertions(+)
diff --git a/code/GameEngine/Components/Effects/ParticleSystem.cs b/code/GameEngine/Components/Effects/ParticleSystem.cs
index 72a8e478..c9744de8 100644
--- a/code/GameEngine/Components/Effects/ParticleSystem.cs
+++ b/code/GameEngine/Components/Effects/ParticleSystem.cs
@@ -114,6 +114,11 @@ public Vector3 GetControlPointPosition( int i )
return _sceneObject.GetControlPointPosition( i );
}
+
+ public void Set( string name, Vector3 position )
+ {
+ _sceneObject?.SetNamedValue( name, position );
+ }
public override void Update()
{