using Godot; using System; public partial class TAS_System : Node { private double _frameLength = 0.1; private bool _isCountingFrames = false; private Timer _frameTimer; private int _currentFrame = 0; private int _lastAdvancedFrame = 0; public double FrameLength { get { return this._frameLength; } private set { this._frameLength = value; } } public bool IsCountingFrames { get { return this._isCountingFrames; } private set { this._isCountingFrames = value; } } private Timer FrameTimer { get { return this._frameTimer; } set { this._frameTimer = value; } } public int CurrentFrame { get { return this._currentFrame; } private set { this._currentFrame = value; } } /// /// The last frame that can be advanced to. This will /// only be greater than CurrentFrame after the player /// regresses frames, and will be equal to CurrentFrame /// when the player has just done an action. /// /// public int LastAdvancedFrame { get { return this._lastAdvancedFrame; } private set { this._lastAdvancedFrame = value; } } [Signal] public delegate void FrameAdvancedEventHandler(int currentFrame); [Signal] public delegate void FramesAdvancedEventHandler(int numFrames); [Signal] public delegate void FramesRegressedEventHandler(int numFrames); public void StartCountingFrames() { } public void StopCountingFrames() { } public void ResetFrameCount() { this.CurrentFrame = 0; this.LastAdvancedFrame = 0; } // Returns how many frames it could successfully advance public int Advance(int numFrames) { int newFrame = Math.Min(this.CurrentFrame + numFrames, this.LastAdvancedFrame); int framesAdvanced = newFrame - this.CurrentFrame; EmitSignal(SignalName.FramesAdvanced, framesAdvanced); return framesAdvanced; } // Returns how many frames it could successfully regress public int Regress(int numFrames) { int newFrame = Math.Max(this.CurrentFrame - numFrames, 0); int framesRegressed = newFrame - this.CurrentFrame; EmitSignal(SignalName.FramesRegressed, framesRegressed); return framesRegressed; } /// /// Gets rid of advanced frames. /// public void DiscardAdvancedFrames() { this.LastAdvancedFrame = this.CurrentFrame; } // public void Test() // { // GD.Print("test123"); // // EmitSignal(SignalName.TestSignal, "test456"); // } }