Beispiel #1
0
    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;
        }
    }
Beispiel #2
0
    // 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>();
    }
Beispiel #3
0
        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));
        }
Beispiel #4
0
 public Enemy(IEnemyStrategy strategy)
 {
     this.strategy = strategy;
 }
Beispiel #5
0
        private IEnumerator DelayTurn(IEnemyStrategy currentStrategy)
        {
            yield return(new WaitForSeconds(TurnExecutionDelay));

            currentStrategy.TakeTurn(activeUnit, battleManager);
        }
Beispiel #6
0
    // 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;
         * }
         */
    }