private void DoAction(Enemy.EnemyController controller) { for (int i = 0; i < actions.Length; i++) { actions[i].Act(controller); } }
private void Attack(Enemy.EnemyController controller) { if (controller.CheckIfCountDownElapsed(controller.monsterData.attackRateInTick)) { Vector2 dirToTarget = controller.chaseTarget.position - controller.eyes.position; controller.eyes.right = dirToTarget; GameObject projectile = Instantiate(projectilePrefab, controller.eyes.position, controller.eyes.rotation); projectile.GetComponent <Projectile>().direction = new Vector2(Mathf.Abs(dirToTarget.normalized.x), 0f); controller.ResetTimer(); } }
private void CheckTransition(Enemy.EnemyController controller) { for (int i = 0; i < transitions.Length; i++) { bool decisionSucceeded = transitions[i].decision.Decide(controller); if (decisionSucceeded) { controller.TransitionToState(transitions[i].trueState); } else { controller.TransitionToState(transitions[i].falseState); } } }
private void Chase(Enemy.EnemyController controller) { Vector2 dirMove = (controller.transform.position - controller.chaseTarget.position).normalized; controller.GetComponent <SpriteRenderer>().sprite = controller.monsterData.AttackSprite(); if (dirMove.x < 0) { controller.transform.localScale = Vector3.one; } else { controller.transform.localScale = new Vector3(-1, 1, 1); } controller.transform.Translate(-dirMove * controller.monsterData.Stats().speed *Time.deltaTime); }
private bool Look(Enemy.EnemyController controller) { Collider2D hits = Physics2D.OverlapCircle(controller.eyes.position, lookDistance, playerLayer); if (hits == null) { return(false); } Vector2 dirToTarget = (hits.transform.position - controller.eyes.position).normalized; if (Vector3.Angle(controller.eyes.right, dirToTarget) < angleLook / 2) { controller.chaseTarget = hits.transform; return(true); } return(false); }
public void Patrol(Enemy.EnemyController controller) { controller.eyes.right = Vector2.right; RaycastHit2D groundInfo = Physics2D.Raycast(controller.eyes.position, controller.eyes.TransformDirection(new Vector2(1, angle)), DISTANCE_RAYCAST, layerHit); RaycastHit2D wallInfo = Physics2D.Raycast(controller.eyes.position, controller.eyes.TransformDirection(Vector2.right), DISTANCE_RAYCAST, layerHit); Debug.DrawRay(controller.eyes.position, controller.eyes.TransformDirection(new Vector2(1, angle)) * DISTANCE_RAYCAST, Color.red); Debug.DrawRay(controller.eyes.position, controller.eyes.TransformDirection(Vector2.right) * DISTANCE_RAYCAST, Color.red); controller.GetComponent <SpriteRenderer>().sprite = controller.monsterData.Sprite(); if (groundInfo.collider == null || wallInfo.collider) { controller.dirMove = ChangeDirection(controller.dirMove); } if (controller.dirMove.x > 0) { controller.transform.localScale = Vector3.one; } else { controller.transform.localScale = new Vector3(-1, 1, 1); } controller.transform.Translate(controller.dirMove * controller.monsterData.Stats().speed *Time.deltaTime); }
public override bool Decide(Enemy.EnemyController controller) { bool targetVisible = Look(controller); return(targetVisible); }
public override void Act(Enemy.EnemyController controller) { Patrol(controller); }
public abstract void Act(Enemy.EnemyController controller);
public void SetController(EnemyController _enemyController) { currentEnemyController = _enemyController; }
public override void Act(Enemy.EnemyController controller) { Attack(controller); }
public override void Act(Enemy.EnemyController controller) { Chase(controller); }
public void UpdateState(Enemy.EnemyController controller) { DoAction(controller); CheckTransition(controller); }
private void Awake() { _enemyController = GetComponentInChildren <EnemyController>(); _myRb = GetComponentInChildren <Rigidbody2D>(); }
public FollowState(GameObject gameObject, EnemyController controller) : base(gameObject) { this.controller = controller; this.player = controller.player; this.followTime = controller.followTime; }
public override bool Decide(Enemy.EnemyController controller) { bool chaseTergetIsActive = controller.chaseTarget.gameObject.activeSelf; return(chaseTergetIsActive); }
public EnemyStateMachine(EnemyController _currentController) { currentEnemyController = _currentController; }
public abstract bool Decide(Enemy.EnemyController controller);
void Awake() { enemyController = GetComponentInParent <EnemyController>(); }