Beispiel #1
0
 public override void EnterState(TrunkFSM trunk)
 {
     Setup(trunk);
     PlayAnimation(trunk);
     PlayAudio();
     BeingHitAction(trunk);
 }
Beispiel #2
0
    public virtual bool CheckTransitionToMoving(TrunkFSM trunk)
    {
        InvertDirectionIfNeeded(trunk);

        trunk.TransitionToState(trunk.MovingState);
        return(true);
    }
Beispiel #3
0
    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);
    }
Beispiel #4
0
 public override bool CheckTransitionToMoving(TrunkFSM trunk)
 {
     if (trunk.attackCooldownTimer > 0)
     {
         return(false);
     }
     return(base.CheckTransitionToMoving(trunk));
 }
Beispiel #5
0
 private void AttackAction(TrunkFSM trunk)
 {
     if (trunk.spriteRenderer.isVisible)
     {
         Manager.audio.Play("Enemy Shoot");
     }
     trunk.SpawnBullet(trunk.bulletSpawnTransform.position);
     trunk.attackCooldownTimer = trunk.startAttackCooldownTimer;
 }
Beispiel #6
0
 public virtual bool CheckTransitionToAttacking(TrunkFSM trunk)
 {
     if (trunk.attackCooldownTimer <= 0 && PlayerIsOnSight(trunk))
     {
         trunk.TransitionToState(trunk.AttackingState);
         return(true);
     }
     return(false);
 }
Beispiel #7
0
    public virtual bool CheckTransitionToDying(TrunkFSM trunk)
    {
        if (trunk.currentHealth <= 0)
        {
            trunk.TransitionToState(trunk.DyingState);
            return(true);
        }

        return(false);
    }
Beispiel #8
0
    public override bool CheckTransitionToIdle(TrunkFSM trunk)
    {
        if (!ThereIsGroundToWalk(trunk) || ReachedObstacle(trunk))
        {
            trunk.needToTurn = true;
            trunk.TransitionToState(trunk.IdleState);
            return(true);
        }

        return(false);
    }
Beispiel #9
0
    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);
    }
Beispiel #10
0
    public override void Update(TrunkFSM trunk)
    {
        if (base.CheckTransitionToAttacking(trunk))
        {
            return;
        }

        base.MoveAction(trunk);
        if (CheckTransitionToIdle(trunk))
        {
            return;
        }
    }
Beispiel #11
0
    public override void FixedUpdate(TrunkFSM trunk)
    {
        if (attackingTimer >= 0)
        {
            attackingTimer -= Time.deltaTime;
            return;
        }

        AttackAction(trunk);
        if (base.CheckTransitionToIdle(trunk))
        {
            return;
        }
    }
Beispiel #12
0
    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;
    }
Beispiel #13
0
    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;
        }
    }
Beispiel #14
0
    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);
    }
Beispiel #15
0
    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;
        }
    }
Beispiel #16
0
 public virtual bool CheckTransitionToIdle(TrunkFSM trunk)
 {
     trunk.TransitionToState(trunk.IdleState);
     return(true);
 }
Beispiel #17
0
 private void Setup(TrunkFSM trunk)
 {
     idleTimer      = Helper.GetAnimationDuration("Idle", trunk.animator);
     waitAnimations = new string[] { "Attacking", "Idle" };
 }
Beispiel #18
0
 public override void EnterState(TrunkFSM trunk)
 {
     Setup(trunk);
     PlayAnimation(trunk);
 }
Beispiel #19
0
 public override void EnterState(TrunkFSM trunk)
 {
     Enemy.DieAction(trunk.gameObject);
 }
Beispiel #20
0
 private void PlayAnimation(TrunkFSM trunk)
 {
     trunk.animator.Play("Attacking");
 }
Beispiel #21
0
 public abstract void EnterState(TrunkFSM trunk);
Beispiel #22
0
 public void MoveAction(TrunkFSM trunk)
 {
     trunk.transform.Translate(Vector2.left * trunk.moveSpeed * Time.deltaTime);
 }
Beispiel #23
0
 private void Setup(TrunkFSM trunk)
 {
     attackingTimer    = trunk.bulletSpawnTimerSyncedWithAnimation;
     trunk.rb.velocity = Vector2.zero;
 }
Beispiel #24
0
 public virtual void FixedUpdate(TrunkFSM trunk)
 {
 }
Beispiel #25
0
 private void BeingHitAction(TrunkFSM trunk)
 {
     trunk.rb.velocity = Vector2.zero;
 }
Beispiel #26
0
 public Vector2 CalculateDirection(TrunkFSM trunk)
 {
     return((trunk.bulletDirectionTransform.position - trunk.bulletSpawnTransform.position).normalized);
 }
Beispiel #27
0
 private void PlayAnimation(TrunkFSM trunk)
 {
     trunk.animator.Play("BeingHit", -1, 0f);
 }
Beispiel #28
0
 private void IdleAction(TrunkFSM trunk)
 {
     trunk.rb.velocity = Vector2.zero;
 }
Beispiel #29
0
 public override void EnterState(TrunkFSM trunk)
 {
     Setup(trunk);
     IdleAction(trunk);
 }
Beispiel #30
0
 private void Setup(TrunkFSM trunk)
 {
     hitTimer = Helper.GetAnimationDuration("BeingHit", trunk.animator);
 }