mirror of
https://github.com/opensim/opensim.git
synced 2026-08-09 02:36:00 +08:00
Experimental change of PhysicsVector to Vector3. Untested
This commit is contained in:
@@ -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; }
|
||||
}
|
||||
|
||||
@@ -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; }
|
||||
}
|
||||
|
||||
@@ -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