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; } } }
//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; }