public override void EnterState(TrunkFSM trunk) { Setup(trunk); PlayAnimation(trunk); PlayAudio(); BeingHitAction(trunk); }
public virtual bool CheckTransitionToMoving(TrunkFSM trunk) { InvertDirectionIfNeeded(trunk); trunk.TransitionToState(trunk.MovingState); return(true); }
private bool ReachedObstacle(TrunkFSM trunk) { Vector2 direction = base.CalculateDirection(trunk); foreach (var frontTransform in trunk.frontTransforms) { int layersToCollide = LayerMask.GetMask("Ground", "Obstacles", "Gate", "Enemies"); RaycastHit2D ray = Physics2D.Raycast(frontTransform.position, direction, distanceToCheckObstacle, layersToCollide); if (ray.collider == null) { continue; } string[] obstacleTags = { "Ground", "Obstacle", "Gate", "Enemy" }; foreach (var tag in obstacleTags) { if (ray.collider.CompareTag(tag)) { return(true); } } } return(false); }
public override bool CheckTransitionToMoving(TrunkFSM trunk) { if (trunk.attackCooldownTimer > 0) { return(false); } return(base.CheckTransitionToMoving(trunk)); }
private void AttackAction(TrunkFSM trunk) { if (trunk.spriteRenderer.isVisible) { Manager.audio.Play("Enemy Shoot"); } trunk.SpawnBullet(trunk.bulletSpawnTransform.position); trunk.attackCooldownTimer = trunk.startAttackCooldownTimer; }
public virtual bool CheckTransitionToAttacking(TrunkFSM trunk) { if (trunk.attackCooldownTimer <= 0 && PlayerIsOnSight(trunk)) { trunk.TransitionToState(trunk.AttackingState); return(true); } return(false); }
public virtual bool CheckTransitionToDying(TrunkFSM trunk) { if (trunk.currentHealth <= 0) { trunk.TransitionToState(trunk.DyingState); return(true); } return(false); }
public override bool CheckTransitionToIdle(TrunkFSM trunk) { if (!ThereIsGroundToWalk(trunk) || ReachedObstacle(trunk)) { trunk.needToTurn = true; trunk.TransitionToState(trunk.IdleState); return(true); } return(false); }
private bool ThereIsGroundToWalk(TrunkFSM trunk) { RaycastHit2D[] groundRay = Physics2D.RaycastAll(trunk.groundTransform.position, Vector2.down, distanceToCheckGround); foreach (var obj in groundRay) { if (obj.collider != null && obj.collider.CompareTag("Ground")) { return(true); } } return(false); }
public override void Update(TrunkFSM trunk) { if (base.CheckTransitionToAttacking(trunk)) { return; } base.MoveAction(trunk); if (CheckTransitionToIdle(trunk)) { return; } }
public override void FixedUpdate(TrunkFSM trunk) { if (attackingTimer >= 0) { attackingTimer -= Time.deltaTime; return; } AttackAction(trunk); if (base.CheckTransitionToIdle(trunk)) { return; } }
public void InvertDirectionIfNeeded(TrunkFSM trunk) { if (trunk.needToTurn) { if (trunk.transform.eulerAngles.y == 0) { trunk.transform.eulerAngles = new Vector3(0f, 180f, 0f); } else if (trunk.transform.eulerAngles.y == 180) { trunk.transform.eulerAngles = new Vector3(0f, 0f, 0f); } } trunk.needToTurn = false; }
public override void FixedUpdate(TrunkFSM trunk) { Helper.PlayAnimationIfPossible("Idle", trunk.animator, waitAnimations); if (base.CheckTransitionToAttacking(trunk)) { return; } if (idleTimer >= 0) { idleTimer -= Time.deltaTime; return; } if (base.CheckTransitionToMoving(trunk)) { return; } }
public bool PlayerIsOnSight(TrunkFSM trunk) { Vector2 direction = CalculateDirection(trunk); foreach (var frontTransform in trunk.frontTransforms) { int layersToCollide = LayerMask.GetMask("Player", "Ground", "Obstacles", "Gate", "Enemies"); RaycastHit2D ray = Physics2D.Raycast(frontTransform.position, direction, trunk.playerRayDistance, layersToCollide); if (ray.collider == null) { continue; } if (ray.collider.CompareTag("Player")) { return(true); } } return(false); }
public override void FixedUpdate(TrunkFSM trunk) { if (base.CheckTransitionToDying(trunk)) { return; } if (hitTimer >= 0) { hitTimer -= Time.deltaTime; return; } if (base.CheckTransitionToAttacking(trunk)) { return; } if (CheckTransitionToMoving(trunk)) { return; } }
public virtual bool CheckTransitionToIdle(TrunkFSM trunk) { trunk.TransitionToState(trunk.IdleState); return(true); }
private void Setup(TrunkFSM trunk) { idleTimer = Helper.GetAnimationDuration("Idle", trunk.animator); waitAnimations = new string[] { "Attacking", "Idle" }; }
public override void EnterState(TrunkFSM trunk) { Setup(trunk); PlayAnimation(trunk); }
public override void EnterState(TrunkFSM trunk) { Enemy.DieAction(trunk.gameObject); }
private void PlayAnimation(TrunkFSM trunk) { trunk.animator.Play("Attacking"); }
public abstract void EnterState(TrunkFSM trunk);
public void MoveAction(TrunkFSM trunk) { trunk.transform.Translate(Vector2.left * trunk.moveSpeed * Time.deltaTime); }
private void Setup(TrunkFSM trunk) { attackingTimer = trunk.bulletSpawnTimerSyncedWithAnimation; trunk.rb.velocity = Vector2.zero; }
public virtual void FixedUpdate(TrunkFSM trunk) { }
private void BeingHitAction(TrunkFSM trunk) { trunk.rb.velocity = Vector2.zero; }
public Vector2 CalculateDirection(TrunkFSM trunk) { return((trunk.bulletDirectionTransform.position - trunk.bulletSpawnTransform.position).normalized); }
private void PlayAnimation(TrunkFSM trunk) { trunk.animator.Play("BeingHit", -1, 0f); }
private void IdleAction(TrunkFSM trunk) { trunk.rb.velocity = Vector2.zero; }
public override void EnterState(TrunkFSM trunk) { Setup(trunk); IdleAction(trunk); }
private void Setup(TrunkFSM trunk) { hitTimer = Helper.GetAnimationDuration("BeingHit", trunk.animator); }