コード例 #1
0
    bool CompareCustomData(CustomCharactor.CustomData _new, CustomCharactor.CustomData _old)
    {
        bool difference = false;

        //lz-2016.10.16 【错误 #4473】空对象
        if (null != _new && null != _new.appearData && null != _old && null != _old.appearData)
        {
            AppearData newapp = _new.appearData;
            AppearData oldapp = _old.appearData;
            //color
            if (newapp.mEyeColor != oldapp.mEyeColor)
            {
                difference = true;
            }
            else if (newapp.mLipColor != oldapp.mLipColor)
            {
                difference = true;
            }
            else if (newapp.mSkinColor != oldapp.mSkinColor)
            {
                difference = true;
            }
            else if (newapp.mHairColor != oldapp.mHairColor)
            {
                difference = true;
            }

            //lz-2016.10.16 【错误 #4473】空对象
            if (null != mScrollItemList && mScrollItemList.Count > 0)
            {
                //weight
                for (int i = 0; i < mScrollItemList.Count; i++)
                {
                    float newweight = newapp.GetWeight(mScrollItemList[i].mType);
                    float oldweight = oldapp.GetWeight(mScrollItemList[i].mType);
                    if (!Mathf.Approximately(newweight, oldweight))
                    {
                        difference = true;
                        break;
                    }
                }
            }

            //sex
            if (_new.sex != _old.sex)
            {
                difference = true;
            }
        }

        return(difference);
    }
コード例 #2
0
ファイル: Main.cs プロジェクト: aedenthorn/mytimeatportia
            static bool Prefix(ref SkinnedMeshRenderer __result, ref ActorEquip __instance, string[] ___nudeAppearUnits,
                               string[] ___equipAppearUnits, ref AppearData ___appearData, ref string ___tattooPath,
                               GameObject clothRoot = null, bool showHat = true)
            {
                List <AppearUnit> list         = new List <AppearUnit>();
                AppearUnit        tattooTarget = null;

                for (int i = 0; i < 5; i++)
                {
                    if (___nudeAppearUnits.Length > i && ___nudeAppearUnits[i] != null)
                    {
                        AppearUnit appearUnit = null;
                        if (i < ___equipAppearUnits.Length && !string.IsNullOrEmpty(___equipAppearUnits[i]) &&
                            ((showHat && Singleton <OptionsMgr> .Self.ShowHat) || i != 1))
                        {
                            AppearUnit appearUnit2 =
                                Singleton <ResMgr> .Instance.LoadSyncByType <AppearUnit>(AssetType.Appear,
                                                                                         ___equipAppearUnits[i]);

                            if (appearUnit2 != null)
                            {
                                Dbgl("ActorEquip path: " + ___equipAppearUnits[i]);
                                foreach (string key in customClothes.Keys)
                                {
                                    if (___equipAppearUnits[i].EndsWith(key))
                                    {
                                        appearUnit2.Smr.material.SetTexture("_MainTex", customClothes[key]);
                                    }
                                }

                                appearUnit = appearUnit2;
                            }
                        }
                        else
                        {
                            appearUnit =
                                Singleton <ResMgr> .Instance.LoadSyncByType <AppearUnit>(AssetType.Appear,
                                                                                         ___nudeAppearUnits[i]);
                        }

                        if (appearUnit != null)
                        {
                            list.Add(appearUnit);
                            if (i == 0)
                            {
                                tattooTarget = appearUnit;
                            }
                        }
                    }
                }

                if (clothRoot == null)
                {
                    clothRoot = __instance.ClothRoot;
                }

                AppearTarget.Instance.SetRoot(clothRoot);
                SkinnedMeshRenderer result =
                    AppearTarget.Instance.BuildMesh(list, ___appearData, tattooTarget, ___tattooPath);

                MethodInfo dynMethod = __instance.GetType()
                                       .GetMethod("ApplyDyboneConfigs", BindingFlags.NonPublic | BindingFlags.Instance);

                dynMethod.Invoke(__instance, new object[] { AppearTarget.Instance.BoneDic });

                __result = result;
                return(false);
            }
コード例 #3
0
ファイル: Patches.cs プロジェクト: aedenthorn/mytimeatportia
            static bool Prefix(GameObject clothRoot, bool showHat, string[] ___nudeAppearUnits, string[] ___equipAppearUnits, AppearData ___appearData, string ___tattooPath, ActorEquip __instance)
            {
                List <AppearUnit> list         = new List <AppearUnit>();
                AppearUnit        tattooTarget = null;

                for (int i = 0; i < 5; i++)
                {
                    if (___nudeAppearUnits.Length > i && ___nudeAppearUnits[i] != null)
                    {
                        AppearUnit appearUnit = null;
                        if (i < ___equipAppearUnits.Length && !string.IsNullOrEmpty(___equipAppearUnits[i]) && ((showHat && Singleton <OptionsMgr> .Self.ShowHat) || i != 1))
                        {
                            AppearUnit appearUnit2 = Singleton <ResMgr> .Instance.LoadSyncByType <AppearUnit>(AssetType.Appear, ___equipAppearUnits[i]);

                            if (appearUnit2 != null)
                            {
                                appearUnit = appearUnit2;
                                if (___equipAppearUnits[i].Contains("Linda_Pants018"))
                                {
                                    //appearUnit.Smr.material.SetTexture("_MainTex", customTextures["Linda_Pants018"]);
                                }
                            }
                        }
                        else
                        {
                            appearUnit = Singleton <ResMgr> .Instance.LoadSyncByType <AppearUnit>(AssetType.Appear, ___nudeAppearUnits[i]);
                        }
                        if (appearUnit != null)
                        {
                            list.Add(appearUnit);
                            if (i == 0)
                            {
                                tattooTarget = appearUnit;
                            }
                        }
                    }
                }
                if (clothRoot == null)
                {
                    clothRoot = __instance.ClothRoot;
                }
                AppearTarget.Instance.SetRoot(clothRoot);
                AppearTarget.Instance.BuildMesh(list, ___appearData, tattooTarget, ___tattooPath);

                MethodInfo dynMethod = __instance.GetType().GetMethod("ApplyDyboneConfigs", BindingFlags.NonPublic | BindingFlags.Instance);

                dynMethod.Invoke(__instance, new object[] { AppearTarget.Instance.BoneDic });

                return(false);
            }
コード例 #4
0
ファイル: Main.cs プロジェクト: aedenthorn/mytimeatportia
            static void Prefix(AppearTarget __instance, AppearData appearData, ref List <AppearUnit> units)
            {
                Dbgl($"Building player mesh");

                if (!enabled || !settings.EnablePlayerModelling)
                {
                    return;
                }

                for (int i = 0; i < units.Count; i++)
                {
                    //Dbgl(units[i].name + " " + units[i].Part + " "+ (units[i].Smr != null && units[i].Smr.rootBone != null? units[i].Smr.rootBone.position+"" : ""));
                    bool isFemale = units[i].name.StartsWith("AppearUnit_Linda");

                    if (units[i].Part == AppearPartEnum.Body && settings.playerClothes > 0)
                    {
                        if (!playerAppearUnits.ContainsKey(units[i].name))
                        {
                            playerAppearUnits.Add(units[i].name, GameObject.Instantiate <AppearUnit>(units[i]));
                        }
                        units[i]     = playerAppearUnits[units[i].name];
                        units[i].Smr = Singleton <ResMgr> .Instance.LoadSyncByType <NpcAppearUnit>(AssetType.NpcAppear, playerClothesNames[settings.playerClothes]).smrs[0];

                        for (int j = 0; j < units[i].Smr.bones.Length; j++)
                        {
                            if (units[i].Smr.bones[j].name == "Bip001 Spine1")
                            {
                                if (isFemale)
                                {
                                    Transform bone = Transform.Instantiate(units[i].Smr.bones[j], units[i].Smr.bones[j].parent, false);
                                    units[i].Smr.bones[j]      = bone;
                                    units[i].Smr.bones[j].name = "Bip001 Spine2";
                                }
                            }
                        }
                    }
                    if (units[i].Part == AppearPartEnum.Foot && settings.playerClothes > 0)
                    {
                        if (settings.playerHair > 0)
                        {
                            //units[i] = GameObject.Instantiate<AppearUnit>(units[i], units[i].);
                            units[i].Smr = null;
                        }
                    }
                    else if (units[i].Part == AppearPartEnum.Head && units[i].Smr != null && units[i].Smr.bones != null)
                    {
                        if (isFemale)
                        {
                            units[i].Smr.rootBone.position = new Vector3(0, 1.13f + settings.playerHeadOffset, 0);
                        }
                        else
                        {
                            units[i].Smr.rootBone.position = new Vector3(0, 1f + settings.playerHeadOffset, 0);
                        }
                    }
                    else if (units[i].Part == AppearPartEnum.Hair && units[i].Smr != null && units[i].Smr.bones != null)
                    {
                        if (settings.playerHair > 0)
                        {
                            if (!playerAppearUnits.ContainsKey(units[i].name))
                            {
                                playerAppearUnits.Add(units[i].name, GameObject.Instantiate <AppearUnit>(units[i]));
                            }
                            units[i]     = playerAppearUnits[units[i].name];
                            units[i].Smr = Singleton <ResMgr> .Instance.LoadSyncByType <NpcAppearUnit>(AssetType.NpcAppear, playerHairNames[settings.playerHair]).smrs[0];
                        }
                        if (isFemale)
                        {
                            units[i].Smr.rootBone.position = new Vector3(0, 1.35f + settings.playerHeadOffset + settings.playerHairOffset, 0);
                        }
                        else
                        {
                            units[i].Smr.rootBone.position = new Vector3(0, 1.40f + settings.playerHeadOffset + settings.playerHairOffset, 0);
                        }
                    }
                }
            }