Beispiel #1
0
    public HitAbleInfo GetNearestHitAbles(Vector3 globalPosition, HitAbleType mask, bool useColliderBounds, float maxDistance = -1)
    {
        if (SpawnedHitAbles.Count == 0)
        {
            return(null);
        }

        HitAbleInfo nearest = new HitAbleInfo()
        {
            hitAble = null
        };

        float nearestDistance = -1;

        for (int i = 0; i < SpawnedHitAbles.Count; i++)
        {
            if (!SpawnedHitAbles[i].Transform)
            {
                continue;
            }
            if (!HitAble.CheckForBitInMask(SpawnedHitAbles[i].hitAble.hitAbleType, mask))
            {
                continue;
            }

            float distance = DistanceBetween(globalPosition, SpawnedHitAbles[i].hitAble, useColliderBounds);
            if ((maxDistance > 0 && distance < maxDistance) && (nearestDistance == -1 || distance < nearestDistance))
            {
                nearest          = SpawnedHitAbles[i];
                nearest.distance = distance;
                nearestDistance  = distance;
            }
        }
        return(nearest);
    }
Beispiel #2
0
 public static void TriggerEnemieSpawned(HitAble entity)
 {
     if (EntitySpawned != null)
     {
         EntitySpawned(entity);
     }
 }
Beispiel #3
0
    public HitAbleInfo[] GetPlayersInCircles(Vector3 globalPosition, float radius, bool useColliderBounds, bool sorted = false)
    {
        if (GameManager.Instance.PlayerCount == 0)
        {
            return(new HitAbleInfo[0]);
        }

        List <HitAbleInfo> players = new List <HitAbleInfo>();

        for (int i = 0; i < GameManager.Instance.GetPlayers().Length; i++)
        {
            if (GameManager.Instance.GetPlayers()[i] == null)
            {
                continue;
            }
            HitAble hitAble = GameManager.Instance.GetPlayers()[i];

            float distance = DistanceBetween(globalPosition, hitAble, useColliderBounds);
            if (distance < radius)
            {
                players.Add(new HitAbleInfo()
                {
                    hitAble  = hitAble,
                    distance = distance
                });
            }
        }
        if (sorted)
        {
            players.Sort();
        }
        return(players.ToArray());
    }
Beispiel #4
0
    public GameObject Spawn(SpawnQueueInfo info)
    {
        GameObject go = GameObjectPool.Instance.Spawn(info.poolName, info.position + Vector3.forward * 0.0001f * GameManager.Instance.CurrentSpawnedEntityCount, info.rotation);

        if (!go)
        {
            return(null);
        }

        go.SendMessage("SetPoolName", info.poolName, SendMessageOptions.DontRequireReceiver);

        HitAble script = go.GetComponent <HitAble>();

        if (script)
        {
            SpawnedHitAbles.Add(new HitAbleInfo {
                hitAble = script
            });
        }

        if (info.callBack != null)
        {
            info.callBack(go);
        }

        if (info.countEntity)
        {
            GameManager.Instance.AddEntity();
        }

        return(go);
    }
Beispiel #5
0
    public HitAbleInfo[] GetHitAbleInCircles(Vector3 globalPosition, HitAbleType mask, float radius, bool useColliderBounds, bool sorted = false)
    {
        if (SpawnedHitAbles.Count == 0)
        {
            return(new HitAbleInfo[0]);
        }

        List <HitAbleInfo> enemies = new List <HitAbleInfo>();

        for (int i = 0; i < SpawnedHitAbles.Count; i++)
        {
            if (!SpawnedHitAbles[i].Transform)
            {
                continue;
            }
            if (!HitAble.CheckForBitInMask(SpawnedHitAbles[i].HitAbleType, mask))
            {
                continue;
            }

            float distance = DistanceBetween(globalPosition, SpawnedHitAbles[i].hitAble, useColliderBounds);
            if (distance < radius)
            {
                SpawnedHitAbles[i].distance = distance;
                enemies.Add(SpawnedHitAbles[i]);
            }
        }

        if (sorted)
        {
            enemies.Sort();
        }
        return(enemies.ToArray());
    }
Beispiel #6
0
    public HitAbleInfo GetNearestPlayers(Vector3 globalPosition, bool useColliderBounds, float range = -1)
    {
        if (GameManager.Instance.PlayerCount == 0)
        {
            return(null);
        }

        HitAbleInfo nearest = null;

        float nearestDistance = -1;

        for (int i = 0; i < GameManager.Instance.GetPlayers().Length; i++)
        {
            if (GameManager.Instance.GetPlayers()[i] == null)
            {
                continue;
            }

            HitAble hitAble = GameManager.Instance.GetPlayers()[i];

            float distance = DistanceBetween(globalPosition, hitAble, useColliderBounds);
            if ((range > 0 && distance < range) && (nearestDistance == -1 || distance < nearestDistance))
            {
                if (nearest == null)
                {
                    nearest = new HitAbleInfo();
                }

                nearest.hitAble  = hitAble;
                nearest.distance = distance;
                nearestDistance  = distance;
            }
        }
        return(nearest);
    }
Beispiel #7
0
 public static void TriggerEntityDied(HitAble entity)
 {
     if (EntityDied != null)
     {
         EntityDied(entity);
     }
 }
Beispiel #8
0
 // Use this for initialization
 void Reset()
 {
     target             = null;
     collider2D.enabled = true;
     targetPos          = transform.position;
     exploded           = false;
     LifeTimer          = 0f;
     NewRandomFlyingDirection();
     FindNewTarget();
 }
Beispiel #9
0
 public static bool ContainsHitAble(HitAble hitAble)
 {
     for (int i = 0; i < Instance.SpawnedHitAbles.Count; i++)
     {
         if (Instance.SpawnedHitAbles[i].hitAble == hitAble)
         {
             return(true);
         }
     }
     return(false);
 }
Beispiel #10
0
    public float DistanceBetween(Vector3 position, HitAble target, bool useColliderBounds)
    {
        float distance = 0f;

        if (useColliderBounds)
        {
            distance = GeometryUtils.Distance(position, target.MainCollider);
        }
        else
        {
            distance = Vector3.Distance(target.ColliderCenter, position);
        }
        return(distance);
    }
Beispiel #11
0
 IEnumerator FindNewTarget()
 {
     HitAbleInfo[] enemiesInRange = EntitySpawnManager.Instance.GetHitAbleInCircles(transform.position, HitAbleFindMask, MaxSightRange, true, true);
     for (int i = 0; i < enemiesInRange.Length; i++)
     {
         HitAble enemie = enemiesInRange[i].hitAble;
         if (enemie.ColliderIsOneOfYours(Physics2D.Raycast(transform.position, (enemie.MainCollider.bounds.center - transform.position), MaxSightRange, sightLayer).collider))
         {
             target = enemie;
             break;
         }
     }
     yield return(null);
 }
Beispiel #12
0
    public void UpdateTarget()
    {
        if (target && !target.TargetTransform)
        {
            target = null;
        }

        FindNewTargetTimer += Time.deltaTime;
        UpdateTargetTimer  += Time.deltaTime;
        if (UpdateTargetTimer >= UpdateTargetTime)
        {
            if (target)
            {
                if (!target.ColliderIsOneOfYours(Physics2D.Raycast(transform.position, (target.ColliderCenter - transform.position), MaxSightRange, sightLayer).collider))
                {
                    //target out of sight;
                    target = null;
                }
            }
            if (!target)
            {
                if (FindNewTargetTimer >= FindNewTargetTime)
                {
                    StartCoroutine(FindNewTarget());
                    FindNewTargetTime = 0f;
                }
            }
            UpdateTargetTimer = 0f;
        }

        if (target)
        {
            targetPos = target.ColliderCenter;
            UpdateRotation();
        }
        else
        {
            UpdateRandomTimer += Time.deltaTime;
            if (UpdateRandomTimer >= UpdateRandomTime)
            {
                UpdateRandomTimer = 0f;
                FindRandomPos();
            }
        }
    }
Beispiel #13
0
    private void Hit(GameObject other, Vector3 position)
    {
        if (other && other.GetComponent <HitAble>())
        {
            if (gameObjectHitted.Contains(other))
            {
                return;
            }

            HitAble target = other.GetComponent <HitAble>();
            target.Damage(new Damage()
            {
                DamageFromAPlayer = true,
                player            = player,
                amount            = damage,
                type  = DamageType.RANGED,
                other = player.transform
            });
            target.Hit(position, rigidbody2D.velocity * Time.fixedDeltaTime, force);

            gameObjectHitted.Add(other);

            AudioEffectController.Instance.PlayOneShot(HitEffect, transform.position);
        }
        else
        {
            EntitySpawnManager.InstantSpawn(hitEffektPoolName, position, Quaternion.identity, countEntity: false);

            EntitySpawnManager.Despawn(poolName, gameObject, false);
            return;
        }


        EntitySpawnManager.InstantSpawn(hitEffektPoolName, position, Quaternion.identity, countEntity: false);

        if (pierceCount >= pierceAmount)
        {
            rigidbody2D.velocity = Vector2.zero;
            GameObjectPool.Instance.Despawn(poolName, gameObject);
        }
        else
        {
            pierceCount++;
        }
    }
Beispiel #14
0
    public void OnEntityDied(HitAble entity)
    {
        if (entity.hitAbleType != HitAbleType.ALIEN)
        {
            return;
        }

        if (Random.value < spawnChance)
        {
            var rnd = Random.value;
            for (int i = 0; i < basePoolNames.Length; i++)
            {
                if (rnd < basePoolNames[i].weight)
                {
                    TrySpawning(basePoolNames[i].poolName, entity.transform.position);
                    return;
                }
                rnd -= basePoolNames[i].weight;
            }
        }
    }
Beispiel #15
0
 public static void RemoveHitAble(HitAble hitAble)
 {
     Instance.RemoveInfo(hitAble.transform);
 }
Beispiel #16
0
 public static void AddHitAble(HitAble hitAble)
 {
     Instance.SpawnedHitAbles.Add(new HitAbleInfo {
         hitAble = hitAble
     });
 }
Beispiel #17
0
 public void OnEntityDied(HitAble sender)
 {
     PlayerClass.OnPlayerKilledEntity();
 }