Beispiel #1
0
    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);
    }
Beispiel #2
0
    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);
     }
 }
Beispiel #4
0
    private void OnTriggerEnter2D(Collider2D info)
    {
        EnemyControllerBase enemy = info.GetComponent <EnemyControllerBase>();

        if (enemy != null)
        {
            enemy.TakeDamage(_damage, DamageType.Projectile);
        }
        Destroy(gameObject);
    }
Beispiel #5
0
    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);
    }
Beispiel #7
0
    IEnumerator RecycleIEnu(EnemyControllerBase controllerBase)
    {
        yield return(new  WaitForSeconds(3f));

        _boomEnemysPool.Recycle(controllerBase);
        if (_boomEnemys.Count > 0)
        {
            _boomEnemys.Dequeue();
        }
        controllerBase.gameObject.SetActive(false);
    }
Beispiel #8
0
 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);
         }
     }
 }
Beispiel #9
0
    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();
    }
Beispiel #10
0
    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);
    }
Beispiel #11
0
    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);
    }
Beispiel #12
0
    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();
 }
Beispiel #14
0
 public EnemyFSMSystem(EnemyControllerBase character)
 {
     this.character = character;
     _states        = new List <EnemyFSMState>();
 }