/// <summary> /// Removes the projectile /// </summary> /// <param name="timeBehind">How long ago this should have happened, in seconds</param> public void OnRemove() { #region Debug #if UNITY_EDITOR if (GameManager.Utility._bulletDrawMode != 0) { GameManager.Utility.DrawX(transform.position, Color.red, radius: GetColliderRadius(), rayDuration); GameManager.Utility.DrawDirectionalCircle(transform.position, velocity, Color.red, radius: GetColliderRadius(), rayDuration, 31); } #endif #endregion if (lastEvent != ProjLastEvent.RangeMet) { CancelRangeTrigger(); } for (int i = 0; i < container.mods.Count; i++) { container.mods[i].OnRemove(); } lastEvent = ProjLastEvent.Removed; source.RemoveProjectile(gameObject); gameObject.SetActive(false); }
public void OnRangeMet() { #region Debug #if UNITY_EDITOR if (!gameObject.activeSelf) { Debug.Log("Projectile called OnRangeMet() for an inactive object *thonk face*"); return; } #endif #endregion lastEvent = ProjLastEvent.RangeMet; ModReturn fate = ModReturn.Pass; for (int i = 0; i < container.mods.Count; i++) { bool boo = container.mods[i].OnRangeMet(out ModReturn _fate); if (fate == ModReturn.Pass) { fate = _fate; } if (boo) { break; } } if (fate == ModReturn.Remove || fate == ModReturn.Pass) { OnRemove(); } }
public void OnHitTarget(Entity other) { lastEvent = ProjLastEvent.HitTarget; ModReturn fate = ModReturn.Pass; bool cancelDamage = false; for (int i = 0; i < container.mods.Count; i++) { bool boo = container.mods[i].OnHitTarget(out ModReturn _fate, out bool _cancelDamage); if (_cancelDamage) { cancelDamage = true; } if (fate == ModReturn.Pass) { fate = _fate; } if (boo) { break; } } if (!cancelDamage) { other.Damage(container.stats.damage, container.stats.element, out float damageDealt, out float damageResisted); } if (fate == ModReturn.Remove || fate == ModReturn.Pass) { OnRemove(); } }
public void OnReflected(ReflectionType type) { Debug.Log("OnReflected()"); lastEvent = ProjLastEvent.Reflected; for (int i = 0; i < container.mods.Count; i++) { container.mods[i].OnReflected(); } container.stats.faction = Entity.GetReflectedFaction(container.stats.faction); switch (type) { case ReflectionType.None: break; case ReflectionType.Random360: velocity = Random.insideUnitCircle * velocity.magnitude; break; case ReflectionType.ReverseDirection: velocity = -velocity; break; case ReflectionType.ReverseDirection90: velocity = Quaternion.Euler(0, 0, Random.Range(-45, 45)) * -velocity; break; case ReflectionType.TargetSource: velocity = (source.transform.position - transform.position).normalized * velocity.magnitude; break; case ReflectionType.TargetSource30: velocity = Quaternion.Euler(0, 0, Random.Range(-15, 15)) * (source.transform.position - transform.position).normalized * velocity.magnitude; break; case ReflectionType.TargetSource90: velocity = Quaternion.Euler(0, 0, Random.Range(-45, 45)) * (source.transform.position - transform.position).normalized * velocity.magnitude; break; default: #region DebugAlerts Debug.LogWarning("Uh oh! Looks wike someone made a Big Ol' fucky-wucky >w<\n Go ywell at StaikyWaiky to impwement these fweatures: " + type); #endregion break; } }
public void Initialize() { lastEvent = ProjLastEvent.Fired; for (int i = 0; i < container.mods.Count; i++) { container.mods[i].Initialize(this); } ApplyGraphics(container.graphics); if (renderer != null) { renderer.enabled = true; } gameObject.SetActive(true); StartMovement(); }
public void OnHitWall() { lastEvent = ProjLastEvent.HitWall; ModReturn fate = ModReturn.Pass; for (int i = 0; i < container.mods.Count; i++) { bool boo = container.mods[i].OnHitWall(out ModReturn _fate); if (fate == ModReturn.Pass) { fate = _fate; } if (boo) { break; } } if (fate == ModReturn.Remove || fate == ModReturn.Pass) { OnRemove(); } }