protected virtual void Update()
    {
        if (!GameManager.instance.isPaused)
        {
            enemyBounds = enemyBoxCollider2D.bounds;
            enemyBounds.Expand(boundsOffset);
            //DrawBoundsRect(); // debug Rect

            switch (state)
            {
            case (BaseEnemyState.Moving):
                Move(new Vector2(transform.position.x + Vector2.left.x, transform.position.y));
                LookForPlayer();
                break;

            case (BaseEnemyState.MovingToPlayer):
                MoveToPlayer();
                break;

            case (BaseEnemyState.Fighting):
                Fight();
                break;

            case (BaseEnemyState.PlayerDied):
                state = BaseEnemyState.Celebrating;
                SetFocus(false);
                Celebrate();
                break;
            }
        }
    }
Beispiel #2
0
 //Init
 protected void Init()
 {
     state_          = gameObject.AddComponent <EnemyWaitState>();
     enemyAnimation_ = GetComponent <Animation.EnemyAnimation>();
     GameObject[] post = GameObject.FindGameObjectsWithTag("post_tag");
     postObj_ = post;
     PostSearch();
 }
 void GetPlayerInfo(RaycastHit2D hit)
 {
     state  = BaseEnemyState.MovingToPlayer;
     player = hit.collider.gameObject;
     target = player.GetComponent <PlayerActions>();
     playerBoxCollider2D = hit.collider.GetComponent <BoxCollider2D>();
     MoveToPlayer();
 }
    protected virtual void MoveToPlayer()
    {
        LookAtPlayer();
        Move(playerBounds.center);

        Debug.DrawLine(enemyBounds.center, playerBounds.center, Color.yellow);
        RaycastHit2D hit = Physics2D.Linecast(enemyBounds.center, playerBounds.center, viewLayer);

        if (hit.distance <= attackRange)
        {
            state = BaseEnemyState.Fighting;
        }
    }
    protected virtual void Start()
    {
        pathArea = GameObject.FindGameObjectWithTag("Path").GetComponent <BoxCollider2D>();
        EventManager.onPlayerDeath          += PlayerDied;
        EventManager.onEnemyArrivedInTown   += AllyArrivedInTown;
        EventManager.onEnemiesAttackingTown += PlayerDied;

        currentHp = maxHp;

        spriteRenderer     = graphics.gameObject.GetComponent <SpriteRenderer>();
        defaultColor       = spriteRenderer.color;
        state              = BaseEnemyState.Moving;
        enemyBoxCollider2D = GetComponent <BoxCollider2D>();
        enemyBounds        = enemyBoxCollider2D.bounds;
        CalculateRaySpacing();
    }
    protected virtual void Fight()
    {
        Debug.DrawLine(enemyBounds.center, player.transform.position, Color.yellow);
        RaycastHit2D hit = Physics2D.Linecast(enemyBounds.center, player.transform.position, viewLayer);

        LookAtPlayer();

        if (hit.distance > attackRange)
        {
            if (PlayerInfo.instance.engagedEnemies.Contains(this))
            {
                PlayerInfo.instance.engagedEnemies.Remove(this);
            }
            state = BaseEnemyState.MovingToPlayer;
            return;
        }
        else
        {
            if (!PlayerInfo.instance.engagedEnemies.Contains(this))
            {
                PlayerInfo.instance.engagedEnemies.Add(this);
            }
        }

        if (isFirstAttack)
        {
            isFirstAttack = false;
            lastAttack    = Time.time - attackCooldown / 2;
        }

        if (Time.time > lastAttack + attackCooldown)
        {
            //playerActions.TakeDamage(attackDamage);
            GetTarget().Defend(Attack());
            StartCoroutine(TempAttackAnim());
            lastAttack = Time.time;
        }
    }
 void PlayerDied()
 {
     state = BaseEnemyState.PlayerDied;
 }