Пример #1
0
        /// <summary>
        /// Assign and initialize this CharacterViewer according to a given CharacterData.
        /// </summary>
        /// <param name="data">CharacterData to be assigned from.</param>
        public void AssignCharacterData(CharacterData data)
        {
            //data version exception..
            if (data.dataVersion < 1)
            {
                data.slotData.Add(new PartSlotData()
                {
                    category    = SlotCategory.BodySkin,
                    partName    = data.bodyType == BodyType.Male ? "Base 00 Male" : "Base 00 Female",
                    partPackage = "Base"
                });
            }
            //..data version exception

            this.bodyType = data.bodyType;
            _skincolor    = data.skinColor;
            _tintcolor    = data.tintColor;

            Initialize();
            foreach (SlotCategory cat in Enum.GetValues(typeof(SlotCategory)))
            {
                PartSlot     slot     = this.slots.GetSlot(cat);
                PartSlotData slotdata = data.slotData.Find(x => x.category == cat);
                if (slot == null)
                {
                    continue;
                }

                if (string.IsNullOrEmpty(slotdata.partName))
                {
                    EquipPart(cat, (Part)null);
                    continue;
                }

                Part part = PartList.Static.FindPart(slotdata.partName, slotdata.partPackage, cat);
                if (part == null)
                {
                    continue;
                }

                EquipPart(cat, part);
                SetPartColor(cat, ColorCode.Color1, slotdata.color1);
                SetPartColor(cat, ColorCode.Color2, slotdata.color2);
                SetPartColor(cat, ColorCode.Color3, slotdata.color3);
            }

            if (data.emoteData != null || data.emoteData.Count > 0)
            {
                foreach (EmotionType emotionType in Enum.GetValues(typeof(EmotionType)))
                {
                    EmoteIndex     e     = emotes.getIndex(emotionType);
                    EmoteIndexData edata = data.emoteData.Find(x => x.emotionType == emotionType);
                    if (e == null)
                    {
                        continue;
                    }
                    if (emotionType >= EmotionType.Blink && String.IsNullOrEmpty(edata.emotionName))
                    {
                        continue;
                    }
                    e.name = edata.emotionName;
                    if (string.IsNullOrEmpty(edata.eyebrowPartName))
                    {
                        e.eyebrowPart = null;
                    }
                    else
                    {
                        e.eyebrowPart = PartList.Static.FindPart(edata.eyebrowPartName, edata.eyebrowPackage, SlotCategory.Eyebrow);
                    }
                    if (string.IsNullOrEmpty(edata.eyesPartName))
                    {
                        e.eyesPart = null;
                    }
                    else
                    {
                        e.eyesPart = PartList.Static.FindPart(edata.eyesPartName, edata.eyesPackage, SlotCategory.Eyes);
                    }
                    if (string.IsNullOrEmpty(edata.nosePartName))
                    {
                        e.nosePart = null;
                    }
                    else
                    {
                        e.nosePart = PartList.Static.FindPart(edata.nosePartName, edata.nosePackage, SlotCategory.Nose);
                    }
                    if (string.IsNullOrEmpty(edata.mouthPartName))
                    {
                        e.mouthPart = null;
                    }
                    else
                    {
                        e.mouthPart = PartList.Static.FindPart(edata.mouthPartName, edata.mouthPackage, SlotCategory.Mouth);
                    }
                    if (string.IsNullOrEmpty(edata.earPartName))
                    {
                        e.earPart = null;
                    }
                    else
                    {
                        e.earPart = PartList.Static.FindPart(edata.earPartName, edata.earPackage, SlotCategory.Ear);
                    }
                }
            }

            //..update
            if (data.bodySegmentData == null || data.bodySegmentData.Count <= 0)
            {
                foreach (SegmentType st in Enum.GetValues(typeof(SegmentType)))
                {
                    SetBodySlider(st, new Vector2(0.5f, 0.5f));
                }
            }
            else
            {
                foreach (SegmentScaleData sd in data.bodySegmentData)
                {
                    SetBodySlider(sd.segmentType, sd.scale);
                }
            }
            //update..
        }
Пример #2
0
        /// <summary>
        /// Generate CharacterData of CharacterViewer.
        /// </summary>
        /// <returns>Generated CharacterData of CharacterViewer.</returns>
        public CharacterData GenerateCharacterData()
        {
            CharacterData val = new CharacterData();

            val.dataVersion = setupData.dataVersion;
            val.bodyType    = this.bodyType;
            val.skinColor   = _skincolor;
            val.tintColor   = _tintcolor;

            val.slotData = new List <PartSlotData>();
            foreach (SlotCategory cat in Enum.GetValues(typeof(SlotCategory)))
            {
                PartSlot slot = this.slots.GetSlot(cat);
                val.slotData.Add(new PartSlotData()
                {
                    category    = cat,
                    partName    = slot.assignedPart == null ? "" : slot.assignedPart.name,
                    partPackage = slot.assignedPart == null ? "" : slot.assignedPart.packageName,
                    color1      = slot.color1,
                    color2      = slot.color2,
                    color3      = slot.color3
                });
            }

            val.emoteData = new List <EmoteIndexData>();
            foreach (EmotionType emotionType in Enum.GetValues(typeof(EmotionType)))
            {
                EmoteIndex e = emotes.getIndex(emotionType);
                if (e == null)
                {
                    continue;
                }
                if (emotionType >= EmotionType.Blink && String.IsNullOrEmpty(e.name))
                {
                    continue;
                }
                else
                {
                    val.emoteData.Add(new EmoteIndexData()
                    {
                        emotionType     = emotionType,
                        emotionName     = String.IsNullOrEmpty(e.name) ? "" : e.name,
                        eyebrowPartName = e.eyebrowPart == null ? "" : e.eyebrowPart.name,
                        eyebrowPackage  = e.eyebrowPart == null ? "" : e.eyebrowPart.packageName,
                        eyesPartName    = e.eyesPart == null ? "" : e.eyesPart.name,
                        eyesPackage     = e.eyesPart == null ? "" : e.eyesPart.packageName,
                        nosePartName    = e.nosePart == null ? "" : e.nosePart.name,
                        nosePackage     = e.nosePart == null ? "" : e.nosePart.packageName,
                        mouthPartName   = e.mouthPart == null ? "" : e.mouthPart.name,
                        mouthPackage    = e.mouthPart == null ? "" : e.mouthPart.packageName,
                        earPartName     = e.earPart == null ? "" : e.earPart.name,
                        earPackage      = e.earPart == null ? "" : e.earPart.packageName
                    });
                }
            }

            //..update
            val.bodySegmentData = new List <SegmentScaleData>();
            foreach (SegmentType stype in Enum.GetValues(typeof(SegmentType)))
            {
                Vector2 scale = GetBodySlider(stype);
                val.bodySegmentData.Add(new SegmentScaleData()
                {
                    segmentType = stype,
                    scale       = new Vector2(scale.x, scale.y)
                });
            }
            //update..

            return(val);
        }