All pastes #595844 Raw Edit

basic physics flying patch

public text v1 · immutable
#595844 ·published 2007-06-29 18:03 UTC
rendered paste body
Index: BasicPhysicsPlugin.cs
===================================================================
--- BasicPhysicsPlugin.cs	(revision 1122)
+++ BasicPhysicsPlugin.cs	(working copy)
@@ -101,22 +101,29 @@
 		{
 			foreach (BasicActor actor in _actors)
 			{
-				actor.Position.X = actor.Position.X + (actor.Velocity.X * timeStep);
-				actor.Position.Y = actor.Position.Y + (actor.Velocity.Y * timeStep);
-				actor.Position.Z = actor.Position.Z + (actor.Velocity.Z * timeStep);
-				/*if(actor.Flying)
-				{
-					actor.Position.Z = actor.Position.Z + (actor.Velocity.Z * timeStep);
-				}
-				else
-				{
-					actor.Position.Z = actor.Position.Z + ((-9.8f + actor.Velocity.Z) * timeStep);
-				}
-				if(actor.Position.Z < (_heightMap[(int)actor.Position.Y * 256 + (int)actor.Position.X]+1))
-				{*/
                 if ((actor.Position.Y > 0 && actor.Position.Y < 256) && (actor.Position.X > 0 && actor.Position.X < 256))
                 {
-                    actor.Position.Z = _heightMap[(int)actor.Position.Y * 256 + (int)actor.Position.X] + 1;
+                    float height = _heightMap[(int)actor.Position.Y * 256 + (int)actor.Position.X] + 1.2f;
+                    actor.Position.X = actor.Position.X + (actor.Velocity.X * timeStep);
+                    actor.Position.Y = actor.Position.Y + (actor.Velocity.Y * timeStep);
+                    if (actor.Flying)
+                    {
+                        if (actor.Position.Z + (actor.Velocity.Z * timeStep) < 
+                            _heightMap[(int)actor.Position.Y * 256 + (int)actor.Position.X] + 2)
+                        {
+                            actor.Position.Z = height;
+                            actor.Velocity.Z = 0;
+                        }
+                        else
+                        {
+                            actor.Position.Z = actor.Position.Z + (actor.Velocity.Z * timeStep);
+                        }
+                    }
+                    else
+                    {
+                        actor.Position.Z = height;
+                        actor.Velocity.Z = 0;
+                    }
                 }
                 else
                 {
@@ -167,7 +174,7 @@
 					actor.Position.Y = 255;
 					actor.Velocity.X = 0;
 				}*/
-			}
+            }
 		}
 		
 		public override void GetResults()
@@ -211,7 +218,7 @@
 		{
 			get
 			{
-				return false;
+                return flying;
 			}
 			set
 			{