Esempio n. 1
0
        private void ExtendedSave_PoseBeingLoaded(string poseName, PauseCtrl.FileInfo fileInfo, OCIChar ociChar, ExtendedSave.GameNames gameName)
        {
            bool       loadSkirtFK = false;
            PluginData data        = ExtendedSave.GetPoseExtendedDataById(PoseToolsData);

            if (data != null)
            {
                bool sameGame = false;

                //Only load expression data for the game this pose was created on, eye etc. patterns wouldn't match otherwise
#if KK || KKS
                if (gameName == ExtendedSave.GameNames.Koikatsu || gameName == ExtendedSave.GameNames.KoikatsuSunshine)
                {
                    sameGame = true;
                }
#elif AI || HS2
                if (gameName == ExtendedSave.GameNames.AIGirl || gameName == ExtendedSave.GameNames.HoneySelect2)
                {
                    sameGame = true;
                }
#elif PH
                if (gameName == ExtendedSave.GameNames.PlayHome)
                {
                    sameGame = true;
                }
#endif

                //Facial expression
                if (sameGame && ConfigLoadExpression.Value)
                {
#if !PH
                    if (data.data.TryGetValue(EyebrowPatternData, out var eyebrowPatternData))
                    {
                        ociChar.charInfo.ChangeEyebrowPtn((int)eyebrowPatternData);
                    }
#endif
                    if (data.data.TryGetValue(EyesPatternData, out var eyesPatternData))
                    {
                        ociChar.charInfo.ChangeEyesPtn((int)eyesPatternData);
                    }
                    if (data.data.TryGetValue(MouthPatternData, out var mouthPatternData))
                    {
                        ociChar.charInfo.ChangeMouthPtn((int)mouthPatternData);
                    }
                    if (data.data.TryGetValue(EyeOpenData, out var eyeOpenData))
                    {
                        ociChar.ChangeEyesOpen((float)eyeOpenData);
                    }
                    if (data.data.TryGetValue(MouthOpenData, out var mouthOpenData))
                    {
                        ociChar.ChangeMouthOpen((float)mouthOpenData);
                    }
                }

                //Skirt FK
                if (sameGame && ConfigLoadSkirtFK.Value && data.data.TryGetValue(SkirtFKData, out var skirtFKData) && skirtFKData != null)
                {
                    loadSkirtFK = true;
                    Dictionary <int, Vector3> skirtFK = MessagePackSerializer.Deserialize <Dictionary <int, Vector3> >((byte[])skirtFKData);
                    foreach (KeyValuePair <int, Vector3> item in skirtFK)
                    {
                        ociChar.oiCharInfo.bones[item.Key].changeAmount.rot = item.Value;
                    }
                }

                //Joint correction
                if (data.data.TryGetValue(JointCorrectionData, out var jointCorrectionData) && jointCorrectionData != null)
                {
                    bool[] expression = MessagePackSerializer.Deserialize <bool[]>((byte[])jointCorrectionData);
                    //Skip the first 4 since those are handled by vanilla code
                    for (int i = 4; i < expression.Length; i++)
                    {
                        ociChar.EnableExpressionCategory(i, expression[i]);
                    }
                }
            }

            if (!loadSkirtFK)
            {
                //Disable skirt FK if there was none to load since it's worthless to have enabled
                StartCoroutine(DisableSkirtFK(ociChar));
                ociChar.ActiveFK(OIBoneInfo.BoneGroup.Skirt, false);
            }
        }
Esempio n. 2
0
        private void ExtendedSave_PoseBeingSaved(string poseName, PauseCtrl.FileInfo fileInfo, OCIChar ociChar, ExtendedSave.GameNames gameName)
        {
            var data = new PluginData();

            //Facial expression
#if PH
            data.data.Add(EyesPatternData, ociChar.charStatus.eyesPtn);
            data.data.Add(MouthPatternData, ociChar.charStatus.mouthPtn);
            data.data.Add(EyeOpenData, ociChar.charStatus.eyesOpenMax);
            data.data.Add(MouthOpenData, ociChar.oiCharInfo.mouthOpen);
#else
            data.data.Add(EyebrowPatternData, ociChar.charFileStatus.eyebrowPtn);
            data.data.Add(EyesPatternData, ociChar.charFileStatus.eyesPtn);
            data.data.Add(MouthPatternData, ociChar.charFileStatus.mouthPtn);
            data.data.Add(EyeOpenData, ociChar.charFileStatus.eyesOpenMax);
            data.data.Add(MouthOpenData, ociChar.oiCharInfo.mouthOpen);
#endif

            //Only save skirt FK if enabled
            if (ociChar.oiCharInfo.activeFK[SkirtFKIndex])
            {
                Dictionary <int, Vector3> skirtFK = new Dictionary <int, Vector3>();
                foreach (KeyValuePair <int, OIBoneInfo> item2 in ociChar.oiCharInfo.bones.Where(b => (OIBoneInfo.BoneGroup.Skirt & b.Value.group) != 0))
                {
                    skirtFK.Add(item2.Key, item2.Value.changeAmount.rot);
                }
                data.data.Add(SkirtFKData, MessagePackSerializer.Serialize(skirtFK));
            }

            //Joint correction
            data.data.Add(JointCorrectionData, MessagePackSerializer.Serialize(ociChar.oiCharInfo.expression));

            ExtendedSave.SetPoseExtendedDataById(PoseToolsData, data);
        }