Some plumbing for additional agent update messages. Not used yet. Removed the compilation warnings on this file, and completed the packing/unpacking of AgentData (VisualParams, Anims and Groups).

0.6.2-post-fixes
diva 2009-01-03 00:00:37 +00:00
parent c0024b5df0
commit 82700448f5
1 changed files with 236 additions and 14 deletions

View File

@ -60,26 +60,150 @@ namespace OpenSim.Framework
public ChildAgentDataUpdate(AgentData agent)
{
if (agent.ActiveGroupID != null)
ActiveGroupID = agent.ActiveGroupID.Guid;
if (agent.AgentID != null)
AgentID = agent.AgentID.Guid;
ActiveGroupID = agent.ActiveGroupID.Guid;
AgentID = agent.AgentID.Guid;
alwaysrun = agent.AlwaysRun;
if (agent.Size != null)
AVHeight = agent.Size.Z;
if (agent.Center != null)
cameraPosition = new sLLVector3(agent.Center);
AVHeight = agent.Size.Z;
cameraPosition = new sLLVector3(agent.Center);
drawdistance = agent.Far;
godlevel = (float)agent.GodLevel;
if (agent.Groups.Length > 0)
GroupAccess = (uint)agent.Groups[0].GroupPowers;
if (agent.Position != null)
Position = new sLLVector3(agent.Position);
Position = new sLLVector3(agent.Position);
regionHandle = agent.RegionHandle;
throttles = agent.Throttles;
if (agent.Velocity != null)
Velocity = new sLLVector3(agent.Velocity);
Velocity = new sLLVector3(agent.Velocity);
}
public ChildAgentDataUpdate(AgentPosition agent)
{
AgentID = agent.AgentID.Guid;
AVHeight = agent.Size.Z;
cameraPosition = new sLLVector3(agent.Center);
drawdistance = agent.Far;
Position = new sLLVector3(agent.Position);
regionHandle = agent.RegionHandle;
throttles = agent.Throttles;
Velocity = new sLLVector3(agent.Velocity);
}
}
/// <summary>
/// Replacement for ChildAgentDataUpdate. Used over RESTComms and LocalComms.
/// </summary>
public class AgentPosition
{
public ulong RegionHandle;
public uint CircuitCode;
public UUID AgentID;
public UUID SessionID;
public float Far;
public Vector3 Position;
public Vector3 Velocity;
public Vector3 Center;
public Vector3 Size;
public Vector3 AtAxis;
public Vector3 LeftAxis;
public Vector3 UpAxis;
public bool ChangedGrid;
// This probably shouldn't be here
public byte[] Throttles;
public OSDMap PackUpdateMessage()
{
OSDMap args = new OSDMap();
args["message_type"] = OSD.FromString("AgentPosition");
args["region_handle"] = OSD.FromString(RegionHandle.ToString());
args["circuit_code"] = OSD.FromString(CircuitCode.ToString());
args["agent_uuid"] = OSD.FromUUID(AgentID);
args["session_uuid"] = OSD.FromUUID(SessionID);
args["position"] = OSD.FromString(Position.ToString());
args["velocity"] = OSD.FromString(Velocity.ToString());
args["center"] = OSD.FromString(Center.ToString());
args["size"] = OSD.FromString(Size.ToString());
args["at_axis"] = OSD.FromString(AtAxis.ToString());
args["left_axis"] = OSD.FromString(LeftAxis.ToString());
args["up_axis"] = OSD.FromString(UpAxis.ToString());
args["far"] = OSD.FromReal(Far);
args["changed_grid"] = OSD.FromBoolean(ChangedGrid);
if ((Throttles != null) && (Throttles.Length > 0))
args["throttles"] = OSD.FromBinary(Throttles);
return args;
}
public void UnpackUpdateMessage(OSDMap args)
{
if (args.ContainsKey("region_handle"))
UInt64.TryParse(args["region_handle"].AsString(), out RegionHandle);
if (args["circuit_code"] != null)
UInt32.TryParse((string)args["circuit_code"].AsString(), out CircuitCode);
if (args["agent_uuid"] != null)
AgentID = args["agent_uuid"].AsUUID();
if (args["session_uuid"] != null)
SessionID = args["session_uuid"].AsUUID();
if (args["position"] != null)
Vector3.TryParse(args["position"].AsString(), out Position);
if (args["velocity"] != null)
Vector3.TryParse(args["velocity"].AsString(), out Velocity);
if (args["center"] != null)
Vector3.TryParse(args["center"].AsString(), out Center);
if (args["size"] != null)
Vector3.TryParse(args["size"].AsString(), out Size);
if (args["at_axis"] != null)
Vector3.TryParse(args["at_axis"].AsString(), out AtAxis);
if (args["left_axis"] != null)
Vector3.TryParse(args["left_axis"].AsString(), out AtAxis);
if (args["up_axis"] != null)
Vector3.TryParse(args["up_axis"].AsString(), out AtAxis);
if (args["changed_grid"] != null)
ChangedGrid = args["changed_grid"].AsBoolean();
if (args["far"] != null)
Far = (float)(args["far"].AsReal());
if (args["throttles"] != null)
Throttles = args["throttles"].AsBinary();
}
/// <summary>
/// Soon to be decommissioned
/// </summary>
/// <param name="cAgent"></param>
public void CopyFrom(ChildAgentDataUpdate cAgent)
{
AgentID = new UUID(cAgent.AgentID);
// next: ???
Size = new Vector3();
Size.Z = cAgent.AVHeight;
Center = new Vector3(cAgent.cameraPosition.x, cAgent.cameraPosition.y, cAgent.cameraPosition.z);
Far = cAgent.drawdistance;
Position = new Vector3(cAgent.Position.x, cAgent.Position.y, cAgent.Position.z);
RegionHandle = cAgent.regionHandle;
Throttles = cAgent.throttles;
Velocity = new Vector3(cAgent.Velocity.x, cAgent.Velocity.y, cAgent.Velocity.z);
}
}
public class AgentGroupData
@ -94,12 +218,58 @@ namespace OpenSim.Framework
GroupPowers = powers;
AcceptNotices = notices;
}
public AgentGroupData(OSDMap args)
{
UnpackUpdateMessage(args);
}
public OSDMap PackUpdateMessage()
{
OSDMap groupdata = new OSDMap();
groupdata["group_id"] = OSD.FromUUID(GroupID);
groupdata["group_powers"] = OSD.FromString(GroupPowers.ToString());
groupdata["accept_notices"] = OSD.FromBoolean(AcceptNotices);
return groupdata;
}
public void UnpackUpdateMessage(OSDMap args)
{
if (args["group_id"] != null)
GroupID = args["group_id"].AsUUID();
if (args["group_powers"] != null)
UInt64.TryParse((string)args["group_powers"].AsString(), out GroupPowers);
if (args["accept_notices"] != null)
AcceptNotices = args["accept_notices"].AsBoolean();
}
}
public class AgentAnimationData
{
public UUID Animation;
public UUID ObjectID;
public AgentAnimationData(OSDMap args)
{
UnpackUpdateMessage(args);
}
public OSDMap PackUpdateMessage()
{
OSDMap anim = new OSDMap();
anim["animation"] = OSD.FromUUID(Animation);
anim["object_id"] = OSD.FromUUID(ObjectID);
return anim;
}
public void UnpackUpdateMessage(OSDMap args)
{
if (args["animation"] != null)
Animation = args["animation"].AsUUID();
if (args["object_id"] != null)
ObjectID = args["object_id"].AsUUID();
}
}
public class AgentData
@ -142,13 +312,15 @@ namespace OpenSim.Framework
public UUID GranterID;
public Dictionary<string, string> NVPairs;
byte[] VisualParams;
public byte[] VisualParams;
public string CallbackURI;
public OSDMap PackUpdateMessage()
{
OSDMap args = new OSDMap();
args["message_type"] = OSD.FromString("AgentData");
args["region_handle"] = OSD.FromString(RegionHandle.ToString());
args["circuit_code"] = OSD.FromString(CircuitCode.ToString());
args["agent_uuid"] = OSD.FromUUID(AgentID);
@ -190,7 +362,26 @@ namespace OpenSim.Framework
args["active_group_id"] = OSD.FromUUID(ActiveGroupID);
// Last few fields are still missing
if ((Groups != null) && (Groups.Length > 0))
{
OSDArray groups = new OSDArray(Groups.Length);
foreach (AgentGroupData agd in Groups)
groups.Add(agd.PackUpdateMessage());
args["groups"] = groups;
}
if ((Anims != null) && (Anims.Length > 0))
{
OSDArray anims = new OSDArray(Anims.Length);
foreach (AgentAnimationData aanim in Anims)
anims.Add(aanim.PackUpdateMessage());
args["animations"] = anims;
}
if ((VisualParams != null) && (VisualParams.Length > 0))
args["visual_params"] = OSD.FromBinary(VisualParams);
// Last few fields are still missing: granter and NVPais
if ((CallbackURI != null) && (!CallbackURI.Equals("")))
args["callback_uri"] = OSD.FromString(CallbackURI);
@ -289,6 +480,37 @@ namespace OpenSim.Framework
if (args["active_group_id"] != null)
ActiveGroupID = args["active_group_id"].AsUUID();
if ((args["groups"] != null) && (args["groups"]).Type == OpenMetaverse.StructuredData.OSDType.Array)
{
OSDArray groups = (OSDArray)(args["groups"]);
Groups = new AgentGroupData[groups.Count];
int i = 0;
foreach (OSD o in groups)
{
if (o.Type == OpenMetaverse.StructuredData.OSDType.Map)
{
Groups[i++] = new AgentGroupData((OSDMap)o);
}
}
}
if ((args["animations"] != null) && (args["animations"]).Type == OpenMetaverse.StructuredData.OSDType.Array)
{
OSDArray anims = (OSDArray)(args["animations"]);
Anims = new AgentAnimationData[anims.Count];
int i = 0;
foreach (OSD o in anims)
{
if (o.Type == OpenMetaverse.StructuredData.OSDType.Map)
{
Anims[i++] = new AgentAnimationData((OSDMap)o);
}
}
}
if (args["visual_params"] != null)
VisualParams = args["visual_params"].AsBinary();
if (args["callback_uri"] != null)
CallbackURI = args["callback_uri"].AsString();
}