Development Merge 2025.10.18 #4
@@ -2,7 +2,7 @@ using Syntriax.Engine.Core;
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
namespace Syntriax.Engine.Systems.Time;
 | 
					namespace Syntriax.Engine.Systems.Time;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
public interface ITicker : IStopwatch
 | 
					public interface ITicker
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    Event<ITicker> OnTick { get; }
 | 
					    Event<ITicker> OnTick { get; }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -2,14 +2,14 @@ using Syntriax.Engine.Core;
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
namespace Syntriax.Engine.Systems.Time;
 | 
					namespace Syntriax.Engine.Systems.Time;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
public class Ticker : Stopwatch, ITicker
 | 
					public class TickerStopwatch : Stopwatch, ITicker
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    public Event<ITicker> OnTick { get; } = new();
 | 
					    public Event<ITicker> OnTick { get; } = new();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    public double Period { get; set; } = 1f;
 | 
					    public double Period { get; set; } = 1f;
 | 
				
			||||||
    public int TickCounter { get; private set; } = 0;
 | 
					    public int TickCounter { get; private set; } = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    private double nextTick = 0f;
 | 
					    private double nextTick = double.MaxValue;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    public override void Start()
 | 
					    public override void Start()
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
@@ -22,7 +22,7 @@ public class Ticker : Stopwatch, ITicker
 | 
				
			|||||||
    {
 | 
					    {
 | 
				
			||||||
        base.Update();
 | 
					        base.Update();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        while (Time > nextTick)
 | 
					        while (Time >= nextTick)
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            nextTick += Period;
 | 
					            nextTick += Period;
 | 
				
			||||||
            TickCounter++;
 | 
					            TickCounter++;
 | 
				
			||||||
							
								
								
									
										40
									
								
								Engine.Systems/Time/TickerTimer.cs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										40
									
								
								Engine.Systems/Time/TickerTimer.cs
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,40 @@
 | 
				
			|||||||
 | 
					using Syntriax.Engine.Core;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					namespace Syntriax.Engine.Systems.Time;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					public class TickerTimer : Timer, ITicker
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    public Event<ITicker> OnTick { get; } = new();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public double Period { get; set; } = 1f;
 | 
				
			||||||
 | 
					    public int TickCounter { get; private set; } = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    private double nextTick = double.MinValue;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public override void Start(double time)
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        TickCounter = 0;
 | 
				
			||||||
 | 
					        base.Start(time);
 | 
				
			||||||
 | 
					        nextTick = Remaining - Period;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public override void Update()
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        base.Update();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        while (Remaining <= nextTick)
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            nextTick -= Period;
 | 
				
			||||||
 | 
					            TickCounter++;
 | 
				
			||||||
 | 
					            OnTick?.Invoke(this);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    protected override void OnFinalize()
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        base.OnFinalize();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        TickCounter = 0;
 | 
				
			||||||
 | 
					        nextTick = 0f;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@@ -53,7 +53,7 @@ public class Timer : Behaviour, IUpdate, ITimer
 | 
				
			|||||||
        OnStopped?.Invoke(this);
 | 
					        OnStopped?.Invoke(this);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    public void Update()
 | 
					    public virtual void Update()
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        if (State is not TimerState.Ticking)
 | 
					        if (State is not TimerState.Ticking)
 | 
				
			||||||
            return;
 | 
					            return;
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user