public AgentPreferencesData(AgentPreferencesData data) { if (data != null) { this.HoverHeight = data.HoverHeight; this.AccessPrefs = data.AccessPrefs; this.Language = data.Language; this.LanguageIsPublic = data.LanguageIsPublic; this.PermEveryone = data.PermEveryone; this.PermGroup = data.PermGroup; this.PermNextOwner = data.PermNextOwner; this.PrincipalID = data.PrincipalID; } }
/// <summary> /// Deserialization of agent data. /// Avoiding reflection makes it painful to write, but that's the price! /// </summary> /// <param name="hash"></param> public virtual void Unpack(OSDMap args) { if (args.ContainsKey("region_handle")) { UInt64.TryParse(args["region_handle"].AsString(), out RegionHandle); } if (args.ContainsKey("circuit_code")) { UInt32.TryParse((string)args["circuit_code"].AsString(), out CircuitCode); } if (args.ContainsKey("agent_uuid")) { AgentID = args["agent_uuid"].AsUUID(); } if (args.ContainsKey("session_uuid")) { SessionID = args["session_uuid"].AsUUID(); } if (args.ContainsKey("position")) { Vector3.TryParse(args["position"].AsString(), out Position); } if (args.ContainsKey("velocity")) { Vector3.TryParse(args["velocity"].AsString(), out Velocity); } if (args.ContainsKey("center")) { Vector3.TryParse(args["center"].AsString(), out Center); } if (args.ContainsKey("size")) { Vector3.TryParse(args["size"].AsString(), out Size); } if (args.ContainsKey("at_axis")) { Vector3.TryParse(args["at_axis"].AsString(), out AtAxis); } if (args.ContainsKey("left_axis")) { Vector3.TryParse(args["left_axis"].AsString(), out AtAxis); } if (args.ContainsKey("up_axis")) { Vector3.TryParse(args["up_axis"].AsString(), out AtAxis); } if (args.ContainsKey("changed_grid")) { ChangedGrid = args["changed_grid"].AsBoolean(); } if (args.ContainsKey("far")) { Far = (float)(args["far"].AsReal()); } if (args.ContainsKey("aspect")) { Aspect = (float)args["aspect"].AsReal(); } if (args.ContainsKey("throttles")) { Throttles = args["throttles"].AsBinary(); } if (args.ContainsKey("locomotion_state")) { UInt32.TryParse(args["locomotion_state"].AsString(), out LocomotionState); } if (args.ContainsKey("head_rotation")) { Quaternion.TryParse(args["head_rotation"].AsString(), out HeadRotation); } if (args.ContainsKey("body_rotation")) { Quaternion.TryParse(args["body_rotation"].AsString(), out BodyRotation); } if (args.ContainsKey("control_flags")) { UInt32.TryParse(args["control_flags"].AsString(), out ControlFlags); } if (args.ContainsKey("energy_level")) { EnergyLevel = (float)(args["energy_level"].AsReal()); } if (args.ContainsKey("god_level")) { Byte.TryParse(args["god_level"].AsString(), out GodLevel); } if (args.ContainsKey("always_run")) { AlwaysRun = args["always_run"].AsBoolean(); } if (args.ContainsKey("prey_agent")) { PreyAgent = args["prey_agent"].AsUUID(); } if (args.ContainsKey("agent_access")) { Byte.TryParse(args["agent_access"].AsString(), out AgentAccess); } if (args.ContainsKey("active_group_id")) { ActiveGroupID = args["active_group_id"].AsUUID(); } if ((args.ContainsKey("groups")) && (args["groups"]).Type == OSDType.Array) { OSDArray groups = (OSDArray)(args["groups"]); Groups = new AgentGroupData[groups.Count]; int i = 0; foreach (OSD o in groups) { if (o.Type == OSDType.Map) { Groups[i++] = new AgentGroupData((OSDMap)o); } } } if ((args.ContainsKey("animations")) && (args["animations"]).Type == OSDType.Array) { OSDArray anims = (OSDArray)(args["animations"]); Anims = new Animation[anims.Count]; int i = 0; foreach (OSD o in anims) { if (o.Type == OSDType.Map) { Anims[i++] = new Animation((OSDMap)o); } } } // Initialize an Appearance Appearance = new AvatarAppearance(AgentID); if (args.ContainsKey("texture_entry")) { byte[] data = args["texture_entry"].AsBinary(); Primitive.TextureEntry textureEntries = new Primitive.TextureEntry(data, 0, data.Length); Appearance.SetTextureEntries(textureEntries); } if (args.ContainsKey("visual_params")) { byte[] visualParams = args["visual_params"].AsBinary(); Appearance.SetVisualParams(visualParams); } if ((args.ContainsKey("wearables")) && (args["wearables"]).Type == OSDType.Array) { OSDArray wears = (OSDArray)(args["wearables"]); List <AvatarWearable> wearables = new List <AvatarWearable>(); int offset = 0; for (int i = 0; i < AvatarWearable.MAX_WEARABLES; i++) { if ((offset + 1) < wears.Count) { UUID itemID = wears[offset++].AsUUID(); UUID assetID = wears[offset++].AsUUID(); wearables.Add(new AvatarWearable(i, itemID, assetID)); } else { break; } } Appearance.SetWearables(wearables); } if (args.ContainsKey("callback_uri")) { CallbackURI = args["callback_uri"].AsString(); } if (args.ContainsKey("avatar_as_a_prim")) { AvatarAsAPrim = args["avatar_as_a_prim"].AsBoolean(); } if (args.ContainsKey("sat_on_group")) { SatOnGroup = args["sat_on_group"].AsUUID(); SatOnPrim = args["sat_on_prim"].AsUUID(); try { // "sit_offset" previously used OSD.FromVector3(vec) was used to store the data. // Other Vector3 storage uses OSD.FromString(vec.ToString()). // If originating from old region code, that will still be the case // and the TryParse will trigger a format exception. Vector3.TryParse(args["sit_offset"].ToString(), out SatOnPrimOffset); } catch (Exception) { // The following is compatible with OSD.FromVector3(vec), since Vector3.TryParse is not. SatOnPrimOffset = args["sit_offset"].AsVector3(); } } // Initialize AgentPrefs from viewer AgentPrefs = new AgentPreferencesData(); if (args.ContainsKey("hover_height")) { AgentPrefs.HoverHeight = args["hover_height"]; } if (args.ContainsKey("access_prefs")) { AgentPrefs.AccessPrefs = args["access_prefs"]; } if (args.ContainsKey("perm_everyone")) { AgentPrefs.PermEveryone = args["perm_everyone"]; } if (args.ContainsKey("perm_group")) { AgentPrefs.PermGroup = args["perm_group"]; } if (args.ContainsKey("perm_next_owner")) { AgentPrefs.PermNextOwner = args["perm_next_owner"]; } if (args.ContainsKey("language")) { AgentPrefs.Language = args["language"]; } if (args.ContainsKey("language_is_public")) { AgentPrefs.LanguageIsPublic = args["language_is_public"]; } if (args.ContainsKey("principal_id")) { AgentPrefs.PrincipalID = args["principal_id"]; } }