コード例 #1
0
ファイル: CannonBehaviour.cs プロジェクト: simple-ned/TD_Test
    public override void LateSetState()
    {
        ObjectsTimelineManager _t = GameManager.Instance.GetManager <ObjectsTimelineManager>();

        if (_t != null)
        {
            if (_targetGlobalId > 0)
            {
                GameObject currentEnemy = _t.GetGameObjectByGlobalId(_targetGlobalId);
                _currentEnemyComponent = currentEnemy.GetComponent <GoblinBehaviour>();
            }
            else
            {
                _currentEnemyComponent = null;
            }

            _enemies.Clear();

            foreach (int id in _enemiesGlobalId)
            {
                GameObject enemy = _t.GetGameObjectByGlobalId(id);
                _enemies.Add(enemy.GetComponent <GoblinBehaviour>());
            }
        }
    }
コード例 #2
0
ファイル: CannonBehaviour.cs プロジェクト: simple-ned/TD_Test
    private void OnTriggerEnter(Collider other)
    {
        GoblinBehaviour enemy = other.GetComponent <GoblinBehaviour>();

        if (enemy != null && !_enemies.Contains(enemy))
        {
            _enemies.Add(enemy);
        }
    }
コード例 #3
0
ファイル: CannonBehaviour.cs プロジェクト: simple-ned/TD_Test
    void Update()
    {
        // Есть ли вообще в кого целиться?
        if (_enemies.Count == 0)
        {
            return;
        }

        // Есть ли у нас кто-нибудь на прицеле?
        if (_currentEnemyComponent == null)
        {
            _currentEnemyComponent = ChooseTarget();

            if (_currentEnemyComponent == null)
            {
                if (_isShooting)
                {
                    StopCoroutine(Shoot());
                }

                if (!CannonPivot.localRotation.Equals(_baseLocalRotation))
                {
                    CannonPivot.localRotation = _baseLocalRotation;
                }

                return;
            }
        }

        // А если есть, он не мёртв?
        if (_currentEnemyComponent.IsDead)
        {
            _enemies.Remove(_currentEnemyComponent);
            _currentEnemyComponent    = null;
            CannonPivot.localRotation = _baseLocalRotation;

            return;
        }

        // Finally.. Можно и пострелять
        if (CannonPivot != null)
        {
            Vector3 targetPosition = _currentEnemyComponent.transform.position;
            Vector3 pivot          = CannonPivot.position;
            Vector3 lookDirection  = new Vector3(targetPosition.x - pivot.x,
                                                 0,
                                                 targetPosition.z - pivot.z);
            Quaternion rotation = Quaternion.LookRotation(lookDirection);
            CannonPivot.rotation = rotation;
        }

        if (!_isShooting)
        {
            StartCoroutine(Shoot());
        }
    }
コード例 #4
0
    public GoblinBehaviour SpawnEnemy(Vector3 position)
    {
        GameObject      go     = Instantiate(_prefab, position, Quaternion.identity);
        GoblinBehaviour goblin = go.GetComponent <GoblinBehaviour>();

        goblin.Initialize(_enemyData.ObjectName, _enemyData.Speed, _enemyData.Health, _destination);
        _spawnCount++;

        return(goblin);
    }
コード例 #5
0
 public override void LateSetState()
 {
     ObjectsTimelineManager _t = GameManager.Instance.GetManager<ObjectsTimelineManager>();
     if (_t != null)
     {
         GameObject target = _t.GetGameObjectByGlobalId(_targetGlobalId);
         if (target != null)
         {
             _enemy = target.GetComponent<GoblinBehaviour>();
             _targetTransform = target.transform;
         }
     }
 }
コード例 #6
0
ファイル: CannonBehaviour.cs プロジェクト: simple-ned/TD_Test
    private void OnTriggerExit(Collider other)
    {
        GoblinBehaviour enemy = other.GetComponent <GoblinBehaviour>();

        if (enemy != null)
        {
            _enemies.Remove(enemy);

            if (_currentEnemyComponent == enemy)
            {
                _currentEnemyComponent = null;
            }
        }
    }
コード例 #7
0
ファイル: CannonBehaviour.cs プロジェクト: simple-ned/TD_Test
    private GoblinBehaviour ChooseTarget()
    {
        if (_enemies.Count > 0)
        {
            // Почистим коллекцию от нулевых ссылок. Бывает, что гоблин может исчезнуть, не покинув триггер башни
            // Особенно если триггер захватывает зону замка, где исчезадют гоблины
            for (int i = _enemies.Count - 1; i >= 0; i--)
            {
                if (_enemies[i] == null)
                {
                    _enemies.RemoveAt(i);
                }
            }

            _currentEnemyComponent = _enemies[0];
            return(_enemies[0]);
        }

        return(null);
    }
コード例 #8
0
 public void Initialize(GoblinBehaviour enemy, Transform target, int damage)
 {
     _targetTransform = target;
     _damage = damage;
     _enemy = enemy;
 }
コード例 #9
0
    void OnTriggerEnter(Collider other)
    {
        //on colliding destroy rocks after its life time
        Destroy(gameObject, rockLifeTime);

        if (other.gameObject.tag.Equals("Destructible"))
        //if (other.tag == "Enemy")
        {
            //play on hit sound
            FindObjectOfType <PlayerSFX>().PlayOnHit();

            dest = other.GetComponent <DestructibleSpawn>();
            dest.spawnRandomItem();
            Destroy(other.gameObject);
        }
        else if (other.gameObject.tag.Equals("Goblin"))//goblin should play death animation
        {
            //play on hit sound
            FindObjectOfType <PlayerSFX>().PlayOnHit();

            goblin = other.gameObject.GetComponent <GoblinBehaviour>();
            goblin.IncrementHits(rockStrength);           //2 hits to kill goblin
            GetComponent <BoxCollider>().enabled = false; //Removing hit collider so it only hits target once.
        }
        else if (other.gameObject.tag.Equals("Pirate"))
        {
            //play on hit sound
            FindObjectOfType <PlayerSFX>().PlayOnHit();

            pirate = other.gameObject.GetComponent <PirateBehaviour>();
            pirate.IncrementHits(rockStrength);//3 hits to kill pirate
            GetComponent <BoxCollider>().enabled = false;
        }
        else if (other.gameObject.tag.Equals("Parrot"))
        {
            //play on hit sound
            FindObjectOfType <PlayerSFX>().PlayOnHit();

            parrot = other.gameObject.GetComponent <ParrotBehaviour>();
            parrot.IncrementHits(rockStrength);//1 hit to kill parrot
            GetComponent <BoxCollider>().enabled = false;
        }
        else if (other.gameObject.tag.Equals("Bat"))
        {
            //play on hit sound
            FindObjectOfType <PlayerSFX>().PlayOnHit();

            bat = other.gameObject.GetComponent <BatBehaviour>();
            bat.IncrementHits(rockStrength);//1 hit to kill bat
            GetComponent <BoxCollider>().enabled = false;
        }
        else if (other.gameObject.tag.Equals("Kraken"))
        {
            other.gameObject.GetComponent <KrakenBehaviour>().IncrementHits(rockStrength);
            GetComponent <BoxCollider>().enabled = false;
        }
        else if (other.gameObject.tag == "Bomb")
        {
            Destroy(other.gameObject);
        }
        //need to check for hits in goblin/ specific enemy instead - as following line disables above behaviors (eg. no longer destroy enemy on hit)
        //GetComponent<BoxCollider>().enabled = false; //Removing hit collider so it only hits target once.
    }