Ejemplo n.º 1
0
        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;
                }
            }
        }
Ejemplo n.º 2
0
        /// <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);
        }
Ejemplo n.º 3
0
        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);
        }
Ejemplo n.º 4
0
        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;
                }
            }
        }
Ejemplo n.º 5
0
        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;
                }
            }
        }
Ejemplo n.º 6
0
 public VisualSetting(VisualParam param)
 {
     VisualParam = param;
     Value       = param.DefaultValue;
 }
Ejemplo n.º 7
0
 public VisualSetting(VisualParam param, float value)
 {
     VisualParam = param;
     Value       = value;
 }