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>()); } } }
private void OnTriggerEnter(Collider other) { GoblinBehaviour enemy = other.GetComponent <GoblinBehaviour>(); if (enemy != null && !_enemies.Contains(enemy)) { _enemies.Add(enemy); } }
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()); } }
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); }
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; } } }
private void OnTriggerExit(Collider other) { GoblinBehaviour enemy = other.GetComponent <GoblinBehaviour>(); if (enemy != null) { _enemies.Remove(enemy); if (_currentEnemyComponent == enemy) { _currentEnemyComponent = null; } } }
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); }
public void Initialize(GoblinBehaviour enemy, Transform target, int damage) { _targetTransform = target; _damage = damage; _enemy = enemy; }
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. }