void FixedUpdate() { if (!spawnFinished) { gameObject.layer = LayerMask.NameToLayer("IgnoreWallsAndFloor"); if (transform.position.y < prevY) { gameObject.layer = LayerMask.NameToLayer("IgnoreWalls"); goingDown = true; } prevY = transform.position.y; if (!jumping) { Jump(); } return; } if (playerMov.GhostWalkActivated()) { return; } if (isAttacking) { strategy.Execute(); return; } anim.Play("Walk"); movement.RotateToPlayer(); if (!readyToAttack) { timer += Time.deltaTime; if (timer >= idleTime) { readyToAttack = true; timer -= idleTime; } } else { strategy = strategyA; isAttacking = true; readyToAttack = false; } }
// Use this for initialization void Start() { transform.LookAt(GameObject.Find("Player").transform); m_player = GameObject.FindGameObjectWithTag("Player").transform; m_FireBallStrategy = GetComponent <FireBallStrategy> (); m_MeleeStrategy = GetComponent <MeleeStrategy> (); m_Movement = GetComponent <EnemyFollowerMovement> (); m_Strategy = m_FireBallStrategy; m_CanAttack = false; anim = GetComponentInChildren <Animator>(); playerMov = GameObject.Find("Player").GetComponent <PlayerMovement>(); }
private void ActivateAppropriateStrategy(UnitType unitType) { switch (unitType) { case UnitType.SpecialCaster: if (!enemyStrategiesPool.ContainsKey(EnemyStrategyId.TryToBuffPyro)) { enemyStrategiesPool.Add(EnemyStrategyId.TryToBuffPyro, new SpecialCasterStrat()); } currentStrategy = enemyStrategiesPool[EnemyStrategyId.TryToBuffPyro]; break; case UnitType.Pyromaniac: if (!enemyStrategiesPool.ContainsKey(EnemyStrategyId.UsePyro)) { enemyStrategiesPool.Add(EnemyStrategyId.UsePyro, new PyroStrategy()); } currentStrategy = enemyStrategiesPool[EnemyStrategyId.UsePyro]; break; case UnitType.Defender: if (!enemyStrategiesPool.ContainsKey(EnemyStrategyId.DefendThenAttackRandom)) { enemyStrategiesPool.Add(EnemyStrategyId.DefendThenAttackRandom, new DefenderStrategy()); } currentStrategy = enemyStrategiesPool[EnemyStrategyId.DefendThenAttackRandom]; break; case UnitType.Assassin: if (!enemyStrategiesPool.ContainsKey(EnemyStrategyId.AttackMostDangerous)) { enemyStrategiesPool.Add(EnemyStrategyId.AttackMostDangerous, new AssassinStrategy()); } currentStrategy = enemyStrategiesPool[EnemyStrategyId.AttackMostDangerous]; break; default: if (!enemyStrategiesPool.ContainsKey(EnemyStrategyId.AttackRandom)) { enemyStrategiesPool.Add(EnemyStrategyId.AttackRandom, new AttackRandom()); } currentStrategy = enemyStrategiesPool[EnemyStrategyId.AttackRandom]; break; } battleManager.StartCoroutine(DelayTurn(currentStrategy)); }
public Enemy(IEnemyStrategy strategy) { this.strategy = strategy; }
private IEnumerator DelayTurn(IEnemyStrategy currentStrategy) { yield return(new WaitForSeconds(TurnExecutionDelay)); currentStrategy.TakeTurn(activeUnit, battleManager); }
// Update is called once per frame void FixedUpdate() { if (m_fireBreathParticle.activeSelf) { m_fireEffTimer += Time.deltaTime; if (m_fireEffTimer >= maxEffectTime) { m_fireBreathParticle.SetActive(false); m_fireEffTimer -= maxEffectTime; } } if (!m_CanAttack) { m_Timer += Time.deltaTime; if (m_Timer >= m_IddleTimer) { m_CanAttack = true; m_Timer -= m_IddleTimer; } else { return; } } if (playerMov.GhostWalkActivated()) { anim.Play("idle"); return; } float distPlayer = Vector3.Distance(m_player.position, transform.position); if (m_CanAttack && distPlayer > m_minDist) { m_Strategy = m_FireBallStrategy; m_FireBallTimer += Time.deltaTime; if (m_FireBallTimer > m_secondsPerFireBall) { anim.Play("attack"); m_fireBreathParticle.SetActive(true); m_FireBallTimer -= m_secondsPerFireBall; m_Strategy.Execute(); m_CanAttack = false; } else { anim.Play("run"); m_Movement.Move(); return; } } else if (m_CanAttack && distPlayer <= m_minDist) { anim.Play("attack"); m_Strategy = m_MeleeStrategy; gameObject.transform.LookAt(m_player); m_Strategy.Execute(); m_CanAttack = false; } /*OLD STRATEGY * * float distPlayer = Vector3.Distance(m_player.position, transform.position); * * if (m_CanAttack && distPlayer > m_minDist) * { * m_Movement.Move(); * return; * } * * else if (m_CanAttack && distPlayer <= m_minDist) * { * * int rand = Random.Range(0, 5); * if (rand == 0) * { * m_fireBreathParticle.SetActive (false); * m_Strategy = m_FireBallStrategy; * } * else * { * m_fireBreathParticle.SetActive (true); * m_Strategy = m_MeleeStrategy; * } * * m_Strategy.Execute(); * m_CanAttack = false; * } */ }