mirror of
https://github.com/opensim/opensim.git
synced 2026-08-07 17:55:48 +08:00
Experimental change of PhysicsVector to Vector3. Untested
This commit is contained in:
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user