Merge branch 'ubitwork' into avination

avinationmerge
Melanie 2012-05-28 02:19:29 +02:00
commit c5e73c0cb8
4 changed files with 110 additions and 38 deletions

View File

@ -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)

View File

@ -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; }

View File

@ -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;

View File

@ -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);