Merge branch 'ubitwork' into avination
commit
c5e73c0cb8
|
@ -294,6 +294,34 @@ namespace OpenSim.Region.Physics.Manager
|
||||||
public abstract Vector3 GeometricCenter { get; }
|
public abstract Vector3 GeometricCenter { get; }
|
||||||
public abstract Vector3 CenterOfMass { get; }
|
public abstract Vector3 CenterOfMass { get; }
|
||||||
|
|
||||||
|
public virtual Vector3 OOBsize
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
Vector3 s=Size;
|
||||||
|
s.X *=0.5f;
|
||||||
|
s.Y *=0.5f;
|
||||||
|
s.Z *=0.5f;
|
||||||
|
return s;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public virtual Vector3 OOBoffset
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
return Vector3.Zero;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public virtual float OOBRadiusSQ
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
return Size.LengthSquared() * 0.25f; // ((0.5^2)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Velocity of this actor.
|
/// Velocity of this actor.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
@ -429,7 +457,6 @@ namespace OpenSim.Region.Physics.Manager
|
||||||
|
|
||||||
public override void VehicleFloatParam(int param, float value)
|
public override void VehicleFloatParam(int param, float value)
|
||||||
{
|
{
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public override void VehicleVectorParam(int param, Vector3 value)
|
public override void VehicleVectorParam(int param, Vector3 value)
|
||||||
|
|
|
@ -522,29 +522,6 @@ namespace OpenSim.Region.Physics.OdePlugin
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//UBit mess
|
|
||||||
/* for later use
|
|
||||||
public override Vector3 PrimOOBsize
|
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
Vector3 s=Size;
|
|
||||||
s.X *=0.5f;
|
|
||||||
s.Y *=0.5f;
|
|
||||||
s.Z *=0.5f;
|
|
||||||
return s;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public override Vector3 PrimOOBoffset
|
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
return Vector3.Zero;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
|
|
||||||
public override PrimitiveBaseShape Shape
|
public override PrimitiveBaseShape Shape
|
||||||
{
|
{
|
||||||
set { return; }
|
set { return; }
|
||||||
|
|
|
@ -504,8 +504,8 @@ namespace OpenSim.Region.Physics.OdePlugin
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
/*
|
|
||||||
public override Vector3 PrimOOBsize
|
public override Vector3 OOBsize
|
||||||
{
|
{
|
||||||
get
|
get
|
||||||
{
|
{
|
||||||
|
@ -513,7 +513,7 @@ namespace OpenSim.Region.Physics.OdePlugin
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public override Vector3 PrimOOBoffset
|
public override Vector3 OOBoffset
|
||||||
{
|
{
|
||||||
get
|
get
|
||||||
{
|
{
|
||||||
|
@ -521,14 +521,14 @@ namespace OpenSim.Region.Physics.OdePlugin
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public override float PrimOOBRadiusSQ
|
public override float OOBRadiusSQ
|
||||||
{
|
{
|
||||||
get
|
get
|
||||||
{
|
{
|
||||||
return primOOBradiusSQ;
|
return primOOBradiusSQ;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
*/
|
|
||||||
public override PrimitiveBaseShape Shape
|
public override PrimitiveBaseShape Shape
|
||||||
{
|
{
|
||||||
set
|
set
|
||||||
|
@ -1482,6 +1482,8 @@ namespace OpenSim.Region.Physics.OdePlugin
|
||||||
if (!haveMesh)
|
if (!haveMesh)
|
||||||
m_NoColide = true;
|
m_NoColide = true;
|
||||||
}
|
}
|
||||||
|
else if(_pbs.SculptEntry)
|
||||||
|
m_NoColide = true; // also don't colide if is a sculp or mesh and meshing is off
|
||||||
|
|
||||||
if (!haveMesh)
|
if (!haveMesh)
|
||||||
{
|
{
|
||||||
|
@ -2562,10 +2564,10 @@ namespace OpenSim.Region.Physics.OdePlugin
|
||||||
{
|
{
|
||||||
d.Quaternion qtmp;
|
d.Quaternion qtmp;
|
||||||
d.GeomCopyQuaternion(prim_geom, out qtmp);
|
d.GeomCopyQuaternion(prim_geom, out qtmp);
|
||||||
_orientation.W = qtmp.W;
|
|
||||||
_orientation.X = qtmp.X;
|
_orientation.X = qtmp.X;
|
||||||
_orientation.Y = qtmp.Y;
|
_orientation.Y = qtmp.Y;
|
||||||
_orientation.Z = qtmp.Z;
|
_orientation.Z = qtmp.Z;
|
||||||
|
_orientation.W = qtmp.W;
|
||||||
|
|
||||||
d.Vector3 lpos = d.GeomGetPosition(prim_geom);
|
d.Vector3 lpos = d.GeomGetPosition(prim_geom);
|
||||||
_position.X = lpos.X;
|
_position.X = lpos.X;
|
||||||
|
|
|
@ -1005,19 +1005,85 @@ namespace OpenSim.Region.Physics.OdePlugin
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
|
||||||
|
{
|
||||||
|
|
||||||
|
if (AvanormOverride)
|
||||||
|
{
|
||||||
|
if (curContact.depth > 0.3f)
|
||||||
{
|
{
|
||||||
if (dop1foot && (p1.Position.Z - curContact.pos.Z) > (p1.Size.Z - avCapRadius) * 0.5f)
|
if (dop1foot && (p1.Position.Z - curContact.pos.Z) > (p1.Size.Z - avCapRadius) * 0.5f)
|
||||||
p1.IsColliding = true;
|
p1.IsColliding = true;
|
||||||
if (dop2foot && (p2.Position.Z - curContact.pos.Z) > (p2.Size.Z - avCapRadius) * 0.5f)
|
if (dop2foot && (p2.Position.Z - curContact.pos.Z) > (p2.Size.Z - avCapRadius) * 0.5f)
|
||||||
p2.IsColliding = true;
|
p2.IsColliding = true;
|
||||||
|
|
||||||
if (AvanormOverride && curContact.depth > 0.3f)
|
|
||||||
{
|
|
||||||
curContact.normal.X = normoverride.X;
|
curContact.normal.X = normoverride.X;
|
||||||
curContact.normal.Y = normoverride.Y;
|
curContact.normal.Y = normoverride.Y;
|
||||||
curContact.normal.Z = normoverride.Z;
|
curContact.normal.Z = normoverride.Z;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (dop1foot)
|
||||||
|
{
|
||||||
|
float sz = p1.Size.Z;
|
||||||
|
Vector3 vtmp = p1.Position;
|
||||||
|
float ppos = curContact.pos.Z - vtmp.Z + (sz - avCapRadius) * 0.5f;
|
||||||
|
if (ppos > 0f)
|
||||||
|
{
|
||||||
|
if (!p1.Flying)
|
||||||
|
{
|
||||||
|
d.AABB aabb;
|
||||||
|
d.GeomGetAABB(g2, out aabb);
|
||||||
|
float tmp = vtmp.Z - sz * .25f;
|
||||||
|
|
||||||
|
if (aabb.MaxZ < tmp)
|
||||||
|
{
|
||||||
|
vtmp.X = curContact.pos.X - vtmp.X;
|
||||||
|
vtmp.Y = curContact.pos.Y - vtmp.Y;
|
||||||
|
vtmp.Z = -0.2f;
|
||||||
|
vtmp.Normalize();
|
||||||
|
curContact.normal.X = vtmp.X;
|
||||||
|
curContact.normal.Y = vtmp.Y;
|
||||||
|
curContact.normal.Z = vtmp.Z;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
p1.IsColliding = true;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
if (dop2foot)
|
||||||
|
{
|
||||||
|
float sz = p2.Size.Z;
|
||||||
|
Vector3 vtmp = p2.Position;
|
||||||
|
float ppos = curContact.pos.Z - vtmp.Z + (sz - avCapRadius) * 0.5f;
|
||||||
|
if (ppos > 0f)
|
||||||
|
{
|
||||||
|
if (!p2.Flying)
|
||||||
|
{
|
||||||
|
d.AABB aabb;
|
||||||
|
d.GeomGetAABB(g1, out aabb);
|
||||||
|
float tmp = vtmp.Z - sz * .25f;
|
||||||
|
|
||||||
|
if (aabb.MaxZ < tmp)
|
||||||
|
{
|
||||||
|
vtmp.X = curContact.pos.X - vtmp.X;
|
||||||
|
vtmp.Y = curContact.pos.Y - vtmp.Y;
|
||||||
|
vtmp.Z = -0.2f;
|
||||||
|
vtmp.Normalize();
|
||||||
|
curContact.normal.X = vtmp.X;
|
||||||
|
curContact.normal.Y = vtmp.Y;
|
||||||
|
curContact.normal.Z = vtmp.Z;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
p2.IsColliding = true;
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
Joint = CreateContacJoint(ref curContact, mu, bounce, cfm, erpscale, dscale);
|
Joint = CreateContacJoint(ref curContact, mu, bounce, cfm, erpscale, dscale);
|
||||||
d.JointAttach(Joint, b1, b2);
|
d.JointAttach(Joint, b1, b2);
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue