Beispiel #1
0
        /// <summary>
        /// Updates and interpolates all the actors in the scene.
        /// </summary>
        public void Simulate(float dt)
        {
            if (OnSimulationStart != null)
            {
                OnSimulationStart(dt);
            }

            for (int i = 0; i < kinematicPlatforms.Count; i++)
            {
                KinematicPlatform kinematicPlatform = kinematicPlatforms[i];

                if (!kinematicPlatform.enabled)
                {
                    continue;
                }

                kinematicPlatform.UpdateKinematicActor(dt);
            }

            if (OnCharacterSimulationStart != null)
            {
                OnCharacterSimulationStart(dt);
            }

            for (int i = 0; i < characterActors.Count; i++)
            {
                CharacterActor characterActor = characterActors[i];


                if (!characterActor.enabled)
                {
                    continue;
                }

                characterActor.UpdateCharacter(dt);
            }

            if (OnCharacterSimulationEnd != null)
            {
                OnCharacterSimulationEnd(dt);
            }



            // Interpolation ──────────────────────────────────────────────────────────────────────────────────────────────────────────────────

            if (useInterpolation)
            {
                for (int i = 0; i < kinematicPlatforms.Count; i++)
                {
                    KinematicPlatform kinematicPlatform = kinematicPlatforms[i];

                    if (!kinematicPlatform.enabled)
                    {
                        continue;
                    }

                    InterpolateRigidbodyComponent(kinematicPlatform.RigidbodyComponent);
                }

                // for( int i = 0 ; i < characterActors.Count ; i++ )
                // {
                //     CharacterActor characterActor = characterActors[i];

                //     if( !characterActor.enabled || !characterActor.IsKinematic )
                //         continue;

                //     InterpolateRigidbodyComponent( characterActor.RigidbodyComponent );
                // }
            }


            if (OnSimulationEnd != null)
            {
                OnSimulationEnd(dt);
            }
        }