Experimental change of PhysicsVector to Vector3. Untested

This commit is contained in:
John Hurliman
2009-10-25 23:16:12 -07:00
parent b6651ce790
commit d199767e69
32 changed files with 867 additions and 879 deletions

View File

@@ -56,7 +56,7 @@ namespace OpenSim.Region.Physics.POSPlugin
{
}
public override PhysicsActor AddAvatar(string avName, PhysicsVector position, PhysicsVector size, bool isFlying)
public override PhysicsActor AddAvatar(string avName, Vector3 position, Vector3 size, bool isFlying)
{
POSCharacter act = new POSCharacter();
act.Position = position;
@@ -84,20 +84,20 @@ namespace OpenSim.Region.Physics.POSPlugin
}
/*
public override PhysicsActor AddPrim(PhysicsVector position, PhysicsVector size, Quaternion rotation)
public override PhysicsActor AddPrim(Vector3 position, Vector3 size, Quaternion rotation)
{
return null;
}
*/
public override PhysicsActor AddPrimShape(string primName, PrimitiveBaseShape pbs, PhysicsVector position,
PhysicsVector size, Quaternion rotation)
public override PhysicsActor AddPrimShape(string primName, PrimitiveBaseShape pbs, Vector3 position,
Vector3 size, Quaternion rotation)
{
return AddPrimShape(primName, pbs, position, size, rotation, false);
}
public override PhysicsActor AddPrimShape(string primName, PrimitiveBaseShape pbs, PhysicsVector position,
PhysicsVector size, Quaternion rotation, bool isPhysical)
public override PhysicsActor AddPrimShape(string primName, PrimitiveBaseShape pbs, Vector3 position,
Vector3 size, Quaternion rotation, bool isPhysical)
{
POSPrim prim = new POSPrim();
prim.Position = position;
@@ -152,23 +152,25 @@ namespace OpenSim.Region.Physics.POSPlugin
character._target_velocity.Z += gravity * timeStep;
}
character.Position.X += character._target_velocity.X * timeStep;
character.Position.Y += character._target_velocity.Y * timeStep;
Vector3 characterPosition = character.Position;
character.Position.X = Util.Clamp(character.Position.X, 0.01f, Constants.RegionSize - 0.01f);
character.Position.Y = Util.Clamp(character.Position.Y, 0.01f, Constants.RegionSize - 0.01f);
characterPosition.X += character._target_velocity.X * timeStep;
characterPosition.Y += character._target_velocity.Y * timeStep;
characterPosition.X = Util.Clamp(character.Position.X, 0.01f, Constants.RegionSize - 0.01f);
characterPosition.Y = Util.Clamp(character.Position.Y, 0.01f, Constants.RegionSize - 0.01f);
bool forcedZ = false;
float terrainheight = _heightMap[(int)character.Position.Y * Constants.RegionSize + (int)character.Position.X];
if (character.Position.Z + (character._target_velocity.Z * timeStep) < terrainheight + 2)
{
character.Position.Z = terrainheight + character.Size.Z;
characterPosition.Z = terrainheight + character.Size.Z;
forcedZ = true;
}
else
{
character.Position.Z += character._target_velocity.Z*timeStep;
characterPosition.Z += character._target_velocity.Z*timeStep;
}
/// this is it -- the magic you've all been waiting for! Ladies and gentlemen --
@@ -177,29 +179,29 @@ namespace OpenSim.Region.Physics.POSPlugin
if (isCollidingWithPrim(character))
{
character.Position.Z = oldposZ; // first try Z axis
characterPosition.Z = oldposZ; // first try Z axis
if (isCollidingWithPrim(character))
{
character.Position.Z = oldposZ + character.Size.Z / 4.4f; // try harder
characterPosition.Z = oldposZ + character.Size.Z / 4.4f; // try harder
if (isCollidingWithPrim(character))
{
character.Position.Z = oldposZ + character.Size.Z / 2.2f; // try very hard
characterPosition.Z = oldposZ + character.Size.Z / 2.2f; // try very hard
if (isCollidingWithPrim(character))
{
character.Position.X = oldposX;
character.Position.Y = oldposY;
character.Position.Z = oldposZ;
characterPosition.X = oldposX;
characterPosition.Y = oldposY;
characterPosition.Z = oldposZ;
character.Position.X += character._target_velocity.X * timeStep;
characterPosition.X += character._target_velocity.X * timeStep;
if (isCollidingWithPrim(character))
{
character.Position.X = oldposX;
characterPosition.X = oldposX;
}
character.Position.Y += character._target_velocity.Y * timeStep;
characterPosition.Y += character._target_velocity.Y * timeStep;
if (isCollidingWithPrim(character))
{
character.Position.Y = oldposY;
characterPosition.Y = oldposY;
}
}
else
@@ -218,8 +220,10 @@ namespace OpenSim.Region.Physics.POSPlugin
}
}
character.Position.X = Util.Clamp(character.Position.X, 0.01f, Constants.RegionSize - 0.01f);
character.Position.Y = Util.Clamp(character.Position.Y, 0.01f, Constants.RegionSize - 0.01f);
characterPosition.X = Util.Clamp(character.Position.X, 0.01f, Constants.RegionSize - 0.01f);
characterPosition.Y = Util.Clamp(character.Position.Y, 0.01f, Constants.RegionSize - 0.01f);
character.Position = characterPosition;
character._velocity.X = (character.Position.X - oldposX)/timeStep;
character._velocity.Y = (character.Position.Y - oldposY)/timeStep;