private void ParseLindenAvatarParamDriver(XmlTextReader reader, VisualParam vp, Dictionary <string, string> attrs) { for (; ;) { if (!reader.Read()) { throw new InvalidDataException("invalid linden_avatar.xml"); } switch (reader.NodeType) { case XmlNodeType.Element: bool isEmptyElement = reader.IsEmptyElement; string elementName = reader.Name; attrs.Clear(); if (reader.MoveToFirstAttribute()) { do { attrs.Add(reader.Name, reader.Value); }while (reader.MoveToNextAttribute()); } switch (elementName) { case "driven": string drivVal; bool haveweight = attrs.ContainsKey("min1") || attrs.ContainsKey("min2") || attrs.ContainsKey("max1") || attrs.ContainsKey("max2"); double min1 = attrs.TryGetValue("min1", out drivVal) ? double.Parse(drivVal, CultureInfo.InvariantCulture) : 0; double min2 = attrs.TryGetValue("min2", out drivVal) ? double.Parse(drivVal, CultureInfo.InvariantCulture) : 0; double max1 = attrs.TryGetValue("max1", out drivVal) ? double.Parse(drivVal, CultureInfo.InvariantCulture) : 0; double max2 = attrs.TryGetValue("max2", out drivVal) ? double.Parse(drivVal, CultureInfo.InvariantCulture) : 0; m_DriverParams.Add(new DriverParam(vp.Id, uint.Parse(attrs["id"]), min1, max1, min2, max2, haveweight)); goto default; default: if (!isEmptyElement) { ReadToEndElementNoParamElement(reader); } break; } break; case XmlNodeType.EndElement: if (reader.Name != "param_driver") { throw new InvalidDataException("invalid linden_avatar.xml"); } return; } } }
/// <summary> /// Send an AgentSetAppearance packet to the server to update your appearance. /// </summary> protected void SendAgentSetAppearance() { // Get latest appearance info GetAvatarAppearanceInfoFromWearableAssets(); AgentSetAppearancePacket p = new AgentSetAppearancePacket(); p.AgentData.AgentID = Client.Network.AgentID; p.AgentData.SessionID = Client.Network.SessionID; p.AgentData.SerialNum = SerialNum++; // Add Texture Data p.ObjectData.TextureEntry = AgentTextureEntry.ToBytes(); p.VisualParam = new AgentSetAppearancePacket.VisualParamBlock[218]; string visualParamData = ""; int vpIndex = 0; // Add Visual Params lock (AgentAppearanceParams) { foreach (KeyValuePair <int, VisualParam> kvp in VisualParams.Params) { VisualParam param = kvp.Value; p.VisualParam[vpIndex] = new AgentSetAppearancePacket.VisualParamBlock(); visualParamData += vpIndex + "," + param.ParamID + ","; if (AgentAppearanceParams.ContainsKey(param.ParamID)) { p.VisualParam[vpIndex].ParamValue = Helpers.FloatToByte(AgentAppearanceParams[param.ParamID], param.MinValue, param.MaxValue); visualParamData += AgentAppearanceParams[param.ParamID] + "," + p.VisualParam[vpIndex].ParamValue + Environment.NewLine; } else { // Use the default value for this parameter p.VisualParam[vpIndex].ParamValue = Helpers.FloatToByte(param.DefaultValue, param.MinValue, param.MaxValue); visualParamData += "NA," + p.VisualParam[vpIndex].ParamValue + Environment.NewLine; } vpIndex++; } } // Add Size Data p.AgentData.Size = GetAgentSizeFromVisualParam(Helpers.ByteToFloat(p.VisualParam[33].ParamValue, VisualParams.Params[33].MinValue, VisualParams.Params[33].MaxValue)); Client.Network.SendPacket(p); }
private Dictionary <int, float> GetParamValues() { Dictionary <int, float> paramValues = new Dictionary <int, float>(VisualParams.Params.Count); foreach (KeyValuePair <int, VisualParam> kvp in VisualParams.Params) { VisualParam vp = kvp.Value; paramValues.Add(vp.ParamID, vp.DefaultValue); } return(paramValues); }
private void ParseLindenAvatarParamSkeleton(XmlTextReader reader, VisualParam vp, Dictionary <string, string> attrs) { for (; ;) { if (!reader.Read()) { throw new InvalidDataException("invalid linden_avatar.xml"); } switch (reader.NodeType) { case XmlNodeType.Element: bool isEmptyElement = reader.IsEmptyElement; string elementName = reader.Name; attrs.Clear(); if (reader.MoveToFirstAttribute()) { do { attrs.Add(reader.Name, reader.Value); }while (reader.MoveToNextAttribute()); } switch (elementName) { case "bone": string val; Vector3 scale = attrs.TryGetValue("scale", out val) ? FromAttrToVector(val) : Vector3.Zero; Vector3 offset = attrs.TryGetValue("offset", out val) ? FromAttrToVector(val) : Vector3.Zero; var bone = new BoneParam(attrs["name"], scale, offset); vp.Bones.Add(bone); goto default; default: if (!isEmptyElement) { ReadToEndElementNoParamElement(reader); } break; } break; case XmlNodeType.EndElement: if (reader.Name != "param_skeleton") { throw new InvalidDataException("invalid linden_avatar.xml"); } return; } } }
private void ParseLindenAvatarParam(XmlTextReader reader, Dictionary <string, string> attrs) { uint vpId; string vpName; double minValue; double maxValue; double defValue; string defValueStr; uint group = uint.MaxValue; if (attrs.ContainsKey("group")) { group = uint.Parse(attrs["group"]); } vpId = uint.Parse(attrs["id"]); if (!attrs.TryGetValue("name", out vpName)) { vpName = string.Empty; } try { minValue = double.Parse(attrs["value_min"], CultureInfo.InvariantCulture); maxValue = double.Parse(attrs["value_max"], CultureInfo.InvariantCulture); defValue = attrs.TryGetValue("value_default", out defValueStr) ? double.Parse(defValueStr, CultureInfo.InvariantCulture) : minValue; } catch { throw new InvalidDataException("Failed to parse parameter data"); } bool isshared = attrs.ContainsKey("shared"); var vp = new VisualParam(group, vpId, vpName, minValue, maxValue, defValue); for (; ;) { if (!reader.Read()) { throw new InvalidDataException("Invalid linden_avatar.xml"); } switch (reader.NodeType) { case XmlNodeType.Element: bool isEmptyElement = reader.IsEmptyElement; string elementName = reader.Name; attrs.Clear(); if (reader.MoveToFirstAttribute()) { do { attrs.Add(reader.Name, reader.Value); }while (reader.MoveToNextAttribute()); } switch (elementName) { case "param_skeleton": if (!isEmptyElement) { ParseLindenAvatarParamSkeleton(reader, vp, attrs); } break; case "param_driver": if (!isEmptyElement) { ParseLindenAvatarParamDriver(reader, vp, attrs); } break; default: if (!isEmptyElement) { ReadToEndElementNoParamElement(reader, elementName); } break; } break; case XmlNodeType.EndElement: if (reader.Name != "param") { throw new InvalidDataException("Invalid linden_avatar.xml"); } if (!isshared) { VisualParams.Add(vp.Id, vp); } return; } } }
public VisualSetting(VisualParam param) { VisualParam = param; Value = param.DefaultValue; }
public VisualSetting(VisualParam param, float value) { VisualParam = param; Value = value; }