本文整理汇总了C#中IScenePresence.MakeChildAgent方法的典型用法代码示例。如果您正苦于以下问题:C# IScenePresence.MakeChildAgent方法的具体用法?C# IScenePresence.MakeChildAgent怎么用?C# IScenePresence.MakeChildAgent使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类IScenePresence
的用法示例。
在下文中一共展示了IScenePresence.MakeChildAgent方法的5个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: MakeChildAgent
public void MakeChildAgent(IScenePresence sp, GridRegion finalDestination, bool isCrossing)
{
if (sp == null)
return;
sp.SetAgentLeaving(finalDestination);
//Kill the groups here, otherwise they will become ghost attachments
// and stay in the sim, they'll get readded below into the new sim
//KillAttachments(sp);
// Well, this is it. The agent is over there.
KillEntity(sp.Scene, sp);
//Make it a child agent for now... the grid will kill us later if we need to close
sp.MakeChildAgent(finalDestination);
if (isCrossing)
sp.SuccessfulCrossingTransit(finalDestination);
}
示例2: InternalCross
public virtual void InternalCross(IScenePresence agent, Vector3 attemptedPos, bool isFlying, GridRegion crossingRegion)
{
if(agent.PhysicsActor != null)
agent.PhysicsActor.IsPhysical = false;
MainConsole.Instance.DebugFormat("[EntityTransferModule]: Crossing agent {0} to region {1}", agent.Name, crossingRegion.RegionName);
try
{
agent.SetAgentLeaving(crossingRegion);
AgentData cAgent = new AgentData();
agent.CopyTo(cAgent);
cAgent.Position = attemptedPos;
if (isFlying)
cAgent.ControlFlags |= (uint)AgentManager.ControlFlags.AGENT_CONTROL_FLY;
AgentCircuitData agentCircuit = BuildCircuitDataForPresence(agent, attemptedPos);
agentCircuit.teleportFlags = (uint)TeleportFlags.ViaRegionID;
IEventQueueService eq = agent.Scene.RequestModuleInterface<IEventQueueService>();
if (eq != null)
{
//This does UpdateAgent and closing of child agents
// messages if they need to be called
ISyncMessagePosterService syncPoster =
agent.Scene.RequestModuleInterface<ISyncMessagePosterService>();
if (syncPoster != null)
{
syncPoster.Get(SyncMessageHelper.CrossAgent(crossingRegion, attemptedPos,
agent.Velocity, agentCircuit, cAgent,
agent.Scene.RegionInfo.RegionHandle),
agent.UUID, agent.Scene.RegionInfo.RegionHandle,
(map) =>
{
if (map == null || !map["success"].AsBoolean())
{
//Tell modules that we have failed
agent.AgentFailedToLeave();
if (map != null)
{
if (map.ContainsKey("Note") && !map["Note"].AsBoolean())
return;
agent.ControllingClient.SendTeleportFailed(map["Reason"].AsString());
}
else
agent.ControllingClient.SendTeleportFailed("TP Failed");
if (agent.PhysicsActor != null)
agent.PhysicsActor.IsPhysical = true; //Fix the setting that we set earlier
// In any case
agent.FailedCrossingTransit(crossingRegion);
return;
}
//We're killing the animator and the physics actor, so we don't need to worry about agent.PhysicsActor.IsPhysical
agent.MakeChildAgent(crossingRegion);
//Revolution- We already were in this region... we don't need updates about the avatars we already know about, right?
// OLD: now we have a child agent in this region. Request and send all interesting data about (root) agents in the sim
//agent.SendOtherAgentsAvatarDataToMe();
//agent.SendOtherAgentsAppearanceToMe();
//Kill the groups here, otherwise they will become ghost attachments
// and stay in the sim, they'll get readded below into the new sim
//KillAttachments(agent);
// In any case
agent.SuccessfulCrossingTransit(crossingRegion);
});
}
}
}
catch(Exception ex)
{
MainConsole.Instance.Warn("[EntityTransferModule]: Exception in crossing: " + ex);
}
}
示例3: MakeChildAgent
public void MakeChildAgent (IScenePresence sp, GridRegion finalDestination, bool markAgentAsLeaving)
{
if(sp == null)
return;
if(markAgentAsLeaving)
sp.SetAgentLeaving(null);
sp.Scene.AuroraEventManager.FireGenericEventHandler("SendingAttachments", new object[] { finalDestination, sp });
//Kill the groups here, otherwise they will become ghost attachments
// and stay in the sim, they'll get readded below into the new sim
//KillAttachments(sp);
// Well, this is it. The agent is over there.
KillEntity(sp.Scene, sp);
//Make it a child agent for now... the grid will kill us later if we need to close
sp.MakeChildAgent(finalDestination);
}
示例4: CrossAgentToNewRegionAsync
/// <summary>
/// This Closes child agents on neighboring regions
/// Calls an asynchronous method to do so.. so it doesn't lag the sim.
/// </summary>
protected IScenePresence CrossAgentToNewRegionAsync(IScenePresence agent, Vector3 pos,
GridRegion crossingRegion, bool isFlying, bool positionIsAlreadyFixed)
{
m_log.DebugFormat("[EntityTransferModule]: Crossing agent {0} to region {1}", agent.Name, crossingRegion.RegionName);
IScene m_scene = agent.Scene;
try
{
if (crossingRegion != null)
{
//Make sure that all attachments are ready for the teleport
IAttachmentsModule attModule = agent.Scene.RequestModuleInterface<IAttachmentsModule>();
if (attModule != null)
attModule.ValidateAttachments(agent.UUID);
if(!positionIsAlreadyFixed)
{
int xOffset = crossingRegion.RegionLocX - m_scene.RegionInfo.RegionLocX;
int yOffset = crossingRegion.RegionLocY - m_scene.RegionInfo.RegionLocY;
if(xOffset < 0)
pos.X += m_scene.RegionInfo.RegionSizeX;
else if(xOffset > 0)
pos.X -= m_scene.RegionInfo.RegionSizeX;
if(yOffset < 0)
pos.Y += m_scene.RegionInfo.RegionSizeY;
else if(yOffset > 0)
pos.Y -= m_scene.RegionInfo.RegionSizeY;
//Make sure that they are within bounds (velocity can push it out of bounds)
if(pos.X < 0)
pos.X = 1;
if(pos.Y < 0)
pos.Y = 1;
if(pos.X > crossingRegion.RegionSizeX)
pos.X = crossingRegion.RegionSizeX - 1;
if(pos.Y > crossingRegion.RegionSizeY)
pos.Y = crossingRegion.RegionSizeY - 1;
}
AgentData cAgent = new AgentData();
agent.CopyTo(cAgent);
cAgent.Position = pos;
if (isFlying)
cAgent.ControlFlags |= (uint)AgentManager.ControlFlags.AGENT_CONTROL_FLY;
AgentCircuitData agentCircuit = agent.ControllingClient.RequestClientInfo();
agentCircuit.startpos = pos;
agentCircuit.child = false;
agentCircuit.teleportFlags = (uint)TeleportFlags.ViaRegionID;
IAvatarAppearanceModule appearance = agent.RequestModuleInterface<IAvatarAppearanceModule>();
if (appearance != null)
agentCircuit.Appearance = appearance.Appearance;
IEventQueueService eq = agent.Scene.RequestModuleInterface<IEventQueueService>();
if (eq != null)
{
//This does UpdateAgent and closing of child agents
// messages if they need to be called
ISyncMessagePosterService syncPoster = agent.Scene.RequestModuleInterface<ISyncMessagePosterService>();
if (syncPoster != null)
{
OSDMap map = syncPoster.Get(SyncMessageHelper.CrossAgent(crossingRegion, pos,
agent.Velocity, agentCircuit, cAgent, agent.Scene.RegionInfo.RegionHandle),
agent.UUID, agent.Scene.RegionInfo.RegionHandle);
bool result = false;
if (map != null)
result = map["Success"].AsBoolean();
if (!result)
{
//Fix user's attachments
attModule.RezAttachments (agent);
if (map != null)
{
if (map.ContainsKey("Note") && !map["Note"].AsBoolean ())
return agent;
agent.ControllingClient.SendTeleportFailed (map["Reason"].AsString ());
}
else
agent.ControllingClient.SendTeleportFailed ("TP Failed");
if (agent.PhysicsActor != null)
agent.PhysicsActor.IsPhysical = true; //Fix the setting that we set earlier
// In any case
agent.FailedCrossingTransit(crossingRegion);
return agent;
}
}
}
//We're killing the animator and the physics actor, so we don't need to worry about agent.PhysicsActor.IsPhysical
agent.MakeChildAgent(crossingRegion);
//Revolution- We already were in this region... we don't need updates about the avatars we already know about, right?
// OLD: now we have a child agent in this region. Request and send all interesting data about (root) agents in the sim
//.........这里部分代码省略.........
示例5: DoTeleport
public virtual void DoTeleport(IScenePresence sp, GridRegion finalDestination, Vector3 position, Vector3 lookAt, uint teleportFlags)
{
sp.ControllingClient.SendTeleportProgress(teleportFlags, "sending_dest");
if (finalDestination == null)
{
sp.ControllingClient.SendTeleportFailed("Unable to locate destination");
return;
}
m_log.DebugFormat(
"[ENTITY TRANSFER MODULE]: Request Teleport to {0}:{1}/{2}",
finalDestination.ServerURI, finalDestination.RegionName, position);
sp.ControllingClient.SendTeleportProgress(teleportFlags, "arriving");
// Fixing a bug where teleporting while sitting results in the avatar ending up removed from
// both regions
if (sp.ParentID != UUID.Zero)
sp.StandUp();
//Make sure that all attachments are ready for the teleport
IAttachmentsModule attModule = sp.Scene.RequestModuleInterface<IAttachmentsModule>();
if (attModule != null)
attModule.ValidateAttachments(sp.UUID);
AgentCircuitData agentCircuit = sp.ControllingClient.RequestClientInfo();
agentCircuit.startpos = position;
//The agent will be a root agent
agentCircuit.child = false;
//Make sure the appearnace is right
IAvatarAppearanceModule appearance = sp.RequestModuleInterface<IAvatarAppearanceModule> ();
agentCircuit.Appearance = appearance.Appearance;
AgentData agent = new AgentData();
sp.CopyTo(agent);
//Fix the position
agent.Position = position;
IEventQueueService eq = sp.Scene.RequestModuleInterface<IEventQueueService>();
if (eq != null)
{
ISyncMessagePosterService syncPoster = sp.Scene.RequestModuleInterface<ISyncMessagePosterService>();
if (syncPoster != null)
{
//This does CreateAgent and sends the EnableSimulator/EstablishAgentCommunication/TeleportFinish
// messages if they need to be called and deals with the callback
OSDMap map = syncPoster.Get(SyncMessageHelper.TeleportAgent((int)sp.DrawDistance,
agentCircuit, agent, teleportFlags, finalDestination, sp.Scene.RegionInfo.RegionHandle),
sp.UUID, sp.Scene.RegionInfo.RegionHandle);
bool result = false;
if(map != null)
result = map["Success"].AsBoolean();
if (!result)
{
// Fix the agent status
sp.IsChildAgent = false;
if(map != null)
sp.ControllingClient.SendTeleportFailed(map["Reason"].AsString());
else
sp.ControllingClient.SendTeleportFailed ("Teleport Failed");
return;
}
}
}
sp.Scene.AuroraEventManager.FireGenericEventHandler ("SendingAttachments", new object[2] { finalDestination, sp });
//Kill the groups here, otherwise they will become ghost attachments
// and stay in the sim, they'll get readded below into the new sim
KillAttachments(sp);
// Well, this is it. The agent is over there.
KillEntity(sp.Scene, sp);
//Make it a child agent for now... the grid will kill us later if we need to close
sp.MakeChildAgent();
}