private void FixedUpdate() { physicsInteractionsCounter = 0; for (int i = 0; i < activeContinuousInteractionResults.Length; i++) { IContinuousInteractionResult c = activeContinuousInteractionResults[i]; if (c == null) { continue; } if (!c.IsAlive) { c.Dispose(); activeContinuousInteractionResults[i] = null; activeContinuousInteractionKeys.Remove(c.Key); currentActiveContinuousInteractionCount = Mathf.Clamp(currentActiveContinuousInteractionCount - 1, 0, _activeContinuousInteractions); } else { c.FixedUpdate(); } } }
/// <summary> /// Adds or updates the given continuous interaction result to the active continuous interaction results, if able. /// </summary> /// <param name="impactObject">The impact object the result is being sent from.</param> /// <param name="result">The new continuous interaction result.</param> public void AddOrUpdateContinuousInteractionResult(IImpactObject impactObject, IContinuousInteractionResult result) { IContinuousInteractionResult existing = findContinuousInteractionResult(result.Key); if (existing != null) { existing.KeepAlive(result); result.Dispose(); } else { addContinuousInteractionResult(impactObject, result); } }
private void addContinuousInteractionResult(IImpactObject impactObject, IContinuousInteractionResult continuousInteractionResult) { for (int i = 0; i < activeContinuousInteractionResults.Length; i++) { if (activeContinuousInteractionResults[i] == null) { activeContinuousInteractionResults[i] = continuousInteractionResult; currentActiveContinuousInteractionCount++; activeContinuousInteractionKeys.Add(continuousInteractionResult.Key); continuousInteractionResult.Process(impactObject); return; } } continuousInteractionResult.Dispose(); }
private void OnDestroy() { //Dispose of any active continuous interactions for (int i = 0; i < activeContinuousInteractionResults.Length; i++) { IContinuousInteractionResult c = activeContinuousInteractionResults[i]; if (c != null) { c.Dispose(); } } //Clear the instance //This won't do anything if the active instance is not this ImpactManagerInstance.ClearInstance(this); }