本文整理汇总了C#中OpenSim.Region.Framework.Scenes.SceneObjectPart.ScheduleTerseUpdate方法的典型用法代码示例。如果您正苦于以下问题:C# SceneObjectPart.ScheduleTerseUpdate方法的具体用法?C# SceneObjectPart.ScheduleTerseUpdate怎么用?C# SceneObjectPart.ScheduleTerseUpdate使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类OpenSim.Region.Framework.Scenes.SceneObjectPart
的用法示例。
在下文中一共展示了SceneObjectPart.ScheduleTerseUpdate方法的6个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: doChangeObject
public void doChangeObject(SceneObjectPart part, ObjectChangeData data)
{
// TODO this still as excessive *.Schedule*Update()s
if (part != null && part.ParentGroup != null)
{
ObjectChangeType change = data.change;
bool togroup = ((change & ObjectChangeType.Group) != 0);
// bool uniform = ((what & ObjectChangeType.UniformScale) != 0); not in use
SceneObjectGroup group = part.ParentGroup;
PhysicsActor pha = group.RootPart.PhysActor;
updatetype updateType = updatetype.none;
if (togroup)
{
// related to group
if ((change & (ObjectChangeType.Rotation | ObjectChangeType.Position)) != 0)
{
if ((change & ObjectChangeType.Rotation) != 0)
{
group.RootPart.UpdateRotation(data.rotation);
updateType = updatetype.none;
}
if ((change & ObjectChangeType.Position) != 0)
{
if (IsAttachment || m_scene.Permissions.CanObjectEntry(group.UUID, false, data.position))
UpdateGroupPosition(data.position);
updateType = updatetype.groupterse;
}
else
// ugly rotation update of all parts
{
group.ResetChildPrimPhysicsPositions();
}
}
if ((change & ObjectChangeType.Scale) != 0)
{
if (pha != null)
pha.Building = true;
group.GroupResize(data.scale);
updateType = updatetype.none;
if (pha != null)
pha.Building = false;
}
}
else
{
// related to single prim in a link-set ( ie group)
if (pha != null)
pha.Building = true;
// root part is special
// parts offset positions or rotations need to change also
if (part == group.RootPart)
{
if ((change & ObjectChangeType.Rotation) != 0)
group.UpdateRootRotation(data.rotation);
if ((change & ObjectChangeType.Position) != 0)
group.UpdateRootPosition(data.position);
if ((change & ObjectChangeType.Scale) != 0)
part.Resize(data.scale);
}
else
{
if ((change & ObjectChangeType.Position) != 0)
{
part.OffsetPosition = data.position;
updateType = updatetype.partterse;
}
if ((change & ObjectChangeType.Rotation) != 0)
{
part.UpdateRotation(data.rotation);
updateType = updatetype.none;
}
if ((change & ObjectChangeType.Scale) != 0)
{
part.Resize(data.scale);
updateType = updatetype.none;
}
}
if (pha != null)
pha.Building = false;
}
if (updateType != updatetype.none)
{
group.HasGroupChanged = true;
switch (updateType)
{
case updatetype.partterse:
part.ScheduleTerseUpdate();
break;
//.........这里部分代码省略.........
示例2: PlaybackState
public void PlaybackState(SceneObjectPart part)
{
if (part != null)
{
part.Undoing = true;
if (part.ParentID == 0)
{
part.ParentGroup.AbsolutePosition = Position;
part.UpdateRotation(Rotation);
part.ParentGroup.ScheduleGroupForTerseUpdate();
}
else
{
part.OffsetPosition = Position;
part.UpdateRotation(Rotation);
part.Resize(Scale);
part.ScheduleTerseUpdate();
}
part.Undoing = false;
}
}
示例3: SetPrimParams
//.........这里部分代码省略.........
{
Error(originFunc, string.Format("Error running rule #{0} -> PRIM_ROT_LOCAL: arg #{1} - parameter 2 must be rotation", rulesParsed, idx - idxStart - 1));
return new LSL_List();
}
SetRot(part, rot);
break;
case ScriptBaseClass.PRIM_OMEGA:
if (remain < 3)
return new LSL_List();
LSL_Vector axis;
LSL_Float spinrate;
LSL_Float gain;
try
{
axis = rules.GetVector3Item(idx++);
}
catch(InvalidCastException)
{
Error(originFunc, string.Format("Error running rule #{0} -> PRIM_OMEGA: arg #{1} - parameter 2 must be vector", rulesParsed, idx - idxStart - 1));
return new LSL_List();
}
try
{
spinrate = rules.GetLSLFloatItem(idx++);
}
catch(InvalidCastException)
{
Error(originFunc, string.Format("Error running rule #{0} -> PRIM_OMEGA: arg #{1} - parameter 3 must be float", rulesParsed, idx - idxStart - 1));
return new LSL_List();
}
try
{
gain = rules.GetLSLFloatItem(idx++);
}
catch(InvalidCastException)
{
Error(originFunc, string.Format("Error running rule #{0} -> PRIM_OMEGA: arg #{1} - parameter 4 must be float", rulesParsed, idx - idxStart - 1));
return new LSL_List();
}
TargetOmega(part, axis, (double)spinrate, (double)gain);
break;
case ScriptBaseClass.PRIM_SLICE:
if (remain < 1)
return new LSL_List();
LSL_Vector slice;
try
{
slice = rules.GetVector3Item(idx++);
}
catch(InvalidCastException)
{
Error(originFunc, string.Format("Error running rule #{0} -> PRIM_SLICE: arg #{1} - parameter 2 must be vector", rulesParsed, idx - idxStart - 1));
return new LSL_List();
}
part.UpdateSlice((float)slice.x, (float)slice.y);
break;
case ScriptBaseClass.PRIM_LINK_TARGET:
if (remain < 3) // setting to 3 on the basis that parsing any usage of PRIM_LINK_TARGET that has nothing following it is pointless.
return new LSL_List();
return rules.GetSublist(idx, -1);
default:
Error(originFunc, string.Format("Error running rule #{0}: arg #{1} - unsupported parameter", rulesParsed, idx - idxStart));
return new LSL_List();
}
}
}
catch (InvalidCastException e)
{
Error(originFunc, string.Format("Error running rule #{0}: arg #{1} - ", rulesParsed, idx - idxStart) + e.Message);
}
finally
{
if (positionChanged)
{
if (part.ParentGroup.RootPart == part)
{
SceneObjectGroup parent = part.ParentGroup;
// Util.FireAndForget(delegate(object x) {
parent.UpdateGroupPosition(currentPosition);
// });
}
else
{
part.OffsetPosition = currentPosition;
// SceneObjectGroup parent = part.ParentGroup;
// parent.HasGroupChanged = true;
// parent.ScheduleGroupForTerseUpdate();
part.ScheduleTerseUpdate();
}
}
}
return new LSL_List();
}
示例4: SetPos
/// <summary>
/// set object position, optionally capping the distance.
/// </summary>
/// <param name="part"></param>
/// <param name="targetPos"></param>
/// <param name="adjust">if TRUE, will cap the distance to 10m.</param>
protected void SetPos(SceneObjectPart part, LSL_Vector targetPos, bool adjust)
{
if (part == null || part.ParentGroup == null || part.ParentGroup.IsDeleted)
return;
LSL_Vector currentPos = GetPartLocalPos(part);
LSL_Vector toPos = GetSetPosTarget(part, targetPos, currentPos, adjust);
if (part.ParentGroup.RootPart == part)
{
SceneObjectGroup parent = part.ParentGroup;
if (!World.Permissions.CanObjectEntry(parent.UUID, false, (Vector3)toPos))
return;
parent.UpdateGroupPosition((Vector3)toPos);
}
else
{
part.OffsetPosition = (Vector3)toPos;
// SceneObjectGroup parent = part.ParentGroup;
// parent.HasGroupChanged = true;
// parent.ScheduleGroupForTerseUpdate();
part.ScheduleTerseUpdate();
}
}
示例5: PlayfwdState
public void PlayfwdState(SceneObjectPart part)
{
if (part != null)
{
part.Undoing = true;
if (part.ParentID == 0)
{
if (Position != Vector3.Zero)
part.ParentGroup.AbsolutePosition = Position;
if (Rotation != Quaternion.Identity)
part.UpdateRotation(Rotation);
if (Scale != Vector3.Zero)
part.Resize(Scale);
part.ParentGroup.ScheduleGroupForTerseUpdate();
}
else
{
if (Position != Vector3.Zero)
part.OffsetPosition = Position;
if (Rotation != Quaternion.Identity)
part.UpdateRotation(Rotation);
if (Scale != Vector3.Zero)
part.Resize(Scale);
part.ScheduleTerseUpdate();
}
part.Undoing = false;
}
}
示例6: PlaybackState
public void PlaybackState(SceneObjectPart part)
{
part.Undoing = true;
if (part.ParentID == 0)
{
// m_log.DebugFormat(
// "[UNDO STATE]: Undoing position to {0} for root part {1} {2}",
// Position, part.Name, part.LocalId);
if (Position != Vector3.Zero)
{
if (ForGroup)
part.ParentGroup.AbsolutePosition = Position;
else
part.ParentGroup.UpdateRootPosition(Position);
}
// m_log.DebugFormat(
// "[UNDO STATE]: Undoing rotation {0} to {1} for root part {2} {3}",
// part.RotationOffset, Rotation, part.Name, part.LocalId);
if (ForGroup)
part.UpdateRotation(Rotation);
else
part.ParentGroup.UpdateRootRotation(Rotation);
if (Scale != Vector3.Zero)
{
// m_log.DebugFormat(
// "[UNDO STATE]: Undoing scale {0} to {1} for root part {2} {3}",
// part.Shape.Scale, Scale, part.Name, part.LocalId);
if (ForGroup)
part.ParentGroup.GroupResize(Scale);
else
part.Resize(Scale);
}
part.ParentGroup.ScheduleGroupForTerseUpdate();
}
else
{
if (Position != Vector3.Zero)
{
// m_log.DebugFormat(
// "[UNDO STATE]: Undoing position {0} to {1} for child part {2} {3}",
// part.OffsetPosition, Position, part.Name, part.LocalId);
part.OffsetPosition = Position;
}
// m_log.DebugFormat(
// "[UNDO STATE]: Undoing rotation {0} to {1} for child part {2} {3}",
// part.RotationOffset, Rotation, part.Name, part.LocalId);
part.UpdateRotation(Rotation);
if (Scale != Vector3.Zero)
{
// m_log.DebugFormat(
// "[UNDO STATE]: Undoing scale {0} to {1} for child part {2} {3}",
// part.Shape.Scale, Scale, part.Name, part.LocalId);
part.Resize(Scale);
}
part.ScheduleTerseUpdate();
}
part.Undoing = false;
}