public void HeavyAttackUpdate()
    {
        if (GetComponentInParent <AfterImage>().IsUpdate)
        {
            RaycastHit2D        hit    = Physics2D.Raycast(transform.position, transform.right, 12, LayerMask.GetMask("enemy"));
            RaycastHit2D        hit1   = Physics2D.Raycast(transform.position, transform.right + new Vector3(0, 0.25f, 0), 12, LayerMask.GetMask("enemy"));
            RaycastHit2D        hit2   = Physics2D.Raycast(transform.position, transform.right + new Vector3(0, -0.25f, 0), 12, LayerMask.GetMask("enemy"));
            BaseEnemyController enemy  = null;
            BaseEnemyController enemy1 = null;
            BaseEnemyController enemy2 = null;
            if (hit.collider)
            {
                enemy = hit.collider.GetComponent <BaseEnemyController>();
            }
            if (hit1.collider)
            {
                enemy1 = hit1.collider.GetComponent <BaseEnemyController>();
            }
            if (hit2.collider)
            {
                enemy2 = hit2.collider.GetComponent <BaseEnemyController>();
            }

            if (enemy || enemy1 || enemy2)
            {
                ActorController.Controller.transform.SetPositionY((enemy ? enemy : (enemy1 ? enemy1 : enemy2)).transform.position.y);

                _rigi.velocity = Vector2.zero;
                _anim.SetTrigger("skill2_dash");
            }
        }
    }
Exemple #2
0
 /// <summary>
 /// Call this method to remove enemy instance from this formation.
 /// </summary>
 /// <param name="enemyController">Enemy instance</param>
 public void RemoveEnemy(BaseEnemyController enemyController)
 {
     if (_enemyControllers.Contains(enemyController))
     {
         _enemyControllers.Remove(enemyController);
     }
 }
    protected void HandleCollision(Collision2D collision)
    {
        BaseEnemyController controller = collision.gameObject.GetComponent <BaseEnemyController>();

        if (controller != null)
        {
            controller.TakeDamage(Random.Range(minMaxDamages[0], minMaxDamages[1]));
        }
    }
    /// <summary>
    /// Call this routine method to spawn wave of enemies.
    /// </summary>
    /// <returns></returns>
    private IEnumerator SpawnWaves()
    {
        int currentWave = 0;

        while (currentWave < WaveList.Count)
        {
            for (int i = 0; i < WaveList[currentWave].FirstEnemyList.Count; i++)
            {
                Vector3             startPath   = WaveList[currentWave].FirstPath.BezierPathList[0];
                Path                currentPath = WaveList[currentWave].FirstPath;
                FormationController currentFormationController = GetFormation(WaveList[currentWave].FirstEnemyList[i]);

                GameObject newFly = GetCharacter(WaveList[currentWave].FirstEnemyList[i]);
                newFly.transform.SetParent(this.transform);
                newFly.transform.position = startPath;

                BaseEnemyController enemyController = newFly.GetComponent <BaseEnemyController>();

                enemyController.Init(currentPath
                                     , currentFormationController
                                     , _data
                                     , WaveList[currentWave].FirstEnemyList[i]
                                     );


                if (WaveList[currentWave].SecondEnemyList != null && WaveList[currentWave].SecondEnemyList.Count > 0)
                {
                    startPath   = WaveList[currentWave].SecondPath.BezierPathList[0];
                    currentPath = WaveList[currentWave].SecondPath;
                    currentFormationController = GetFormation(WaveList[currentWave].SecondEnemyList[i]);

                    newFly = GetCharacter(WaveList[currentWave].SecondEnemyList[i]);
                    newFly.transform.SetParent(this.transform);
                    newFly.transform.position = startPath;

                    enemyController = newFly.GetComponent <BaseEnemyController>();

                    enemyController.Init(currentPath
                                         , currentFormationController
                                         , _data
                                         , WaveList[currentWave].FirstEnemyList[i]
                                         );
                }

                yield return(new WaitForSeconds(EnemySpawnInterval));
            }

            yield return(new WaitForSeconds(WaveSpawnInterval));

            currentWave++;
        }

        _isAllSpawned = true;
        _isAttackAble = true;
    }
Exemple #5
0
    private BaseEnemyController CreateEnemyUtil(EnemyType type)
    {
        //根据类型 生成数据
        BaseEnemyInfo data = EnemyInfo.Instance.LoadBaseEnemyData(type);

        GameObject enemyGo = ResourcesLoadManager.LoadEnemyResources <GameObject>(data.enemyResName);
        GameObject enemy   = GameObject.Instantiate <GameObject>(enemyGo);

        enemy.transform.SetParent(GameController.Instance.EnemyGroup);

        BaseEnemyController enemyController = enemy.AddComponent <BaseEnemyController>();

        enemyController.InitEnemyData(enemy.transform, data);

        return(enemyController);
    }
Exemple #6
0
        private BaseEnemyController GetAsteroid(HashSet <BaseEnemyController> enemies)
        {
            var enemy = enemies.FirstOrDefault(a => !a.IsActive);

            if (enemy == null)
            {
                for (int i = 0; i < _poolCapacity; i++)
                {
                    var newEnemy = new BaseEnemyController(_enemyData, _factory);
                    newEnemy.ID = _id++;
                    ReturnToPool(newEnemy);
                    enemies.Add(newEnemy);
                }

                GetAsteroid(enemies);
            }

            enemy = enemies.FirstOrDefault(a => !a.IsActive);
            return(enemy);
        }
Exemple #7
0
    void Awake()
    {
        PlayerPrefs.SetInt("retreated", 0);
        SceneFadeHandler.Instance.levelStarting = true;
        EscapeHandler.instance.GetButtons();
        // Combat AI Controller reference
        this.combatController = FindObjectOfType <CombatController>();
        // inventory animator
        this.invAnim = FindObjectOfType <InventoryAnimation>();

        this.player = FindObjectOfType <PlayerController>();

        this.enemy = FindObjectOfType <BaseEnemyController>();

        currentBattle    = BattleCounter.GetInstance().GetCurrentBattleCount();
        remainingBattles = BattleCounter.GetInstance().GetRemainingBattles();

        _backgroundManager = FindObjectOfType <BackgroundManager>();
        _backgroundManager.SetBackground();
    }
    /// <summary>
    /// 子弹命中了对象
    /// </summary>
    private void OnTriggerEnter2D(Collider2D collision)
    {
        if (IsUsing)
        {
            //子弹击中了敌人
            if (collision.gameObject.CompareTag(TagManager.TAG_ENEMY))
            {
                BaseEnemyController enemyController = collision.gameObject.GetComponent <BaseEnemyController>();

                if (enemyController.IsUsing)
                {
                    //Enemy Flash
                    enemyController.DoFlash();
                    //HP Check
                    enemyController.baseEnemyInfo.HP -= baseBulletInfo.power;

                    if (enemyController.baseEnemyInfo.HP <= 0)
                    {
                        enemyController.SetNotUse();

                        //增加得分
                        RobotInfo.Instance.Score += enemyController.baseEnemyInfo.score;

                        EventManager.Instance.ExcuteEvent(EventType.PlayerScoreChange, null);
                    }

                    //子弹消失
                    SetNotUse();
                }
            }
            //子弹击中了玩家
            if (collision.gameObject.CompareTag(TagManager.TAG_PLAYER))
            {
                //TODO
            }
        }
    }
Exemple #9
0
 public void ReturnKilledToPool(BaseEnemyController enemy)
 {
     enemy.ReturnToPool(_poolRoot);
     OnEnemyKilledAndReturned.Invoke(enemy);
 }
Exemple #10
0
 public void ReturnToPool(BaseEnemyController enemy)
 {
     enemy.ReturnToPool(_poolRoot);
 }
    /// <summary>
    /// Sets the stats of an enemy that is passed through.
    /// </summary>
    /// <param name="enemy">BaseEnemyController class.</param>
    public void GetEnemyBaseStats(BaseEnemyController enemy, PlayerController player)
    {
        // Debug.Log("Checkpoint is: " + lastCheckpointHP + " HP, " + lastCheckpointNRG + " NRG, " + lastCheckpointATK + " ATK, " + lastCheckpointDEF + " DEF.");
        // Debug.Log("Previous is: " + previousEnemyHP + " HP, " + previousEnemyNRG + " NRG, " + previousEnemyATK + " ATK, " + previousEnemyDEF + " DEF.");
        // Debug.Log("Start of Run bool = " + startOfRun);
        if (startOfRun == true)
        {
            //SetCheckpoint();
            startOfRun = false;
        }
        //Debug.Log("Getting Enemy Stats");
        float min;
        float max;

        if (!firstEnemy)
        {
            // Check the HP and NRG.
            if (CheckStatGap(previousEnemyHP, previousEnemyNRG, player.totalHealth, player.totalEnergy, MIN_gapFill_HP_NRG, MAX_gapFill_HP_NRG) == false)
            {
                //Debug.Log("Not first enemy.");
                if (!CheckForBoss())
                {
                    //Debug.Log("Not boss.");
                    min = MIN_inc;
                    max = MAX_inc;
                }
                else
                {
                    //Debug.Log("Enemy is boss.");
                    min = MIN_inc_boss;
                    max = MAX_inc_boss;
                }
            }
            else
            {
                //Debug.Log("Stat gap fill HP and NRG");
                min = MIN_gapFill_HP_NRG;
                max = MAX_gapFill_HP_NRG;
            }
            //Debug.Log("Increasing HP and NRG stats");
            currentEnemyTotalHP  = previousEnemyHP + RandomIncrease(previousEnemyHP, (min + 0.05f), (max + 0.1f));
            currentEnemyTotalNRG = previousEnemyNRG + RandomIncrease(previousEnemyNRG, min, max);

            // CHECK HERE IF LOADED OR GENERATED TO DECIDE IF ENEMY STARTS WITH FULL HEALTH OR REDUCED!

            // Check the ATK and DEF.
            if (CheckStatGap(previousEnemyATK, previousEnemyDEF, player.physicalDamage, player.armor, MIN_gapFill_ATK_DEF, MAX_gapFill_ATK_DEF) == false)
            {
                //Debug.Log("Not first enemy.");
                if (CheckForBoss() == false) // Used to be !CheckForBoss()
                {
                    //Debug.Log("Not boss.");
                    min = MIN_inc;
                    max = MAX_inc;
                }
                else
                {
                    //Debug.Log("Enemy is boss.");
                    min = MIN_inc_boss;
                    max = MAX_inc_boss;
                }
            }
            else
            {
                //Debug.Log("Stat gap fill ATK and DEF");
                min = MIN_gapFill_ATK_DEF;
                max = MAX_gapFill_ATK_DEF;
            }
            //Debug.Log("Increasing ATK and DEF stats");
            currentEnemyATK = previousEnemyATK + RandomIncrease(previousEnemyATK, min, max);
            currentEnemyDEF = previousEnemyDEF + RandomIncrease(previousEnemyDEF, min, max);
        }
        if (SaveSystemHandler.instance.enemyLoadedFromFile)
        {
            enemy.SetStats(currentEnemyRemainingHP, currentEnemyTotalHP, currentEnemyRemainingNRG, currentEnemyTotalNRG, currentEnemyATK, currentEnemyDEF);
        }
        else
        {
            enemy.SetStats(currentEnemyTotalHP, currentEnemyTotalHP, currentEnemyTotalNRG, currentEnemyTotalNRG, currentEnemyATK, currentEnemyDEF);
        }

        StatFlip();
    }
 private void Awake()
 {
     _controller = GetComponentInParent <BaseEnemyController>();
     _rigi       = GetComponentInParent <Rigidbody2D>();
 }
Exemple #13
0
 // Use this for initialization
 void Start()
 {
     this.player = FindObjectOfType <PlayerController>();
     this.enemy  = FindObjectOfType <BaseEnemyController>();
 }
Exemple #14
0
 public void SetKilledEnemy(BaseEnemyController enemy)
 {
     _text.text = _message + enemy.Name;
     Hide().ToObservable().Subscribe();
 }
Exemple #15
0
 private void OnEnemyKilled(BaseEnemyController enemy)
 {
     _lastEnemyKilledPanelController.SetKilledEnemy(enemy);
 }
Exemple #16
0
 /// <summary>
 /// Call this method to register enemy instance into this formation.
 /// </summary>
 /// <param name="enemyController">Enemy instance</param>
 public void AddEnemy(BaseEnemyController enemyController)
 {
     _enemyControllers.Add(enemyController);
 }