void OnCollisionEnter(Collision collision) { if (isMonsterProjectile) { _controllerBase = source.GetComponent <EnemyControllerBase>(); _damage = _controllerBase.atkDamage; } else { _damage = source.GetComponent <Weapon>().damage; } if ((colliderLayerMask & (int)Mathf.Pow(2, collision.gameObject .layer)) != Mathf.Pow(2, collision.gameObject.layer)) { return; } if (isMonsterProjectile) { if (_controllerBase.GetCurrentExplosion() == null) { _controllerBase.AddCurrentHaveExplosion(Instantiate(explosionPrefab, collision.contacts[0].point, Quaternion.FromToRotation(Vector3.up, collision .contacts[0].normal))); _controllerBase.GetCurrentExplosion() .GetComponent <Explosion>().isMonsterExplosion = true; } _controllerBase.GetCurrentExplosion().transform.position = collision.contacts[0].point; _controllerBase.GetCurrentExplosion().transform.rotation = Quaternion.LookRotation(collision.contacts[0].normal); _controllerBase.GetCurrentExplosion().SetActive(true); } else { Instantiate(explosionPrefab, collision.contacts[0].point, Quaternion.FromToRotation(Vector3.up, collision .contacts[0].normal)); } _colliders = Physics.OverlapSphere(transform.position, explosionRadius, colliderLayerMask); foreach (Collider hit in _colliders) { if (hit.GetComponent <Damageable>() == null) { continue; } Rigidbody rb = hit.GetComponent <Rigidbody> (); if (rb != null) { rb.AddExplosionForce(explosionPower, transform.position, explosionRadius, 3.0f); } Damageable damageable = hit.GetComponentInParent <Damageable>(); if (damageable != null) { damageable.GetDamage(_damage, source); } } Destroy(this.gameObject); }
public DroneEnvironmentKnowledge(Transform botTransform, List <EnemyControllerBase> enemiesInRange, EnemyControllerBase huntingEnemy, DroneConfiguration droneConfiguration) { BotTransform = botTransform; EnemiesInRange = enemiesInRange; HuntingEnemy = huntingEnemy; DroneConfiguration = droneConfiguration; }
public void Atack() { Collider2D[] enemies = Physics2D.OverlapCircleAll(strikePoint.position, atackRange, _enemies); for (int i = 0; i < enemies.Length; i++) { EnemyControllerBase enemy = enemies[i].GetComponent <EnemyControllerBase>(); enemy.TakeDamage(damage); } }
private void OnTriggerEnter2D(Collider2D info) { EnemyControllerBase enemy = info.GetComponent <EnemyControllerBase>(); if (enemy != null) { enemy.TakeDamage(_damage, DamageType.Projectile); } Destroy(gameObject); }
private void PowerAttack() { Collider2D[] enemies = Physics2D.OverlapCircleAll(_PowerAttackPoint.position, _PowerAttackRange, _enemies); for (int i = 0; i < enemies.Length; i++) { EnemyControllerBase enemy = enemies[i].GetComponent <EnemyControllerBase>(); enemy.TakeDamage(_Pdamage, DamageType.PowerStrike); } }
private void OnCollisionEnter2D(Collision2D collision) { EnemyControllerBase enemy = collision.collider.GetComponent <EnemyControllerBase>(); if (enemy == null || damagedEnemies.Contains(enemy)) { return; } enemy.TakeDamage(powerStrikeDamage); damagedEnemies.Add(enemy); }
IEnumerator RecycleIEnu(EnemyControllerBase controllerBase) { yield return(new WaitForSeconds(3f)); _boomEnemysPool.Recycle(controllerBase); if (_boomEnemys.Count > 0) { _boomEnemys.Dequeue(); } controllerBase.gameObject.SetActive(false); }
private void Strike() { Collider2D[] enemies = Physics2D.OverlapCircleAll(_strikePoint.position, _strikeRange, _enemies); for (int i = 0; i < enemies.Length; i++) { EnemyControllerBase enemy = enemies[i].GetComponent <EnemyControllerBase>(); if (enemy != null) { enemy.TakeDamage(_damage); } } }
public void AllocateMonster() { EnemyControllerBase temp = _boomEnemysPool.Allocate(); temp.transform.position = currentInstantiatePos.position + new Vector3( UnityEngine.Random.Range(-3, 4), 0, UnityEngine.Random.Range(-3, 4)); if (!_boomEnemys.Contains(temp)) { _boomEnemys.Enqueue(temp); } temp.gameObject.SetActive(true); temp.Respawn(); }
private void OnCollisionEnter2D(Collision2D collision) { if (!_strikeCollider.enabled) { return; } EnemyControllerBase enemy = collision.collider.GetComponent <EnemyControllerBase>(); if (enemy == null || _damagedEnemies.Contains(enemy)) { return; } enemy.TakeDamage(_powerStrikeDamage, DamageType.PowerStrike); _damagedEnemies.Add(enemy); }
EnemyControllerBase FindNearestEnemy(DroneEnvironmentKnowledge knowledge) { float nearestDistance = float.MaxValue; EnemyControllerBase nearestEnemy = null; for (int i = 0; i < knowledge.EnemiesInRange.Count; i++) { float distance = (knowledge.EnemiesInRange[i].Position - knowledge.BotTransform.position).sqrMagnitude; if (distance < nearestDistance) { nearestDistance = distance; nearestEnemy = knowledge.EnemiesInRange[i]; } } return(nearestEnemy); }
public void Recycle(EnemyControllerBase controllerBase, bool immediatelyDelete = false, bool countEnemyKill = true) { CurrentKillCount++; if (!controllerBase.isDead) { controllerBase.onDied(); } if (controllerBase.isBoomMonster && keepMakeMonster) { AllocateMonster(); } if (countEnemyKill) { _needKillEnemyCount--; } if (_needKillEnemyCount == 0) { //Debug.Log("_needKillEnemyCount==0"); keepMakeMonster = false; } if (!immediatelyDelete) { StartCoroutine(RecycleIEnu(controllerBase)); } else { _boomEnemysPool.Recycle(controllerBase); if (_boomEnemys.Count > 0) { _boomEnemys.Dequeue(); } controllerBase.gameObject.SetActive(false); } }
private string hitStatu = null; //被攻击的状态 void Start() { enemyControllerBase = new EnemyControllerBase(); }
public EnemyFSMSystem(EnemyControllerBase character) { this.character = character; _states = new List <EnemyFSMState>(); }