Пример #1
0
        public bool StepSimulation(float timeStep)
        {
            simTimeStep += timeStep;

            if (simThread != null)
            {
                return(false);
            }

            simThread = new Thread(new ParameterizedThreadStart(delegate(object t)
            {
                float s = (float)t;
                if (s > 1.0f / 60)
                {
                    s = 1.0f / 60;
                }

                bulletWorld.StepSimulation(s);

                IrrlichtLime.Core.Matrix m = new IrrlichtLime.Core.Matrix();
                AlignedCollisionObjectArray collObjects = bulletWorld.CollisionObjectArray;
                for (int i = collObjects.Count - 1; i >= 0; i--)
                {
                    CollisionObject collObject = collObjects[i];
                    if (collObject.IsStaticObject || !collObject.IsActive)
                    {
                        continue;
                    }

                    m.SetElementArray(collObject.WorldTransform.ToArray());

                    SceneNode n = collObject.UserObject as SceneNode;
                    n.Position  = m.Translation;
                    n.Rotation  = m.Rotation;

                    if (m.Translation.Y < -40000)
                    {
                        n.SceneManager.AddToDeletionQueue(n);
                        bulletWorld.RemoveCollisionObject(collObject);
                        collObject.Dispose();
                    }
                }

                simThread = null;
            }));

            simThread.Start(simTimeStep);
            simTimeStep = 0;

            return(true);
        }
Пример #2
0
		public bool StepSimulation(float timeStep)
		{
			simTimeStep += timeStep;

			if (simThread != null)
				return false;

			simThread = new System.Threading.Thread(new ParameterizedThreadStart(delegate(object t)
			{
				float s = (float)t;
				if (s > 1.0f / 60)
					s = 1.0f / 60;

				bulletWorld.StepSimulation(s);

				IrrlichtLime.Core.Matrix m = new IrrlichtLime.Core.Matrix();
				AlignedCollisionObjectArray collObjects = bulletWorld.CollisionObjectArray;
				for (int i = collObjects.Count - 1; i >= 0; i--)
				{
					CollisionObject collObject = collObjects[i];
					if (collObject.IsStaticObject || !collObject.IsActive)
						continue;

					m.SetElementArray(collObject.WorldTransform.ToArray());

					SceneNode n = collObject.UserObject as SceneNode;
					n.Position = m.Translation;
					n.Rotation = m.Rotation;

					if (m.Translation.Y < -40000)
					{
						n.SceneManager.AddToDeletionQueue(n);
						bulletWorld.RemoveCollisionObject(collObject);
						collObject.Dispose();
					}
				}

				simThread = null;
			}));

			simThread.Start(simTimeStep);
			simTimeStep = 0;

			return true;
		}