本文整理汇总了C#中AgentManager.ControlFlags类的典型用法代码示例。如果您正苦于以下问题:C# AgentManager.ControlFlags类的具体用法?C# AgentManager.ControlFlags怎么用?C# AgentManager.ControlFlags使用的例子?那么恭喜您, 这里精选的类代码示例或许可以为您提供帮助。
AgentManager.ControlFlags类属于命名空间,在下文中一共展示了AgentManager.ControlFlags类的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: CopyFrom
private void CopyFrom(AgentData cAgent)
{
m_originRegionID = cAgent.RegionID;
m_callbackURI = cAgent.CallbackURI;
// m_log.DebugFormat(
// "[SCENE PRESENCE]: Set callback for {0} in {1} to {2} in CopyFrom()",
// Name, m_scene.RegionInfo.RegionName, m_callbackURI);
m_pos = cAgent.Position;
m_velocity = cAgent.Velocity;
CameraPosition = cAgent.Center;
CameraAtAxis = cAgent.AtAxis;
CameraLeftAxis = cAgent.LeftAxis;
CameraUpAxis = cAgent.UpAxis;
// When we get to the point of re-computing neighbors everytime this
// changes, then start using the agent's drawdistance rather than the
// region's draw distance.
// DrawDistance = cAgent.Far;
DrawDistance = Scene.DefaultDrawDistance;
if ((cAgent.Throttles != null) && cAgent.Throttles.Length > 0)
ControllingClient.SetChildAgentThrottle(cAgent.Throttles);
m_headrotation = cAgent.HeadRotation;
Rotation = cAgent.BodyRotation;
m_AgentControlFlags = (AgentManager.ControlFlags)cAgent.ControlFlags;
if (m_scene.Permissions.IsGod(new UUID(cAgent.AgentID)))
GodLevel = cAgent.GodLevel;
SetAlwaysRun = cAgent.AlwaysRun;
Appearance = new AvatarAppearance(cAgent.Appearance);
if (PhysicsActor != null)
{
bool isFlying = Flying;
RemoveFromPhysicalScene();
AddToPhysicalScene(isFlying);
}
try
{
lock (scriptedcontrols)
{
if (cAgent.Controllers != null)
{
scriptedcontrols.Clear();
foreach (ControllerData c in cAgent.Controllers)
{
ScriptControllers sc = new ScriptControllers();
sc.itemID = c.ItemID;
sc.ignoreControls = (ScriptControlled)c.IgnoreControls;
sc.eventControls = (ScriptControlled)c.EventControls;
scriptedcontrols[sc.itemID] = sc;
}
}
}
}
catch { }
// FIXME: Why is this null check necessary? Where are the cases where we get a null Anims object?
if (cAgent.Anims != null)
Animator.Animations.FromArray(cAgent.Anims);
if (Scene.AttachmentsModule != null)
Scene.AttachmentsModule.CopyAttachments(cAgent, this);
}
示例2: CopyFrom
public virtual void CopyFrom(AgentData cAgent)
{
try
{
m_pos = cAgent.Position;
if (PhysicsActor != null)
{
AbsolutePosition = cAgent.Position;
PhysicsActor.ForceSetPosition(cAgent.Position);
}
Velocity = cAgent.Velocity;
m_CameraCenter = cAgent.Center;
SetHeight(cAgent.Size.Z);
m_CameraAtAxis = cAgent.AtAxis;
m_CameraLeftAxis = cAgent.LeftAxis;
m_CameraUpAxis = cAgent.UpAxis;
DrawDistance = cAgent.Far;
if ((cAgent.Throttles != null) && cAgent.Throttles.Length > 0)
ControllingClient.SetChildAgentThrottle(cAgent.Throttles);
m_headrotation = cAgent.HeadRotation;
m_bodyRot = cAgent.BodyRotation;
m_AgentControlFlags = (AgentManager.ControlFlags) cAgent.ControlFlags;
m_savedVelocity = cAgent.Velocity;
SpeedModifier = cAgent.Speed;
DrawDistance = cAgent.DrawDistance;
m_setAlwaysRun = cAgent.AlwaysRun;
if (cAgent.IsCrossing)
{
m_scene.AuthenticateHandler.GetAgentCircuitData(UUID).TeleportFlags |=
(uint) TeleportFlags.ViaRegionID;
m_scene.AuthenticateHandler.GetAgentCircuitData(UUID).IsChildAgent = false;
//We're going to be a root
}
IAvatarAppearanceModule appearance = RequestModuleInterface<IAvatarAppearanceModule>();
if (appearance != null)
{
appearance.InitialHasWearablesBeenSent = cAgent.SentInitialWearables;
appearance.Appearance = new AvatarAppearance(cAgent.Appearance);
}
// Animations
try
{
Animator.ResetAnimations();
Animator.Animations.FromArray(cAgent.Anims);
}
catch
{
}
try
{
if (cAgent.SittingObjects != null && cAgent.SittingObjects.m_sittingObjectXML != "")
{
ISceneEntity sceneObject = null;
IRegionSerialiserModule mod = Scene.RequestModuleInterface<IRegionSerialiserModule>();
if (mod != null)
sceneObject = mod.DeserializeGroupFromXml2(cAgent.SittingObjects.m_sittingObjectXML, Scene);
if (sceneObject != null)
{
//We were sitting on something when we crossed
if (Scene.SceneGraph.RestorePrimToScene(sceneObject, false))
{
if (sceneObject.IsSelected)
sceneObject.RootChild.CreateSelected = true;
sceneObject.ScheduleGroupUpdate(PrimUpdateFlags.ForcedFullUpdate);
sceneObject.CreateScriptInstances(0, false, StateSource.PrimCrossing, UUID.Zero, false);
sceneObject.RootChild.PhysActor.ForceSetVelocity(cAgent.Velocity);
sceneObject.RootChild.PhysActor.Velocity = (cAgent.Velocity);
sceneObject.AbsolutePosition = cAgent.Position;
Animator.TrySetMovementAnimation(cAgent.SittingObjects.m_animation);
m_nextSitAnimation = cAgent.SittingObjects.m_animation;
cAgent.SittingObjects.m_objectID = sceneObject.UUID;
m_objectToSitOn = cAgent.SittingObjects;
foreach (ISceneChildEntity child in sceneObject.ChildrenEntities())
{
foreach (TaskInventoryItem taskInv in child.Inventory.GetInventoryItems())
{
foreach (ControllerData cd in cAgent.Controllers)
{
if (cd.ItemID == taskInv.ItemID || cd.ItemID == taskInv.OldItemID)
{
cd.ItemID = taskInv.ItemID;
}
}
}
}
try
{
IScriptControllerModule m = RequestModuleInterface<IScriptControllerModule>();
if (m != null)
if (cAgent.Controllers != null)
m.Deserialize(cAgent.Controllers);
//.........这里部分代码省略.........
示例3: HandleAgentUpdate
/// <summary>
/// This is the event handler for client movement. If a client is moving, this event is triggering.
/// </summary>
public void HandleAgentUpdate(IClientAPI remoteClient, AgentUpdateArgs agentData)
{
// m_log.DebugFormat(
// "[SCENE PRESENCE]: In {0} received agent update from {1}, flags {2}",
// Scene.RegionInfo.RegionName, remoteClient.Name, (AgentManager.ControlFlags)agentData.ControlFlags);
if (IsChildAgent)
{
// // m_log.Debug("DEBUG: HandleAgentUpdate: child agent");
return;
}
++m_movementUpdateCount;
if (m_movementUpdateCount < 1)
m_movementUpdateCount = 1;
#region Sanity Checking
// This is irritating. Really.
if (!AbsolutePosition.IsFinite())
{
RemoveFromPhysicalScene();
m_log.Error("[AVATAR]: NonFinite Avatar position detected... Reset Position. Mantis this please. Error #9999902");
m_pos = m_LastFinitePos;
if (!m_pos.IsFinite())
{
m_pos.X = 127f;
m_pos.Y = 127f;
m_pos.Z = 127f;
m_log.Error("[AVATAR]: NonFinite Avatar position detected... Reset Position. Mantis this please. Error #9999903");
}
AddToPhysicalScene(false);
}
else
{
m_LastFinitePos = m_pos;
}
#endregion Sanity Checking
#region Inputs
AgentManager.ControlFlags flags = (AgentManager.ControlFlags)agentData.ControlFlags;
// Camera location in world. We'll need to raytrace
// from this location from time to time.
CameraPosition = agentData.CameraCenter;
if (Vector3.Distance(m_lastCameraPosition, CameraPosition) >= Scene.RootReprioritizationDistance)
{
ReprioritizeUpdates();
m_lastCameraPosition = CameraPosition;
}
// Use these three vectors to figure out what the agent is looking at
// Convert it to a Matrix and/or Quaternion
CameraAtAxis = agentData.CameraAtAxis;
CameraLeftAxis = agentData.CameraLeftAxis;
CameraUpAxis = agentData.CameraUpAxis;
// The Agent's Draw distance setting
// When we get to the point of re-computing neighbors everytime this
// changes, then start using the agent's drawdistance rather than the
// region's draw distance.
// DrawDistance = agentData.Far;
DrawDistance = Scene.DefaultDrawDistance;
// Check if Client has camera in 'follow cam' or 'build' mode.
Vector3 camdif = (Vector3.One * Rotation - Vector3.One * CameraRotation);
m_followCamAuto = ((CameraUpAxis.Z > 0.959f && CameraUpAxis.Z < 0.98f)
&& (Math.Abs(camdif.X) < 0.4f && Math.Abs(camdif.Y) < 0.4f)) ? true : false;
m_mouseLook = (flags & AgentManager.ControlFlags.AGENT_CONTROL_MOUSELOOK) != 0;
m_leftButtonDown = (flags & AgentManager.ControlFlags.AGENT_CONTROL_LBUTTON_DOWN) != 0;
#endregion Inputs
// // Make anims work for client side autopilot
// if ((flags & AgentManager.ControlFlags.AGENT_CONTROL_AT_POS) != 0)
// m_updateCount = UPDATE_COUNT;
//
// // Make turning in place work
// if ((flags & AgentManager.ControlFlags.AGENT_CONTROL_YAW_POS) != 0 ||
// (flags & AgentManager.ControlFlags.AGENT_CONTROL_YAW_NEG) != 0)
// m_updateCount = UPDATE_COUNT;
if ((flags & AgentManager.ControlFlags.AGENT_CONTROL_STAND_UP) != 0)
{
StandUp();
}
//m_log.DebugFormat("[FollowCam]: {0}", m_followCamAuto);
// Raycast from the avatar's head to the camera to see if there's anything blocking the view
if ((m_movementUpdateCount % NumMovementsBetweenRayCast) == 0 && m_scene.PhysicsScene.SupportsRayCast())
{
//.........这里部分代码省略.........
示例4: HandleAgentUpdate
/// <summary>
/// This is the event handler for client movement. If a client is moving, this event is triggering.
/// </summary>
public virtual void HandleAgentUpdate(IClientAPI remoteClient, AgentUpdateArgs agentData)
{
m_perfMonMS = Util.EnvironmentTickCount();
++m_movementUpdateCount;
if (m_movementUpdateCount < 1)
m_movementUpdateCount = 1;
#region Sanity Checking
// This is irritating. Really.
if (!AbsolutePosition.IsFinite())
{
OutOfBoundsCall(Vector3.Zero);
return;
}
#endregion Sanity Checking
#region Inputs
if (Frozen)
return; //Do nothing, just end
AgentManager.ControlFlags flags = (AgentManager.ControlFlags) agentData.ControlFlags;
Quaternion bodyRotation = agentData.BodyRotation;
//Check to see whether ray casting needs done
// We multiply by 10 so that we don't trigger it when the camera moves slightly (as its 2 meter change)
if (Util.GetFlatDistanceTo(agentData.CameraCenter, m_lastCameraCenter) > SIGNIFICANT_MOVEMENT*10)
{
m_lastCameraCenter = agentData.CameraCenter;
Scene.AuroraEventManager.FireGenericEventHandler("SignficantCameraMovement", this);
}
// Camera location in world. We'll need to raytrace
// from this location from time to time.
m_CameraCenter = agentData.CameraCenter;
// Use these three vectors to figure out what the agent is looking at
// Convert it to a Matrix and/or Quaternion
m_CameraAtAxis = agentData.CameraAtAxis;
m_CameraLeftAxis = agentData.CameraLeftAxis;
m_CameraUpAxis = agentData.CameraUpAxis;
// The Agent's Draw distance setting
DrawDistance = agentData.Far;
// Check if Client has camera in 'follow cam' or 'build' mode.
Vector3 camdif = (Vector3.One*m_bodyRot - Vector3.One*CameraRotation);
m_followCamAuto = ((m_CameraUpAxis.Z > 0.959f && m_CameraUpAxis.Z < 0.98f)
&& (Math.Abs(camdif.X) < 0.4f && Math.Abs(camdif.Y) < 0.4f));
m_mouseLook = (flags & AgentManager.ControlFlags.AGENT_CONTROL_MOUSELOOK) != 0;
m_leftButtonDown = (flags & AgentManager.ControlFlags.AGENT_CONTROL_LBUTTON_DOWN) != 0;
m_isAway = (flags & AgentManager.ControlFlags.AGENT_CONTROL_AWAY) != 0;
#endregion Inputs
if ((flags & AgentManager.ControlFlags.AGENT_CONTROL_STAND_UP) != 0)
{
StandUp();
}
//MainConsole.Instance.DebugFormat("[FollowCam]: {0}", m_followCamAuto);
// Raycast from the avatar's head to the camera to see if there's anything blocking the view
if ((m_movementUpdateCount%NumMovementsBetweenRayCast) == 0 && m_scene.PhysicsScene.SupportsRayCast())
{
if (m_followCamAuto)
{
Vector3 posAdjusted = m_pos + HEAD_ADJUSTMENT;
m_scene.PhysicsScene.RaycastWorld(m_pos, Vector3.Normalize(m_CameraCenter - posAdjusted),
Vector3.Distance(m_CameraCenter, posAdjusted) + 0.3f,
RayCastCameraCallback);
}
}
if (!m_CameraCenter.IsFinite())
{
m_CameraCenter = new Vector3(128, 128, 128);
}
IScriptControllerModule m = RequestModuleInterface<IScriptControllerModule>();
if (m != null) //Tell any scripts about it
m.OnNewMovement(ref flags);
if (m_autopilotMoving)
CheckAtSitTarget();
// In the future, these values might need to go global.
// Here's where you get them.
if (!SitGround)
SitGround = (flags & AgentManager.ControlFlags.AGENT_CONTROL_SIT_ON_GROUND) != 0;
m_AgentControlFlags = flags;
m_headrotation = agentData.HeadRotation;
m_state = agentData.State;
PhysicsActor actor = PhysicsActor;
//.........这里部分代码省略.........
示例5: InTransit
public virtual void InTransit()
{
m_inTransit = true;
if ((m_physicsActor != null) && m_physicsActor.Flying)
m_AgentControlFlags |= AgentManager.ControlFlags.AGENT_CONTROL_FLY;
else if ((m_AgentControlFlags & AgentManager.ControlFlags.AGENT_CONTROL_FLY) != 0)
m_AgentControlFlags &= ~AgentManager.ControlFlags.AGENT_CONTROL_FLY;
}
示例6: CopyFrom
private void CopyFrom(AgentData cAgent)
{
m_callbackURI = cAgent.CallbackURI;
// m_log.DebugFormat(
// "[SCENE PRESENCE]: Set callback for {0} in {1} to {2} in CopyFrom()",
// Name, m_scene.RegionInfo.RegionName, m_callbackURI);
m_pos = cAgent.Position;
m_velocity = cAgent.Velocity;
CameraPosition = cAgent.Center;
CameraAtAxis = cAgent.AtAxis;
CameraLeftAxis = cAgent.LeftAxis;
CameraUpAxis = cAgent.UpAxis;
ParentUUID = cAgent.ParentPart;
PrevSitOffset = cAgent.SitOffset;
// When we get to the point of re-computing neighbors everytime this
// changes, then start using the agent's drawdistance rather than the
// region's draw distance.
DrawDistance = cAgent.Far;
// DrawDistance = Scene.DefaultDrawDistance;
if ((cAgent.Throttles != null) && cAgent.Throttles.Length > 0)
ControllingClient.SetChildAgentThrottle(cAgent.Throttles);
m_headrotation = cAgent.HeadRotation;
Rotation = cAgent.BodyRotation;
m_AgentControlFlags = (AgentManager.ControlFlags)cAgent.ControlFlags;
if (m_scene.Permissions.IsGod(new UUID(cAgent.AgentID)))
GodLevel = cAgent.GodLevel;
SetAlwaysRun = cAgent.AlwaysRun;
Appearance = new AvatarAppearance(cAgent.Appearance);
if (PhysicsActor != null)
{
bool isFlying = Flying;
RemoveFromPhysicalScene();
AddToPhysicalScene(isFlying);
}
try
{
lock (scriptedcontrols)
{
if (cAgent.Controllers != null)
{
scriptedcontrols.Clear();
foreach (ControllerData c in cAgent.Controllers)
{
ScriptControllers sc = new ScriptControllers();
sc.objectID = c.ObjectID;
sc.itemID = c.ItemID;
sc.ignoreControls = (ScriptControlled)c.IgnoreControls;
sc.eventControls = (ScriptControlled)c.EventControls;
scriptedcontrols[sc.itemID] = sc;
}
}
}
}
catch { }
// FIXME: Why is this null check necessary? Where are the cases where we get a null Anims object?
if (cAgent.Anims != null)
Animator.Animations.FromArray(cAgent.Anims);
if (cAgent.DefaultAnim != null)
Animator.Animations.SetDefaultAnimation(cAgent.DefaultAnim.AnimID, cAgent.DefaultAnim.SequenceNum, UUID.Zero);
if (cAgent.AnimState != null)
Animator.Animations.SetImplicitDefaultAnimation(cAgent.AnimState.AnimID, cAgent.AnimState.SequenceNum, UUID.Zero);
if (Scene.AttachmentsModule != null)
Scene.AttachmentsModule.CopyAttachments(cAgent, this);
// This must occur after attachments are copied, as it releases the CompleteMovement() calling thread
// originating from the client completing a teleport. Otherwise, CompleteMovement() code to restart
// script attachments can outrace this thread.
lock (m_originRegionIDAccessLock)
m_originRegionID = cAgent.RegionID;
}
示例7: CopyFrom
public void CopyFrom(AgentData cAgent)
{
m_originRegionID = cAgent.RegionID;
m_callbackURI = cAgent.CallbackURI;
m_pos = cAgent.Position;
m_velocity = cAgent.Velocity;
m_CameraCenter = cAgent.Center;
//m_avHeight = cAgent.Size.Z;
m_CameraAtAxis = cAgent.AtAxis;
m_CameraLeftAxis = cAgent.LeftAxis;
m_CameraUpAxis = cAgent.UpAxis;
m_DrawDistance = cAgent.Far;
if ((cAgent.Throttles != null) && cAgent.Throttles.Length > 0)
ControllingClient.SetChildAgentThrottle(cAgent.Throttles);
m_headrotation = cAgent.HeadRotation;
m_bodyRot = cAgent.BodyRotation;
m_AgentControlFlags = (AgentManager.ControlFlags)cAgent.ControlFlags;
if (m_scene.Permissions.IsGod(new UUID(cAgent.AgentID)))
m_godLevel = cAgent.GodLevel;
m_setAlwaysRun = cAgent.AlwaysRun;
uint i = 0;
try
{
if (cAgent.Wearables == null)
cAgent.Wearables = new UUID[0];
AvatarWearable[] wears = new AvatarWearable[cAgent.Wearables.Length / 2];
for (uint n = 0; n < cAgent.Wearables.Length; n += 2)
{
UUID itemId = cAgent.Wearables[n];
UUID assetId = cAgent.Wearables[n + 1];
wears[i++] = new AvatarWearable(itemId, assetId);
}
m_appearance.Wearables = wears;
Primitive.TextureEntry te;
if (cAgent.AgentTextures != null && cAgent.AgentTextures.Length > 1)
te = new Primitive.TextureEntry(cAgent.AgentTextures, 0, cAgent.AgentTextures.Length);
else
te = AvatarAppearance.GetDefaultTexture();
if ((cAgent.VisualParams == null) || (cAgent.VisualParams.Length < AvatarAppearance.VISUALPARAM_COUNT))
cAgent.VisualParams = AvatarAppearance.GetDefaultVisualParams();
m_appearance.SetAppearance(te, (byte[])cAgent.VisualParams.Clone());
}
catch (Exception e)
{
m_log.Warn("[SCENE PRESENCE]: exception in CopyFrom " + e.Message);
}
// Attachments
try
{
if (cAgent.Attachments != null)
{
foreach (AttachmentData att in cAgent.Attachments)
{
m_appearance.SetAttachment(att.AttachPoint, att.ItemID, att.AssetID);
}
}
}
catch { }
// Animations
try
{
Animator.ResetAnimations();
Animator.Animations.FromArray(cAgent.Anims);
}
catch { }
//cAgent.GroupID = ??
//Groups???
}
示例8: HandleAgentUpdate
/// <summary>
/// This is the event handler for client movement. If a client is moving, this event is triggering.
/// </summary>
public void HandleAgentUpdate(IClientAPI remoteClient, AgentUpdateArgs agentData)
{
//m_log.DebugFormat(
// "[SCENE PRESENCE]: In {0} received agent update from {1}, flags {2}",
// Scene.RegionInfo.RegionName, remoteClient.Name, (AgentManager.ControlFlags)agentData.ControlFlags);
if (IsChildAgent)
{
// // m_log.Debug("DEBUG: HandleAgentUpdate: child agent");
return;
}
#region Sanity Checking
// This is irritating. Really.
if (!AbsolutePosition.IsFinite())
{
RemoveFromPhysicalScene();
m_log.Error("[AVATAR]: NonFinite Avatar position detected... Reset Position. Mantis this please. Error #9999902");
m_pos = m_LastFinitePos;
if (!m_pos.IsFinite())
{
m_pos.X = 127f;
m_pos.Y = 127f;
m_pos.Z = 127f;
m_log.Error("[AVATAR]: NonFinite Avatar position detected... Reset Position. Mantis this please. Error #9999903");
}
AddToPhysicalScene(false);
}
else
{
m_LastFinitePos = m_pos;
}
#endregion Sanity Checking
#region Inputs
AgentManager.ControlFlags flags = (AgentManager.ControlFlags)agentData.ControlFlags;
// The Agent's Draw distance setting
// When we get to the point of re-computing neighbors everytime this
// changes, then start using the agent's drawdistance rather than the
// region's draw distance.
// DrawDistance = agentData.Far;
DrawDistance = Scene.DefaultDrawDistance;
m_mouseLook = (flags & AgentManager.ControlFlags.AGENT_CONTROL_MOUSELOOK) != 0;
m_leftButtonDown = (flags & AgentManager.ControlFlags.AGENT_CONTROL_LBUTTON_DOWN) != 0;
#endregion Inputs
// // Make anims work for client side autopilot
// if ((flags & AgentManager.ControlFlags.AGENT_CONTROL_AT_POS) != 0)
// m_updateCount = UPDATE_COUNT;
//
// // Make turning in place work
// if ((flags & AgentManager.ControlFlags.AGENT_CONTROL_YAW_POS) != 0 ||
// (flags & AgentManager.ControlFlags.AGENT_CONTROL_YAW_NEG) != 0)
// m_updateCount = UPDATE_COUNT;
if ((flags & AgentManager.ControlFlags.AGENT_CONTROL_STAND_UP) != 0)
{
StandUp();
}
uint flagsForScripts = (uint)flags;
flags = RemoveIgnoredControls(flags, IgnoredControls);
if ((flags & AgentManager.ControlFlags.AGENT_CONTROL_SIT_ON_GROUND) != 0)
HandleAgentSitOnGround();
// In the future, these values might need to go global.
// Here's where you get them.
m_AgentControlFlags = flags;
m_headrotation = agentData.HeadRotation;
byte oldState = State;
State = agentData.State;
// We need to send this back to the client in order to stop the edit beams
if ((oldState & (uint)AgentState.Editing) != 0 && State == (uint)AgentState.None)
ControllingClient.SendAgentTerseUpdate(this);
PhysicsActor actor = PhysicsActor;
if (actor == null)
{
SendControlsToScripts(flagsForScripts);
return;
}
if (AllowMovement && !SitGround)
{
Quaternion bodyRotation = agentData.BodyRotation;
bool update_rotation = false;
//.........这里部分代码省略.........
示例9: CopyFrom
private void CopyFrom(AgentData cAgent)
{
m_callbackURI = cAgent.CallbackURI;
// m_log.DebugFormat(
// "[SCENE PRESENCE]: Set callback for {0} in {1} to {2} in CopyFrom()",
// Name, m_scene.RegionInfo.RegionName, m_callbackURI);
m_pos = cAgent.Position;
m_velocity = cAgent.Velocity;
CameraPosition = cAgent.Center;
CameraAtAxis = cAgent.AtAxis;
CameraLeftAxis = cAgent.LeftAxis;
CameraUpAxis = cAgent.UpAxis;
ParentUUID = cAgent.ParentPart;
PrevSitOffset = cAgent.SitOffset;
// When we get to the point of re-computing neighbors everytime this
// changes, then start using the agent's drawdistance rather than the
// region's draw distance.
DrawDistance = cAgent.Far;
// DrawDistance = Scene.DefaultDrawDistance;
if ((cAgent.Throttles != null) && cAgent.Throttles.Length > 0)
ControllingClient.SetChildAgentThrottle(cAgent.Throttles);
m_headrotation = cAgent.HeadRotation;
Rotation = cAgent.BodyRotation;
m_AgentControlFlags = (AgentManager.ControlFlags)cAgent.ControlFlags;
if (m_scene.Permissions.IsGod(new UUID(cAgent.AgentID)))
GodLevel = cAgent.GodLevel;
SetAlwaysRun = cAgent.AlwaysRun;
Appearance = new AvatarAppearance(cAgent.Appearance);
if (PhysicsActor != null)
{
bool isFlying = Flying;
RemoveFromPhysicalScene();
AddToPhysicalScene(isFlying);
}
try
{
lock (scriptedcontrols)
{
if (cAgent.Controllers != null)
{
scriptedcontrols.Clear();
foreach (ControllerData c in cAgent.Controllers)
{
ScriptControllers sc = new ScriptControllers();
sc.objectID = c.ObjectID;
sc.itemID = c.ItemID;
sc.ignoreControls = (ScriptControlled)c.IgnoreControls;
sc.eventControls = (ScriptControlled)c.EventControls;
scriptedcontrols[sc.itemID] = sc;
}
}
}
}
catch { }
// FIXME: Why is this null check necessary? Where are the cases where we get a null Anims object?
if (cAgent.Anims != null)
Animator.Animations.FromArray(cAgent.Anims);
if (cAgent.DefaultAnim != null)
Animator.Animations.SetDefaultAnimation(cAgent.DefaultAnim.AnimID, cAgent.DefaultAnim.SequenceNum, UUID.Zero);
if (cAgent.AnimState != null)
Animator.Animations.SetImplicitDefaultAnimation(cAgent.AnimState.AnimID, cAgent.AnimState.SequenceNum, UUID.Zero);
if (Scene.AttachmentsModule != null)
{
// If the JobEngine is running we can schedule this job now and continue rather than waiting for all
// attachments to copy, which might take a long time in the Hypergrid case as the entire inventory
// graph is inspected for each attachments and assets possibly fetched.
//
// We don't need to worry about a race condition as the job to later start the scripts is also
// JobEngine scheduled and so will always occur after this task.
// XXX: This will not be true if JobEngine ever gets more than one thread.
WorkManager.RunJob(
"CopyAttachments",
o => Scene.AttachmentsModule.CopyAttachments(cAgent, this),
null,
string.Format("Copy attachments for {0} entering {1}", Name, Scene.Name),
true);
}
// This must occur after attachments are copied or scheduled to be copied, as it releases the CompleteMovement() calling thread
// originating from the client completing a teleport. Otherwise, CompleteMovement() code to restart
// script attachments can outrace this thread.
lock (m_originRegionIDAccessLock)
m_originRegionID = cAgent.RegionID;
}
示例10: CopyFrom
public void CopyFrom(AgentData cAgent)
{
m_originRegionID = cAgent.RegionID;
m_callbackURI = cAgent.CallbackURI;
m_pos = cAgent.Position;
m_velocity = cAgent.Velocity;
m_CameraCenter = cAgent.Center;
m_CameraAtAxis = cAgent.AtAxis;
m_CameraLeftAxis = cAgent.LeftAxis;
m_CameraUpAxis = cAgent.UpAxis;
// When we get to the point of re-computing neighbors everytime this
// changes, then start using the agent's drawdistance rather than the
// region's draw distance.
// m_DrawDistance = cAgent.Far;
m_DrawDistance = Scene.DefaultDrawDistance;
if ((cAgent.Throttles != null) && cAgent.Throttles.Length > 0)
ControllingClient.SetChildAgentThrottle(cAgent.Throttles);
m_headrotation = cAgent.HeadRotation;
m_bodyRot = cAgent.BodyRotation;
m_AgentControlFlags = (AgentManager.ControlFlags)cAgent.ControlFlags;
if (m_scene.Permissions.IsGod(new UUID(cAgent.AgentID)))
m_godLevel = cAgent.GodLevel;
m_setAlwaysRun = cAgent.AlwaysRun;
m_appearance = new AvatarAppearance(cAgent.Appearance);
if (m_physicsActor != null)
{
bool isFlying = m_physicsActor.Flying;
RemoveFromPhysicalScene();
AddToPhysicalScene(isFlying);
}
/*
uint i = 0;
try
{
if (cAgent.Wearables == null)
cAgent.Wearables = new UUID[0];
AvatarWearable[] wears = new AvatarWearable[cAgent.Wearables.Length / 2];
for (uint n = 0; n < cAgent.Wearables.Length; n += 2)
{
UUID itemId = cAgent.Wearables[n];
UUID assetId = cAgent.Wearables[n + 1];
wears[i++] = new AvatarWearable(itemId, assetId);
}
// m_appearance.Wearables = wears;
Primitive.TextureEntry textures = null;
if (cAgent.AgentTextures != null && cAgent.AgentTextures.Length > 1)
textures = new Primitive.TextureEntry(cAgent.AgentTextures, 0, cAgent.AgentTextures.Length);
byte[] visuals = null;
if ((cAgent.VisualParams != null) && (cAgent.VisualParams.Length < AvatarAppearance.VISUALPARAM_COUNT))
visuals = (byte[])cAgent.VisualParams.Clone();
m_appearance = new AvatarAppearance(cAgent.AgentID,wears,textures,visuals);
}
catch (Exception e)
{
m_log.Warn("[SCENE PRESENCE]: exception in CopyFrom " + e.Message);
}
// Attachments
try
{
if (cAgent.Attachments != null)
{
m_appearance.ClearAttachments();
foreach (AvatarAttachment att in cAgent.Attachments)
{
m_appearance.SetAttachment(att.AttachPoint, att.ItemID, att.AssetID);
}
}
}
catch { }
*/
try
{
lock (scriptedcontrols)
{
if (cAgent.Controllers != null)
{
scriptedcontrols.Clear();
foreach (ControllerData c in cAgent.Controllers)
{
ScriptControllers sc = new ScriptControllers();
sc.itemID = c.ItemID;
sc.ignoreControls = (ScriptControlled)c.IgnoreControls;
sc.eventControls = (ScriptControlled)c.EventControls;
scriptedcontrols[sc.itemID] = sc;
}
}
//.........这里部分代码省略.........
示例11: CopyFrom
private void CopyFrom(AgentData cAgent)
{
m_originRegionID = cAgent.RegionID;
m_callbackURI = cAgent.CallbackURI;
m_pos = cAgent.Position;
m_velocity = cAgent.Velocity;
CameraPosition = cAgent.Center;
CameraAtAxis = cAgent.AtAxis;
CameraLeftAxis = cAgent.LeftAxis;
m_CameraUpAxis = cAgent.UpAxis;
// When we get to the point of re-computing neighbors everytime this
// changes, then start using the agent's drawdistance rather than the
// region's draw distance.
// DrawDistance = cAgent.Far;
DrawDistance = Scene.DefaultDrawDistance;
if ((cAgent.Throttles != null) && cAgent.Throttles.Length > 0)
ControllingClient.SetChildAgentThrottle(cAgent.Throttles);
m_headrotation = cAgent.HeadRotation;
Rotation = cAgent.BodyRotation;
m_AgentControlFlags = (AgentManager.ControlFlags)cAgent.ControlFlags;
if (m_scene.Permissions.IsGod(new UUID(cAgent.AgentID)))
GodLevel = cAgent.GodLevel;
SetAlwaysRun = cAgent.AlwaysRun;
Appearance = new AvatarAppearance(cAgent.Appearance);
if (PhysicsActor != null)
{
bool isFlying = Flying;
RemoveFromPhysicalScene();
AddToPhysicalScene(isFlying);
}
try
{
lock (scriptedcontrols)
{
if (cAgent.Controllers != null)
{
scriptedcontrols.Clear();
foreach (ControllerData c in cAgent.Controllers)
{
ScriptControllers sc = new ScriptControllers();
sc.itemID = c.ItemID;
sc.ignoreControls = (ScriptControlled)c.IgnoreControls;
sc.eventControls = (ScriptControlled)c.EventControls;
scriptedcontrols[sc.itemID] = sc;
}
}
}
}
catch { }
// FIXME: Why is this null check necessary? Where are the cases where we get a null Anims object?
if (cAgent.Anims != null)
Animator.Animations.FromArray(cAgent.Anims);
if (cAgent.AttachmentObjects != null && cAgent.AttachmentObjects.Count > 0)
{
m_attachments = new List<SceneObjectGroup>();
int i = 0;
foreach (ISceneObject so in cAgent.AttachmentObjects)
{
((SceneObjectGroup)so).LocalId = 0;
((SceneObjectGroup)so).RootPart.ClearUpdateSchedule();
so.SetState(cAgent.AttachmentObjectStates[i++], m_scene);
m_scene.IncomingCreateObject(so);
}
}
}
示例12: CopyFrom
public void CopyFrom(AgentData cAgent)
{
try
{
m_callbackURI = cAgent.CallbackURI;
m_pos = cAgent.Position;
Velocity = cAgent.Velocity;
m_CameraCenter = cAgent.Center;
//m_avHeight = cAgent.Size.Z;
m_CameraAtAxis = cAgent.AtAxis;
m_CameraLeftAxis = cAgent.LeftAxis;
m_CameraUpAxis = cAgent.UpAxis;
DrawDistance = cAgent.Far;
if ((cAgent.Throttles != null) && cAgent.Throttles.Length > 0)
ControllingClient.SetChildAgentThrottle(cAgent.Throttles);
m_headrotation = cAgent.HeadRotation;
m_bodyRot = cAgent.BodyRotation;
m_AgentControlFlags = (AgentManager.ControlFlags)cAgent.ControlFlags;
//if (m_scene.Permissions.IsGod(new UUID(cAgent.AgentID)))
// m_godLevel = cAgent.GodLevel;
m_speedModifier = cAgent.Speed;
DrawDistance = cAgent.DrawDistance;
m_setAlwaysRun = cAgent.AlwaysRun;
IAvatarAppearanceModule appearance = RequestModuleInterface<IAvatarAppearanceModule> ();
if (appearance != null)
{
appearance.InitialHasWearablesBeenSent = cAgent.SentInitialWearables;
appearance.Appearance = new AvatarAppearance (cAgent.Appearance);
}
try
{
IScriptControllerModule m = RequestModuleInterface<IScriptControllerModule> ();
if (m != null)
if (cAgent.Controllers != null)
m.Deserialize(cAgent.Controllers);
}
catch { }
// Animations
try
{
Animator.ResetAnimations();
Animator.Animations.FromArray(cAgent.Anims);
}
catch { }
}
catch(Exception ex)
{
m_log.Warn("[ScenePresence]: Error in CopyFrom: " + ex.ToString());
}
}
示例13: CopyFrom
public void CopyFrom(AgentData cAgent)
{
try
{
m_callbackURI = cAgent.CallbackURI;
m_pos = cAgent.Position;
Velocity = cAgent.Velocity;
m_CameraCenter = cAgent.Center;
SetHeight (cAgent.Size.Z);
m_CameraAtAxis = cAgent.AtAxis;
m_CameraLeftAxis = cAgent.LeftAxis;
m_CameraUpAxis = cAgent.UpAxis;
DrawDistance = cAgent.Far;
if ((cAgent.Throttles != null) && cAgent.Throttles.Length > 0)
ControllingClient.SetChildAgentThrottle(cAgent.Throttles);
m_headrotation = cAgent.HeadRotation;
m_bodyRot = cAgent.BodyRotation;
m_AgentControlFlags = (AgentManager.ControlFlags)cAgent.ControlFlags;
m_savedVelocity = cAgent.Velocity;
SpeedModifier = cAgent.Speed;
DrawDistance = cAgent.DrawDistance;
m_setAlwaysRun = cAgent.AlwaysRun;
if(cAgent.IsCrossing)
((Scene)m_scene).AuthenticateHandler.GetAgentCircuitData (UUID).teleportFlags |= (uint)OpenMetaverse.TeleportFlags.ViaRegionID;
IAvatarAppearanceModule appearance = RequestModuleInterface<IAvatarAppearanceModule> ();
if (appearance != null)
{
appearance.InitialHasWearablesBeenSent = cAgent.SentInitialWearables;
appearance.Appearance = new AvatarAppearance (cAgent.Appearance);
}
try
{
IScriptControllerModule m = RequestModuleInterface<IScriptControllerModule> ();
if (m != null)
if (cAgent.Controllers != null)
m.Deserialize(cAgent.Controllers);
}
catch { }
// Animations
try
{
Animator.ResetAnimations();
Animator.Animations.FromArray(cAgent.Anims);
}
catch { }
}
catch(Exception ex)
{
m_log.Warn("[ScenePresence]: Error in CopyFrom: " + ex.ToString());
}
}
示例14: HandleAgentUpdate
/// <summary>
/// This is the event handler for client movement. If a client is moving, this event is triggering.
/// </summary>
public void HandleAgentUpdate(IClientAPI remoteClient, AgentUpdateArgs agentData)
{
//if (m_isChildAgent)
//{
// // m_log.Debug("DEBUG: HandleAgentUpdate: child agent");
// return;
//}
m_perfMonMS = Util.EnvironmentTickCount();
++m_movementUpdateCount;
if (m_movementUpdateCount < 1)
m_movementUpdateCount = 1;
#region Sanity Checking
// This is irritating. Really.
if (!AbsolutePosition.IsFinite())
{
RemoveFromPhysicalScene();
m_log.Error("[AVATAR]: NonFinite Avatar position detected... Reset Position. Mantis this please. Error #9999902");
m_pos = m_LastFinitePos;
if (!m_pos.IsFinite())
{
m_pos.X = 127f;
m_pos.Y = 127f;
m_pos.Z = 127f;
m_log.Error("[AVATAR]: NonFinite Avatar position detected... Reset Position. Mantis this please. Error #9999903");
}
AddToPhysicalScene(false);
}
else
{
m_LastFinitePos = m_pos;
}
#endregion Sanity Checking
#region Inputs
AgentManager.ControlFlags flags = (AgentManager.ControlFlags)agentData.ControlFlags;
Quaternion bodyRotation = agentData.BodyRotation;
// Camera location in world. We'll need to raytrace
// from this location from time to time.
m_CameraCenter = agentData.CameraCenter;
if (Vector3.Distance(m_lastCameraCenter, m_CameraCenter) >= Scene.RootReprioritizationDistance)
{
ReprioritizeUpdates();
m_lastCameraCenter = m_CameraCenter;
}
// Use these three vectors to figure out what the agent is looking at
// Convert it to a Matrix and/or Quaternion
m_CameraAtAxis = agentData.CameraAtAxis;
m_CameraLeftAxis = agentData.CameraLeftAxis;
m_CameraUpAxis = agentData.CameraUpAxis;
// The Agent's Draw distance setting
// When we get to the point of re-computing neighbors everytime this
// changes, then start using the agent's drawdistance rather than the
// region's draw distance.
// m_DrawDistance = agentData.Far;
m_DrawDistance = Scene.DefaultDrawDistance;
// Check if Client has camera in 'follow cam' or 'build' mode.
Vector3 camdif = (Vector3.One * m_bodyRot - Vector3.One * CameraRotation);
m_followCamAuto = ((m_CameraUpAxis.Z > 0.959f && m_CameraUpAxis.Z < 0.98f)
&& (Math.Abs(camdif.X) < 0.4f && Math.Abs(camdif.Y) < 0.4f)) ? true : false;
m_mouseLook = (flags & AgentManager.ControlFlags.AGENT_CONTROL_MOUSELOOK) != 0;
m_leftButtonDown = (flags & AgentManager.ControlFlags.AGENT_CONTROL_LBUTTON_DOWN) != 0;
#endregion Inputs
if ((flags & AgentManager.ControlFlags.AGENT_CONTROL_STAND_UP) != 0)
{
StandUp();
}
//m_log.DebugFormat("[FollowCam]: {0}", m_followCamAuto);
// Raycast from the avatar's head to the camera to see if there's anything blocking the view
if ((m_movementUpdateCount % NumMovementsBetweenRayCast) == 0 && m_scene.PhysicsScene.SupportsRayCast())
{
if (m_followCamAuto)
{
Vector3 posAdjusted = m_pos + HEAD_ADJUSTMENT;
m_scene.PhysicsScene.RaycastWorld(m_pos, Vector3.Normalize(m_CameraCenter - posAdjusted), Vector3.Distance(m_CameraCenter, posAdjusted) + 0.3f, RayCastCameraCallback);
}
}
lock (scriptedcontrols)
{
if (scriptedcontrols.Count > 0)
//.........这里部分代码省略.........
示例15: HandleAgentUpdate
/// <summary>
/// This is the event handler for client movement. If a client is moving, this event is triggering.
/// </summary>
public void HandleAgentUpdate(IClientAPI remoteClient, AgentUpdateArgs agentData)
{
// m_log.DebugFormat(
// "[SCENE PRESENCE]: In {0} received agent update from {1}, flags {2}",
// Scene.Name, remoteClient.Name, (AgentManager.ControlFlags)agentData.ControlFlags);
if (IsChildAgent)
{
// m_log.DebugFormat("DEBUG: HandleAgentUpdate: child agent in {0}", Scene.Name);
return;
}
if (IsInTransit)
return;
#region Sanity Checking
// This is irritating. Really.
if (!AbsolutePosition.IsFinite())
{
RemoveFromPhysicalScene();
m_log.Error("[AVATAR]: NonFinite Avatar position detected... Reset Position. Mantis this please. Error #9999902");
m_pos = m_LastFinitePos;
if (!m_pos.IsFinite())
{
m_pos.X = 127f;
m_pos.Y = 127f;
m_pos.Z = 127f;
m_log.Error("[AVATAR]: NonFinite Avatar position detected... Reset Position. Mantis this please. Error #9999903");
}
AddToPhysicalScene(false);
}
else
{
m_LastFinitePos = m_pos;
}
#endregion Sanity Checking
#region Inputs
AgentManager.ControlFlags flags = (AgentManager.ControlFlags)agentData.ControlFlags;
// The Agent's Draw distance setting
// When we get to the point of re-computing neighbors everytime this
// changes, then start using the agent's drawdistance rather than the
// region's draw distance.
DrawDistance = agentData.Far;
m_mouseLook = (flags & AgentManager.ControlFlags.AGENT_CONTROL_MOUSELOOK) != 0;
// FIXME: This does not work as intended because the viewer only sends the lbutton down when the button
// is first pressed, not whilst it is held down. If this is required in the future then need to look
// for an AGENT_CONTROL_LBUTTON_UP event and make sure to handle cases where an initial DOWN is not
// received (e.g. on holding LMB down on the avatar in a viewer).
m_leftButtonDown = (flags & AgentManager.ControlFlags.AGENT_CONTROL_LBUTTON_DOWN) != 0;
#endregion Inputs
// // Make anims work for client side autopilot
// if ((flags & AgentManager.ControlFlags.AGENT_CONTROL_AT_POS) != 0)
// m_updateCount = UPDATE_COUNT;
//
// // Make turning in place work
// if ((flags & AgentManager.ControlFlags.AGENT_CONTROL_YAW_POS) != 0 ||
// (flags & AgentManager.ControlFlags.AGENT_CONTROL_YAW_NEG) != 0)
// m_updateCount = UPDATE_COUNT;
if ((flags & AgentManager.ControlFlags.AGENT_CONTROL_STAND_UP) != 0)
{
StandUp();
}
// Raycast from the avatar's head to the camera to see if there's anything blocking the view
// this exclude checks may not be complete
if (m_movementUpdateCount % NumMovementsBetweenRayCast == 0 && m_scene.PhysicsScene.SupportsRayCast())
{
if (!m_doingCamRayCast && !m_mouseLook && ParentID == 0)
{
Vector3 posAdjusted = AbsolutePosition;
// posAdjusted.Z += 0.5f * Appearance.AvatarSize.Z - 0.5f;
posAdjusted.Z += 1.0f; // viewer current camera focus point
Vector3 tocam = CameraPosition - posAdjusted;
tocam.X = (float)Math.Round(tocam.X, 1);
tocam.Y = (float)Math.Round(tocam.Y, 1);
tocam.Z = (float)Math.Round(tocam.Z, 1);
float distTocamlen = tocam.Length();
if (distTocamlen > 0.3f)
{
tocam *= (1.0f / distTocamlen);
posAdjusted.X = (float)Math.Round(posAdjusted.X, 1);
//.........这里部分代码省略.........