mirror of
https://github.com/opensim/opensim.git
synced 2026-08-09 02:36:00 +08:00
Revolution is on the roll again! :)
Fixes: Undo, T-pose of others on login, modifiedBulletX works again, feet now stand on the ground instead of in the ground, adds checks to CombatModule. Adds: Redo, Land Undo, checks to agentUpdate (so one can not fall off of a region), more vehicle parts. Finishes almost all of LSL (1 function left, 2 events). Direct flames and kudos to Revolution, please Signed-off-by: Melanie <melanie@t-data.com>
This commit is contained in:
@@ -298,7 +298,16 @@ namespace OpenSim.Region.Framework.Scenes
|
||||
{
|
||||
m_scene.CrossPrimGroupIntoNewRegion(val, this, true);
|
||||
}
|
||||
|
||||
if (RootPart.GetStatusSandbox())
|
||||
{
|
||||
if (Util.GetDistanceTo(RootPart.StatusSandboxPos, value) > 10)
|
||||
{
|
||||
RootPart.ScriptSetPhysicsStatus(false);
|
||||
Scene.SimChat(Utils.StringToBytes("Hit Sandbox Limit"),
|
||||
ChatTypeEnum.DebugChannel, 0x7FFFFFFF, RootPart.AbsolutePosition, Name, UUID, false);
|
||||
return;
|
||||
}
|
||||
}
|
||||
lock (m_parts)
|
||||
{
|
||||
foreach (SceneObjectPart part in m_parts.Values)
|
||||
@@ -398,6 +407,34 @@ namespace OpenSim.Region.Framework.Scenes
|
||||
}
|
||||
}
|
||||
|
||||
private SceneObjectPart m_PlaySoundMasterPrim = null;
|
||||
public SceneObjectPart PlaySoundMasterPrim
|
||||
{
|
||||
get { return m_PlaySoundMasterPrim; }
|
||||
set { m_PlaySoundMasterPrim = value; }
|
||||
}
|
||||
|
||||
private List<SceneObjectPart> m_PlaySoundSlavePrims = new List<SceneObjectPart>();
|
||||
public List<SceneObjectPart> PlaySoundSlavePrims
|
||||
{
|
||||
get { return m_LoopSoundSlavePrims; }
|
||||
set { m_LoopSoundSlavePrims = value; }
|
||||
}
|
||||
|
||||
private SceneObjectPart m_LoopSoundMasterPrim = null;
|
||||
public SceneObjectPart LoopSoundMasterPrim
|
||||
{
|
||||
get { return m_LoopSoundMasterPrim; }
|
||||
set { m_LoopSoundMasterPrim = value; }
|
||||
}
|
||||
|
||||
private List<SceneObjectPart> m_LoopSoundSlavePrims = new List<SceneObjectPart>();
|
||||
public List<SceneObjectPart> LoopSoundSlavePrims
|
||||
{
|
||||
get { return m_LoopSoundSlavePrims; }
|
||||
set { m_LoopSoundSlavePrims = value; }
|
||||
}
|
||||
|
||||
// The UUID for the Region this Object is in.
|
||||
public UUID RegionUUID
|
||||
{
|
||||
@@ -1779,32 +1816,6 @@ namespace OpenSim.Region.Framework.Scenes
|
||||
}
|
||||
}
|
||||
|
||||
public void rotLookAt(Quaternion target, float strength, float damping)
|
||||
{
|
||||
SceneObjectPart rootpart = m_rootPart;
|
||||
if (rootpart != null)
|
||||
{
|
||||
if (IsAttachment)
|
||||
{
|
||||
/*
|
||||
ScenePresence avatar = m_scene.GetScenePresence(rootpart.AttachedAvatar);
|
||||
if (avatar != null)
|
||||
{
|
||||
Rotate the Av?
|
||||
} */
|
||||
}
|
||||
else
|
||||
{
|
||||
if (rootpart.PhysActor != null)
|
||||
{
|
||||
rootpart.PhysActor.APIDTarget = new Quaternion(target.X, target.Y, target.Z, target.W);
|
||||
rootpart.PhysActor.APIDStrength = strength;
|
||||
rootpart.PhysActor.APIDDamping = damping;
|
||||
rootpart.PhysActor.APIDActive = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
public void stopLookAt()
|
||||
{
|
||||
SceneObjectPart rootpart = m_rootPart;
|
||||
@@ -1963,6 +1974,8 @@ namespace OpenSim.Region.Framework.Scenes
|
||||
|
||||
foreach (SceneObjectPart part in m_parts.Values)
|
||||
{
|
||||
if (!IsSelected)
|
||||
part.UpdateLookAt();
|
||||
part.SendScheduledUpdates();
|
||||
}
|
||||
}
|
||||
@@ -2452,11 +2465,14 @@ namespace OpenSim.Region.Framework.Scenes
|
||||
{
|
||||
if (m_rootPart.PhysActor.IsPhysical)
|
||||
{
|
||||
Vector3 llmoveforce = pos - AbsolutePosition;
|
||||
Vector3 grabforce = llmoveforce;
|
||||
grabforce = (grabforce / 10) * m_rootPart.PhysActor.Mass;
|
||||
m_rootPart.PhysActor.AddForce(grabforce,true);
|
||||
m_scene.PhysicsScene.AddPhysicsActorTaint(m_rootPart.PhysActor);
|
||||
if (!m_rootPart.BlockGrab)
|
||||
{
|
||||
Vector3 llmoveforce = pos - AbsolutePosition;
|
||||
Vector3 grabforce = llmoveforce;
|
||||
grabforce = (grabforce / 10) * m_rootPart.PhysActor.Mass;
|
||||
m_rootPart.PhysActor.AddForce(grabforce, true);
|
||||
m_scene.PhysicsScene.AddPhysicsActorTaint(m_rootPart.PhysActor);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -2812,6 +2828,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||
SceneObjectPart part = GetChildPart(localID);
|
||||
if (part != null)
|
||||
{
|
||||
part.IgnoreUndoUpdate = true;
|
||||
if (scale.X > m_scene.m_maxNonphys)
|
||||
scale.X = m_scene.m_maxNonphys;
|
||||
if (scale.Y > m_scene.m_maxNonphys)
|
||||
@@ -2839,6 +2856,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||
{
|
||||
if (obPart.UUID != m_rootPart.UUID)
|
||||
{
|
||||
obPart.IgnoreUndoUpdate = true;
|
||||
Vector3 oldSize = new Vector3(obPart.Scale);
|
||||
|
||||
float f = 1.0f;
|
||||
@@ -2898,6 +2916,8 @@ namespace OpenSim.Region.Framework.Scenes
|
||||
z *= a;
|
||||
}
|
||||
}
|
||||
obPart.IgnoreUndoUpdate = false;
|
||||
obPart.StoreUndoState();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -2913,6 +2933,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||
{
|
||||
foreach (SceneObjectPart obPart in m_parts.Values)
|
||||
{
|
||||
obPart.IgnoreUndoUpdate = true;
|
||||
if (obPart.UUID != m_rootPart.UUID)
|
||||
{
|
||||
Vector3 currentpos = new Vector3(obPart.OffsetPosition);
|
||||
@@ -2926,6 +2947,8 @@ namespace OpenSim.Region.Framework.Scenes
|
||||
obPart.Resize(newSize);
|
||||
obPart.UpdateOffSet(currentpos);
|
||||
}
|
||||
obPart.IgnoreUndoUpdate = false;
|
||||
obPart.StoreUndoState();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2935,6 +2958,8 @@ namespace OpenSim.Region.Framework.Scenes
|
||||
m_scene.PhysicsScene.AddPhysicsActorTaint(part.PhysActor);
|
||||
}
|
||||
|
||||
part.IgnoreUndoUpdate = false;
|
||||
part.StoreUndoState();
|
||||
HasGroupChanged = true;
|
||||
ScheduleGroupForTerseUpdate();
|
||||
}
|
||||
@@ -2950,13 +2975,26 @@ namespace OpenSim.Region.Framework.Scenes
|
||||
/// <param name="pos"></param>
|
||||
public void UpdateGroupPosition(Vector3 pos)
|
||||
{
|
||||
foreach (SceneObjectPart part in Children.Values)
|
||||
{
|
||||
part.StoreUndoState();
|
||||
}
|
||||
if (m_scene.EventManager.TriggerGroupMove(UUID, pos))
|
||||
{
|
||||
if (IsAttachment)
|
||||
{
|
||||
m_rootPart.AttachedPos = pos;
|
||||
}
|
||||
|
||||
if (RootPart.GetStatusSandbox())
|
||||
{
|
||||
if (Util.GetDistanceTo(RootPart.StatusSandboxPos, pos) > 10)
|
||||
{
|
||||
RootPart.ScriptSetPhysicsStatus(false);
|
||||
pos = AbsolutePosition;
|
||||
Scene.SimChat(Utils.StringToBytes("Hit Sandbox Limit"),
|
||||
ChatTypeEnum.DebugChannel, 0x7FFFFFFF, RootPart.AbsolutePosition, Name, UUID, false);
|
||||
}
|
||||
}
|
||||
AbsolutePosition = pos;
|
||||
|
||||
HasGroupChanged = true;
|
||||
@@ -2975,7 +3013,10 @@ namespace OpenSim.Region.Framework.Scenes
|
||||
public void UpdateSinglePosition(Vector3 pos, uint localID)
|
||||
{
|
||||
SceneObjectPart part = GetChildPart(localID);
|
||||
|
||||
foreach (SceneObjectPart parts in Children.Values)
|
||||
{
|
||||
parts.StoreUndoState();
|
||||
}
|
||||
if (part != null)
|
||||
{
|
||||
if (part.UUID == m_rootPart.UUID)
|
||||
@@ -2997,6 +3038,10 @@ namespace OpenSim.Region.Framework.Scenes
|
||||
/// <param name="pos"></param>
|
||||
private void UpdateRootPosition(Vector3 pos)
|
||||
{
|
||||
foreach (SceneObjectPart part in Children.Values)
|
||||
{
|
||||
part.StoreUndoState();
|
||||
}
|
||||
Vector3 newPos = new Vector3(pos.X, pos.Y, pos.Z);
|
||||
Vector3 oldPos =
|
||||
new Vector3(AbsolutePosition.X + m_rootPart.OffsetPosition.X,
|
||||
@@ -3040,6 +3085,10 @@ namespace OpenSim.Region.Framework.Scenes
|
||||
/// <param name="rot"></param>
|
||||
public void UpdateGroupRotationR(Quaternion rot)
|
||||
{
|
||||
foreach (SceneObjectPart parts in Children.Values)
|
||||
{
|
||||
parts.StoreUndoState();
|
||||
}
|
||||
m_rootPart.UpdateRotation(rot);
|
||||
|
||||
PhysicsActor actor = m_rootPart.PhysActor;
|
||||
@@ -3060,6 +3109,10 @@ namespace OpenSim.Region.Framework.Scenes
|
||||
/// <param name="rot"></param>
|
||||
public void UpdateGroupRotationPR(Vector3 pos, Quaternion rot)
|
||||
{
|
||||
foreach (SceneObjectPart parts in Children.Values)
|
||||
{
|
||||
parts.StoreUndoState();
|
||||
}
|
||||
m_rootPart.UpdateRotation(rot);
|
||||
|
||||
PhysicsActor actor = m_rootPart.PhysActor;
|
||||
@@ -3083,6 +3136,10 @@ namespace OpenSim.Region.Framework.Scenes
|
||||
public void UpdateSingleRotation(Quaternion rot, uint localID)
|
||||
{
|
||||
SceneObjectPart part = GetChildPart(localID);
|
||||
foreach (SceneObjectPart parts in Children.Values)
|
||||
{
|
||||
parts.StoreUndoState();
|
||||
}
|
||||
if (part != null)
|
||||
{
|
||||
if (part.UUID == m_rootPart.UUID)
|
||||
@@ -3113,8 +3170,11 @@ namespace OpenSim.Region.Framework.Scenes
|
||||
}
|
||||
else
|
||||
{
|
||||
part.IgnoreUndoUpdate = true;
|
||||
part.UpdateRotation(rot);
|
||||
part.OffsetPosition = pos;
|
||||
part.IgnoreUndoUpdate = false;
|
||||
part.StoreUndoState();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -3128,6 +3188,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||
Quaternion axRot = rot;
|
||||
Quaternion oldParentRot = m_rootPart.RotationOffset;
|
||||
|
||||
m_rootPart.StoreUndoState();
|
||||
m_rootPart.UpdateRotation(rot);
|
||||
if (m_rootPart.PhysActor != null)
|
||||
{
|
||||
@@ -3141,6 +3202,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||
{
|
||||
if (prim.UUID != m_rootPart.UUID)
|
||||
{
|
||||
prim.IgnoreUndoUpdate = true;
|
||||
Vector3 axPos = prim.OffsetPosition;
|
||||
axPos *= oldParentRot;
|
||||
axPos *= Quaternion.Inverse(axRot);
|
||||
@@ -3153,7 +3215,14 @@ namespace OpenSim.Region.Framework.Scenes
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
foreach (SceneObjectPart childpart in Children.Values)
|
||||
{
|
||||
if (childpart != m_rootPart)
|
||||
{
|
||||
childpart.IgnoreUndoUpdate = false;
|
||||
childpart.StoreUndoState();
|
||||
}
|
||||
}
|
||||
m_rootPart.ScheduleTerseUpdate();
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user