private static void AddComponentSetFromXml(XElement dataSource)
        {
            if (!ComponentSets.ContainsKey(dataSource.Attribute("name").Value))
            {
                ComponentSets.Add(
                    dataSource.Attribute("name").Value,
                    new AvatarComponentSet(
                        dataSource.Attribute("name").Value,
                        dataSource.Attribute("display-skeleton").Value,
                        (dataSource.Attribute("allow-none") == null) ? false : (bool)dataSource.Attribute("allow-none")));
            }

            foreach (XElement el in dataSource.Elements("component"))
            {
                AvatarComponent component = new AvatarComponent(el.Attribute("name").Value, el.Attribute("texture-name").Value);
                component.Unlocked = (((bool)el.Attribute("unlocked")) ||
                                      (Data.Profile.AvatarComponentUnlocked(dataSource.Attribute("name").Value, el.Attribute("name").Value)));
                if (el.Attribute("tint-by-parent") != null)
                {
                    component.TintedByParentSkin = (bool)el.Attribute("tint-by-parent");
                }

                component.AddMappings(el.Element("mappings").Elements("mapping").ToList());
                if (el.Element("tint-overrides") != null)
                {
                    component.AddTintOverrides(el.Element("tint-overrides").Elements("tint-override").ToList());
                }

                ComponentSets[dataSource.Attribute("name").Value].Components.Add(component);
            }
        }
Example #2
0
        public void UnlockComponent(string componentName)
        {
            AvatarComponent toUnlock = GetNamedComponent(componentName);

            if (toUnlock != null)
            {
                toUnlock.Unlocked = true;
            }
        }
        private void AddSkeletonForComponent(string skeletonName, AvatarComponent component, bool addBody)
        {
            ComponentSetDisplayAvatar avatar = new ComponentSetDisplayAvatar((component == null)  ? "none" : component.Name, 0.0f);
            avatar.CreateBonesFromDataManager(skeletonName);
            avatar.Name = skeletonName;

            if (addBody) { avatar.Components.Add(AvatarComponentManager.Component("body", "Blue")); }
            if (component != null) { avatar.Components.Add(component); }
            avatar.SkinFromComponents();
            avatar.RenderLayer = RenderLayer;

            AddItem(avatar);
        }
        private static void AddComponentSetFromXml(XElement dataSource)
        {
            if (!ComponentSets.ContainsKey(dataSource.Attribute("name").Value))
            {
                ComponentSets.Add(
                    dataSource.Attribute("name").Value,
                    new AvatarComponentSet(
                        dataSource.Attribute("name").Value,
                        dataSource.Attribute("display-skeleton").Value,
                        (dataSource.Attribute("allow-none") == null) ? false : (bool)dataSource.Attribute("allow-none")));
            }

            foreach (XElement el in dataSource.Elements("component"))
            {
                AvatarComponent component = new AvatarComponent(el.Attribute("name").Value, el.Attribute("texture-name").Value);
                component.Unlocked = (((bool)el.Attribute("unlocked")) ||
                    (Data.Profile.AvatarComponentUnlocked(dataSource.Attribute("name").Value, el.Attribute("name").Value)));
                if (el.Attribute("tint-by-parent") != null) { component.TintedByParentSkin = (bool)el.Attribute("tint-by-parent"); }

                component.AddMappings(el.Element("mappings").Elements("mapping").ToList());
                if (el.Element("tint-overrides") != null) { component.AddTintOverrides(el.Element("tint-overrides").Elements("tint-override").ToList()); }

                ComponentSets[dataSource.Attribute("name").Value].Components.Add(component);
            }
        }
 public void AddComponent(AvatarComponent toAdd)
 {
     _skeleton.Components.Add(toAdd);
 }
        private static XElement CustomiseSkin(int slotIndex, string skeletonName, string baseSkinName)
        {
            XElement defaultSkinData = SkeletonDataManager.Skins[baseSkinName];
            XElement skinData        = new XElement("skin");

            foreach (XElement el in defaultSkinData.Elements())
            {
                skinData.Add(el);
            }

            Dictionary <string, Color> tintOverrides = new Dictionary <string, Color>();
            List <XElement>            bonesNotAllowingTintOverride = new List <XElement>();

            foreach (KeyValuePair <string, AvatarComponentSet> kvp in ComponentSets)
            {
                string componentName = Profile.Settings.GetAvatarCustomComponent(slotIndex, kvp.Key);
                if (!string.IsNullOrEmpty(componentName))
                {
                    AvatarComponent component = (from item in kvp.Value.Components where item.Name == componentName select item).FirstOrDefault();
                    if (component != null)
                    {
                        foreach (AvatarComponentMapping mapping in component.Mappings)
                        {
                            if (mapping.TargetSkeleton == skeletonName)
                            {
                                XElement bone = (from item in skinData.Elements() where item.Attribute("id").Value == mapping.TargetBone select item).FirstOrDefault();

                                bone.SetAttributeValue("texture-name", component.TextureName);
                                bone.SetAttributeValue("frame-x", mapping.Frame.X);
                                bone.SetAttributeValue("frame-y", mapping.Frame.Y);
                                bone.SetAttributeValue("frame-width", mapping.Frame.Width);
                                bone.SetAttributeValue("frame-height", mapping.Frame.Height);
                                bone.SetAttributeValue("origin-x", mapping.Origin.X);
                                bone.SetAttributeValue("origin-y", mapping.Origin.Y);

                                if (component.TintOverrides.Count > 0)
                                {
                                    foreach (AvatarComponentChildTintOverride tint in component.TintOverrides)
                                    {
                                        if (!tintOverrides.ContainsKey(tint.TargetBone))
                                        {
                                            tintOverrides.Add(tint.TargetBone, Color.White);
                                        }
                                        tintOverrides[tint.TargetBone] = tint.OverridingTint;
                                    }
                                }

                                if ((!component.TintedByParentSkin) && (bonesNotAllowingTintOverride.Contains(bone)))
                                {
                                    bonesNotAllowingTintOverride.Add(bone);
                                }
                            }
                        }
                    }
                }
            }

            foreach (XElement bone in skinData.Elements())
            {
                if ((tintOverrides.ContainsKey(bone.Attribute("id").Value)) && (!bonesNotAllowingTintOverride.Contains(bone)))
                {
                    bone.Descendants("tint").Remove();
                    XElement tint = new XElement("tint");
                    tint.SetAttributeValue("red", (int)tintOverrides[bone.Attribute("id").Value].R);
                    tint.SetAttributeValue("green", (int)tintOverrides[bone.Attribute("id").Value].G);
                    tint.SetAttributeValue("blue", (int)tintOverrides[bone.Attribute("id").Value].B);
                    tint.SetAttributeValue("alpha", (int)tintOverrides[bone.Attribute("id").Value].A);
                    bone.Add(tint);
                }
                else if (bonesNotAllowingTintOverride.Contains(bone))
                {
                    bone.Descendants("tint").Remove();
                }
            }

            return(skinData);
        }