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); }
public static void TriggerEnemieSpawned(HitAble entity) { if (EntitySpawned != null) { EntitySpawned(entity); } }
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()); }
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); }
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()); }
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); }
public static void TriggerEntityDied(HitAble entity) { if (EntityDied != null) { EntityDied(entity); } }
// Use this for initialization void Reset() { target = null; collider2D.enabled = true; targetPos = transform.position; exploded = false; LifeTimer = 0f; NewRandomFlyingDirection(); FindNewTarget(); }
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); }
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); }
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); }
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(); } } }
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++; } }
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; } } }
public static void RemoveHitAble(HitAble hitAble) { Instance.RemoveInfo(hitAble.transform); }
public static void AddHitAble(HitAble hitAble) { Instance.SpawnedHitAbles.Add(new HitAbleInfo { hitAble = hitAble }); }
public void OnEntityDied(HitAble sender) { PlayerClass.OnPlayerKilledEntity(); }