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

@@ -36,20 +36,17 @@ namespace OpenSim.Region.Physics.POSPlugin
{
public class POSCharacter : PhysicsActor
{
private PhysicsVector _position;
public PhysicsVector _velocity;
public PhysicsVector _target_velocity = PhysicsVector.Zero;
public PhysicsVector _size = PhysicsVector.Zero;
private PhysicsVector _acceleration;
private PhysicsVector m_rotationalVelocity = PhysicsVector.Zero;
private Vector3 _position;
public Vector3 _velocity;
public Vector3 _target_velocity = Vector3.Zero;
public Vector3 _size = Vector3.Zero;
private Vector3 _acceleration;
private Vector3 m_rotationalVelocity = Vector3.Zero;
private bool flying;
private bool isColliding;
public POSCharacter()
{
_velocity = new PhysicsVector();
_position = new PhysicsVector();
_acceleration = new PhysicsVector();
}
public override int PhysicsActorType
@@ -58,7 +55,7 @@ namespace OpenSim.Region.Physics.POSPlugin
set { return; }
}
public override PhysicsVector RotationalVelocity
public override Vector3 RotationalVelocity
{
get { return m_rotationalVelocity; }
set { m_rotationalVelocity = value; }
@@ -137,13 +134,13 @@ namespace OpenSim.Region.Physics.POSPlugin
get { return false; }
}
public override PhysicsVector Position
public override Vector3 Position
{
get { return _position; }
set { _position = value; }
}
public override PhysicsVector Size
public override Vector3 Size
{
get { return _size; }
set
@@ -158,9 +155,9 @@ namespace OpenSim.Region.Physics.POSPlugin
get { return 0f; }
}
public override PhysicsVector Force
public override Vector3 Force
{
get { return PhysicsVector.Zero; }
get { return Vector3.Zero; }
set { return; }
}
@@ -175,7 +172,7 @@ namespace OpenSim.Region.Physics.POSPlugin
}
public override void VehicleVectorParam(int param, PhysicsVector value)
public override void VehicleVectorParam(int param, Vector3 value)
{
}
@@ -190,14 +187,14 @@ namespace OpenSim.Region.Physics.POSPlugin
}
public override PhysicsVector CenterOfMass
public override Vector3 CenterOfMass
{
get { return PhysicsVector.Zero; }
get { return Vector3.Zero; }
}
public override PhysicsVector GeometricCenter
public override Vector3 GeometricCenter
{
get { return PhysicsVector.Zero; }
get { return Vector3.Zero; }
}
public override PrimitiveBaseShape Shape
@@ -205,15 +202,15 @@ namespace OpenSim.Region.Physics.POSPlugin
set { return; }
}
public override PhysicsVector Velocity
public override Vector3 Velocity
{
get { return _velocity; }
set { _target_velocity = value; }
}
public override PhysicsVector Torque
public override Vector3 Torque
{
get { return PhysicsVector.Zero; }
get { return Vector3.Zero; }
set { return; }
}
@@ -229,7 +226,7 @@ namespace OpenSim.Region.Physics.POSPlugin
set { }
}
public override PhysicsVector Acceleration
public override Vector3 Acceleration
{
get { return _acceleration; }
}
@@ -248,24 +245,24 @@ namespace OpenSim.Region.Physics.POSPlugin
{
}
public override void LockAngularMotion(PhysicsVector axis)
public override void LockAngularMotion(Vector3 axis)
{
}
public void SetAcceleration(PhysicsVector accel)
public void SetAcceleration(Vector3 accel)
{
_acceleration = accel;
}
public override void AddForce(PhysicsVector force, bool pushforce)
public override void AddForce(Vector3 force, bool pushforce)
{
}
public override void AddAngularForce(PhysicsVector force, bool pushforce)
public override void AddAngularForce(Vector3 force, bool pushforce)
{
}
public override void SetMomentum(PhysicsVector momentum)
public override void SetMomentum(Vector3 momentum)
{
}
@@ -273,7 +270,7 @@ namespace OpenSim.Region.Physics.POSPlugin
{
}
public override PhysicsVector PIDTarget
public override Vector3 PIDTarget
{
set { return; }
}

View File

@@ -36,19 +36,16 @@ namespace OpenSim.Region.Physics.POSPlugin
{
public class POSPrim : PhysicsActor
{
private PhysicsVector _position;
private PhysicsVector _velocity;
private PhysicsVector _acceleration;
private PhysicsVector _size;
private PhysicsVector m_rotationalVelocity = PhysicsVector.Zero;
private Vector3 _position;
private Vector3 _velocity;
private Vector3 _acceleration;
private Vector3 _size;
private Vector3 m_rotationalVelocity = Vector3.Zero;
private Quaternion _orientation;
private bool iscolliding;
public POSPrim()
{
_velocity = new PhysicsVector();
_position = new PhysicsVector();
_acceleration = new PhysicsVector();
}
public override int PhysicsActorType
@@ -57,7 +54,7 @@ namespace OpenSim.Region.Physics.POSPlugin
set { return; }
}
public override PhysicsVector RotationalVelocity
public override Vector3 RotationalVelocity
{
get { return m_rotationalVelocity; }
set { m_rotationalVelocity = value; }
@@ -98,13 +95,13 @@ namespace OpenSim.Region.Physics.POSPlugin
get { return false; }
}
public override PhysicsVector Position
public override Vector3 Position
{
get { return _position; }
set { _position = value; }
}
public override PhysicsVector Size
public override Vector3 Size
{
get { return _size; }
set { _size = value; }
@@ -115,9 +112,9 @@ namespace OpenSim.Region.Physics.POSPlugin
get { return 0f; }
}
public override PhysicsVector Force
public override Vector3 Force
{
get { return PhysicsVector.Zero; }
get { return Vector3.Zero; }
set { return; }
}
@@ -132,7 +129,7 @@ namespace OpenSim.Region.Physics.POSPlugin
}
public override void VehicleVectorParam(int param, PhysicsVector value)
public override void VehicleVectorParam(int param, Vector3 value)
{
}
@@ -147,14 +144,14 @@ namespace OpenSim.Region.Physics.POSPlugin
}
public override PhysicsVector CenterOfMass
public override Vector3 CenterOfMass
{
get { return PhysicsVector.Zero; }
get { return Vector3.Zero; }
}
public override PhysicsVector GeometricCenter
public override Vector3 GeometricCenter
{
get { return PhysicsVector.Zero; }
get { return Vector3.Zero; }
}
public override PrimitiveBaseShape Shape
@@ -173,7 +170,7 @@ namespace OpenSim.Region.Physics.POSPlugin
set { return; }
}
public override PhysicsVector Velocity
public override Vector3 Velocity
{
get { return _velocity; }
set { _velocity = value; }
@@ -191,7 +188,7 @@ namespace OpenSim.Region.Physics.POSPlugin
set { _orientation = value; }
}
public override PhysicsVector Acceleration
public override Vector3 Acceleration
{
get { return _acceleration; }
}
@@ -202,26 +199,26 @@ namespace OpenSim.Region.Physics.POSPlugin
set { }
}
public void SetAcceleration(PhysicsVector accel)
public void SetAcceleration(Vector3 accel)
{
_acceleration = accel;
}
public override void AddForce(PhysicsVector force, bool pushforce)
public override void AddForce(Vector3 force, bool pushforce)
{
}
public override void AddAngularForce(PhysicsVector force, bool pushforce)
public override void AddAngularForce(Vector3 force, bool pushforce)
{
}
public override PhysicsVector Torque
public override Vector3 Torque
{
get { return PhysicsVector.Zero; }
get { return Vector3.Zero; }
set { return; }
}
public override void SetMomentum(PhysicsVector momentum)
public override void SetMomentum(Vector3 momentum)
{
}
@@ -255,7 +252,7 @@ namespace OpenSim.Region.Physics.POSPlugin
{
}
public override void LockAngularMotion(PhysicsVector axis)
public override void LockAngularMotion(Vector3 axis)
{
}
@@ -268,7 +265,7 @@ namespace OpenSim.Region.Physics.POSPlugin
{
}
public override PhysicsVector PIDTarget
public override Vector3 PIDTarget
{
set { return; }
}

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;