using UnityEngine; namespace DoomBreakers { public class PlayerQuickAttack : BaseState, IPlayerQuickAttack { private GameObject timerObj; private const string _animNameStr1 = "SmallAttack"; private const string _animNameStr2 = "SmallAttack2"; private const string _animNameStr3 = "SmallAttack3"; private const string _animNameStr4 = "SmallAttack4"; public PlayerQuickAttack(StateMachine s, Vector3 v) : base(velocity: v)//=> _stateMachine = s; { //Declaring new keyword Constructor isn't allowed in Unity and causes issues. //We use Setup() instead and Object Pool the states. } public void Setup(StateMachine s, Vector3 v) //: base(velocity: v)//=> _stateMachine = s; { base.BaseSetup(v); _stateMachine = s; _velocity = v; //We want to carry this on between states. //_quickAttackIncrement = quickAttackIncrement; timerObj = new GameObject(); timerObj.AddComponent(); _behaviourTimer = timerObj.GetComponent(); //print("\nQuick Attack State."); } public override void IsQuickAttack(ref Animator animator, ref IPlayerSprite playerSprite, ref Vector2 input, ref int quickAttackIncrement) { switch (quickAttackIncrement) { default: animator.Play(_animNameStr3); break; case 0: animator.Play(_animNameStr1);//, -1, 0.0f); //SmallAttack2 - SmallAttack5 break; case 1: animator.Play(_animNameStr2);//, -1, 0.0f); break; case 2: animator.Play(_animNameStr3); break; case 3: animator.Play(_animNameStr4); break; } _velocity.x = (input.x * (_moveSpeed * _sprintSpeed)); playerSprite.SetBehaviourTextureFlash(0.25f, Color.white); _behaviourTimer.StartTimer(_quickAtkWaitTime); if (_behaviourTimer.HasTimerFinished()) { playerSprite.ResetTexture2DColor(); if (quickAttackIncrement >= 0 && quickAttackIncrement < 4) quickAttackIncrement++; else quickAttackIncrement = 0; AudioEventManager.PlayPlayerSFX(PlayerSFXID.PlayerQuickAttackSFX); _stateMachine.SetState(PlayerStatePool._instance.GetPlayerIdleObjState(_stateMachine, _velocity, false));//new PlayerIdle(_stateMachine, _velocity)); } //base.UpdateBehaviour(); } } }