Example #1
0
        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();
                }
            }
        }
Example #2
0
        /// <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);
            }
        }
Example #3
0
        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();
        }
Example #4
0
        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);
        }
Example #5
0
        /// <summary>
        /// Process a continuous interaction using the interaction data, an Impact Material, and an optional Impact Object that the interaction originated from.
        /// </summary>
        /// <param name="interactionData">The interaction data to process.</param>
        /// <param name="impactMaterial">The Impact Material to get interaction results from.</param>
        /// <param name="impactObject">An optional Impact Object that the interaction originated from.</param>
        public void ProcessContinuousInteraction <T>(T interactionData, IImpactMaterial material, IImpactObject impactObject) where T : IInteractionData
        {
            int resultCount = material.GetInteractionResultsNonAlloc(interactionData, InteractionResultBuffer);

            for (int i = 0; i < resultCount; i++)
            {
                IContinuousInteractionResult result = InteractionResultBuffer[i] as IContinuousInteractionResult;

                //result is not a continuous interaction, so simply Process it.
                if (result == null)
                {
                    InteractionResultBuffer[i].Process(impactObject);
                }
                //Otherwise update an existing continuous interaction or add a new one.
                else
                {
                    AddOrUpdateContinuousInteractionResult(impactObject, result);
                }
            }
        }
Example #6
0
        /// <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 static void AddOrUpdateContinuousInteractionResult(IImpactObject impactObject, IContinuousInteractionResult result)
        {
            ImpactManager instance = GetInstance();

            instance.AddOrUpdateContinuousInteractionResult(impactObject, result);
        }