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() {