Esempio n. 1
0
        public static bool isUseVRM(OcPl __instance)
        {
            //if slave and not has avator setting then return false
            bool is_slave = false;
            var  slave    = __instance as OcPlSlave;

            if (slave && !slave.FindNameInParentRecursive("UI"))
            {
                var selfId = OcNetMng.Inst.NetPlId_Master;
                if (SingletonMonoBehaviour <OcPlMng> .Inst.getPlSlave(selfId - 1) != slave)
                {
                    is_slave = true;
                }
            }

            string playername = getPlayerName(__instance);
            string path       = FindAvatarSettngs(playername);

            if (path == SettingsPath)
            {
                return(!is_slave);
            }
            else
            {
                return(true);
            }
        }
Esempio n. 2
0
        public static bool HasAvatarSettings(OcPl pl)
        {
            string playername = getPlayerName(pl);
            string path       = FindAvatarSettngs(playername);

            return(path != SettingsPath);
        }
Esempio n. 3
0
        static bool Prefix(OcPlEquip __instance, ref bool isDraw)
        {
            OcPl pl = __instance.GetComponentInParentRecursive <OcPl>();

            if (!Settings.isUseVRM(pl))
            {
                return(true);
            }
            string playername = Settings.getPlayerName(pl);

            if (__instance.EquipSlot == OcEquipSlot.EqHead && !Settings.ReadBool(playername, "DrawEquipHead", true))
            {
                isDraw = false;
                return(true);
            }

            if (__instance.EquipSlot == OcEquipSlot.Accessory && !Settings.ReadBool(playername, "DrawEquipAccessory", true))
            {
                isDraw = false;
                return(true);
            }

            if (__instance.EquipSlot == OcEquipSlot.WpSub && !Settings.ReadBool(playername, "DrawEquipShield", true))
            {
                isDraw = false;
                return(true);
            }

            return(true);
        }
Esempio n. 4
0
        public static string getPlayerName(OcPl __instance)
        {
            //acquire playername
            string   playername = null;
            OcPlMng  plmng      = OcPlMng.Inst;
            OcNetMng ntmng      = OcNetMng.Inst;

            if (plmng != null)
            {
                if (__instance.CharaMakeData != null)
                {
                    playername = __instance.CharaMakeData.Name;
                }
                if (playername == null || playername.Length == 0 || playername == "no name")
                {
                    int netid = plmng.getNetPlId(__instance);
                    if (netid != -1)
                    {
                        playername = ntmng.getPlName(netid);
                    }
                }
            }

            if (playername == null || playername == "no name")
            {
                UnityEngine.Debug.LogWarning("プレイヤー名の取得に失敗しました");
                return(null);
            }

            return(playername);
        }
Esempio n. 5
0
        static void Postfix(OcPl __instance)
        {
            if (!Settings.isUseVRM(__instance))
            {
                return;
            }

            string playername = Settings.getPlayerName(__instance);

            if (!Settings.ReadBool(playername, "UseEquipAdjustment", false))
            {
                return;
            }

            var plEquipCtrl = __instance.EquipCtrl;
            var plCommon    = __instance.PlCommon;
            var plEquips    = GetPlEquips(plEquipCtrl);

            plEquips.RemoveWhere(plEquip => plEquip == null); // Destroyされていたら null チェックが True になる

            if (originalParentTransform.ContainsKey(plEquipCtrl) == false && plEquips.Any())
            {
                originalParentTransform.Add(plEquipCtrl, IEnumerableExtensions.First(plEquips).transform.parent);
            }

            foreach (var plEquip in plEquips)
            {
                AdjustEquipPos(plEquip, playername);
            }

            AdjustQuiverPos(__instance, __instance.PlCommon);
        }
Esempio n. 6
0
        static void AdjustQuiverPos(OcPl pl, OcPlCommon plCommon)
        {
            string playername = Settings.getPlayerName(pl);

            Transform quiver;

            if (quiverTransforms.TryGetValue(plCommon, out quiver) == false || quiver == null)
            {
                quiver = plCommon.AccessoryCtrl.transform.Find("OcQuiver");
                if (quiver == null)
                {
                    return;
                }
                quiverTransforms.Add(plCommon, quiver);
            }

            if (IsQuiverAdujstedToVrmModel())
            {
                var modelHeadTrans = GetPlRelatedModelAnimator(pl).GetBoneTransform(HumanBodyBones.Spine);
                quiver.SetParent(modelHeadTrans, false);
                quiver.SetLocalPosition(GetQuiverOffset(playername));
                return;
            }
            else
            {
                quiver.SetParent(plCommon.AccessoryCtrl, true);
                quiver.localPosition += GetQuiverOffset(playername);
            }
        }
Esempio n. 7
0
 static void Postfix(OcPl __instance)
 {
     foreach (var mr in __instance.GetComponentsInChildren <MeshRenderer>())
     {
         mr.enabled = false;
     }
 }
Esempio n. 8
0
 static Animator GetPlRelatedModelAnimator(OcPl pl)
 {
     if (plRelatedModelAnimator.TryGetValue(pl, out var anim) == false || anim == null) // Dictionaryにキャッシュされて無いorデストロイ済み
     {
         anim = pl
                .Animator.gameObject
                .GetComponent <CloneHumanoid>()
                .GetInstancedVRMModel()
                .GetComponent <Animator>();
         plRelatedModelAnimator[pl] = anim; // インデクサでのアクセスならkeyの存在有無にかかわらず追加・更新できる
     }
     return(anim);
 }
Esempio n. 9
0
        static void Postfix(OcPlHeadPrefabSetting __instance)
        {
            OcPl pl = __instance.GetComponentInParentRecursive <OcPl>();

            if (!Settings.isUseVRM(pl))
            {
                return;
            }

            foreach (var mr in __instance.GetComponentsInChildren <MeshRenderer>())
            {
                mr.enabled = false;
            }
        }
Esempio n. 10
0
        public static bool isUseVRM(OcPl __instance)
        {
            //if slave and not has avator setting then return false
            bool is_slave = false;
            var  slave    = __instance as OcPlSlave;

            if (slave && !slave.FindNameInParentRecursive("UI"))
            {
                var selfId = OcNetMng.Inst.NetPlId_Master;
                if (SingletonMonoBehaviour <OcPlMng> .Inst.getPlSlave(selfId - 1) != slave)
                {
                    is_slave = true;
                }
            }

            bool use_multi = ReadBool("UseMulti", false);

            if (!use_multi && is_slave)
            {
                // マルチなしでホスト以外なら不使用
                return(false);
            }

            if (!use_multi && !is_slave)
            {
                // マルチなしホストなら基本設定で評価
                return(true);
            }

            // マルチありでの評価
            string playername = getPlayerName(__instance);

            // プレイヤー名は取れない場合がある
            if (playername == null)
            {
                return(false);
            }


            // 設定が取れなかった場合はnullが返るのでfalseになる
            return(ReadBool(playername, "Enabled", false));
        }
Esempio n. 11
0
        static void Postfix(OcPl __instance)
        {
            var plEquipCtrl = __instance.EquipCtrl;
            var plCommon    = __instance.PlCommon;
            var plEquips    = GetPlEquips(plEquipCtrl);

            plEquips.RemoveWhere(plEquip => plEquip == null); // Destroyされていたら null チェックが True になる

            if (originalParentTransform.ContainsKey(plEquipCtrl) == false && plEquips.Any())
            {
                originalParentTransform.Add(plEquipCtrl, IEnumerableExtensions.First(plEquips).transform.parent);
            }

            foreach (var plEquip in plEquips)
            {
                AdjustEquipPos(plEquip);
            }

            AdjustQuiverPos(__instance, __instance.PlCommon);
        }
Esempio n. 12
0
        static void Postfix(OcPlCharacterBuilder __instance, GameObject prefab, int?layer = null)
        {
            var go = __instance.GetRefField <OcPlCharacterBuilder, GameObject>("hair");

            OcPl pl = go.GetComponentInParentRecursive <OcPl>();

            if (!Settings.isUseVRM(pl))
            {
                return;
            }


            foreach (var mr in go.GetComponentsInChildren <MeshRenderer>())
            {
                mr.enabled = false;
            }
            foreach (var smr in go.GetComponentsInChildren <SkinnedMeshRenderer>())
            {
                smr.enabled = false;
            }
        }
Esempio n. 13
0
        static void Postfix(OcPlHeadPrefabSetting __instance)
        {
            if (!Settings.ReadBool("UseMulti", false))
            {
                OcPl pl    = __instance.GetComponentInParentRecursive <OcPl>();
                var  slave = pl as OcPlSlave;
                if (slave && !slave.FindNameInParentRecursive("UI"))
                {
                    var selfId = OcNetMng.Inst.NetPlId_Master;
                    if (SingletonMonoBehaviour <OcPlMng> .Inst.getPlSlave(selfId - 1) != slave)
                    {
                        return;
                    }
                }
            }

            foreach (var mr in __instance.GetComponentsInChildren <MeshRenderer>())
            {
                mr.enabled = false;
            }
        }
Esempio n. 14
0
        public static string getPlayerName(OcPl __instance)
        {
            //acquire playername
            string   playername = null;
            OcPlMng  plmng      = OcPlMng.Inst;
            OcNetMng ntmng      = OcNetMng.Inst;

            if (plmng != null)
            {
                if (__instance.CharaMakeData != null)
                {
                    playername = __instance.CharaMakeData.Name;
                }
                if (playername == null || playername.Length == 0)
                {
                    int netid = plmng.getNetPlId(__instance);
                    if (netid != -1)
                    {
                        playername = ntmng.getPlName(netid);
                    }
                }
            }
            return(playername);
        }
Esempio n. 15
0
        static void Postfix(OcPl __instance)
        {
            var slave = __instance as OcPlSlave;

            if (slave && !slave.FindNameInParentRecursive("UI"))
            {
                var selfId = OcNetMng.Inst.NetPlId_Master;
                if (SingletonMonoBehaviour <OcPlMng> .Inst.getPlSlave(selfId - 1) != slave)
                {
                    return;
                }
            }

            if (vrmModel == null)
            {
                //カスタムモデル名の取得(設定ファイルにないためLogの出力が不自然にならないよう調整)
                var ModelStr = Settings.ReadSettings("ModelName");
                var path     = Environment.CurrentDirectory + @"\Player2VRM\player.vrm";
                if (ModelStr != null)
                {
                    path = Environment.CurrentDirectory + @"\Player2VRM\" + ModelStr + ".vrm";
                }

                try
                {
                    vrmModel = ImportVRM(path);
                }
                catch
                {
                    if (ModelStr != null)
                    {
                        UnityEngine.Debug.LogWarning("VRMファイルの読み込みに失敗しました。settings.txt内のModelNameを確認してください。");
                    }
                    else
                    {
                        UnityEngine.Debug.LogWarning("VRMファイルの読み込みに失敗しました。Player2VRMフォルダにplayer.vrmを配置してください。");
                    }
                    return;
                }

                var receiveShadows = Settings.ReadBool("ReceiveShadows");
                if (!receiveShadows)
                {
                    foreach (var smr in vrmModel.GetComponentsInChildren <SkinnedMeshRenderer>())
                    {
                        smr.receiveShadows = false;
                    }
                }

                // プレイヤースケール調整
                {
                    var scale = Settings.ReadFloat("PlayerScale", 1.0f);
                    __instance.transform.localScale *= scale;
                    vrmModel.transform.localScale   /= scale;
                }
            }

            foreach (var smr in __instance.GetComponentsInChildren <SkinnedMeshRenderer>())
            {
                if (Settings.ReadBool("UseRealToonShader", false))
                {
                    foreach (var mat in smr.materials)
                    {
                        mat.SetFloat("_EnableTextureTransparent", 1.0f);
                    }
                }
                smr.enabled = false;
                Transform trans = smr.transform;
                while (vrmModel != null && trans != null)
                {
                    if (trans.name.Contains(vrmModel.name))
                    {
                        smr.enabled = true;
                        break;
                    }
                    trans = trans.parent;
                }
            }

            __instance.Animator.gameObject.GetOrAddComponent <CloneHumanoid>().Setup(vrmModel, __instance.Animator, __instance is OcPlMaster);
        }
Esempio n. 16
0
 public void StartCheck(OcPl __instance)
 {
     ocpl = __instance;
     StartCoroutine(CheckPlayerName(20));
 }
Esempio n. 17
0
        public static bool HasAvatarSettings(OcPl pl)
        {
            string playername = getPlayerName(pl);

            return(dic_players_settings.ContainsKey(playername));
        }
Esempio n. 18
0
        static void Postfix(OcPl __instance)
        {
            if (vrmModel == null)
            {
                //カスタムモデル名の取得(設定ファイルにないためLogの出力が不自然にならないよう調整)
                var ModelStr = Settings.ReadSettings("ModelName");
                var path     = Environment.CurrentDirectory + @"\Player2VRM\player.vrm";
                if (ModelStr != null)
                {
                    path = Environment.CurrentDirectory + @"\Player2VRM\" + ModelStr + ".vrm";
                }

                try
                {
                    vrmModel = ImportVRM(path);
                }
                catch
                {
                    if (ModelStr != null)
                    {
                        UnityEngine.Debug.LogWarning("VRMファイルの読み込みに失敗しました。settings.txt内のModelNameを確認してください。");
                    }
                    else
                    {
                        UnityEngine.Debug.LogWarning("VRMファイルの読み込みに失敗しました。Player2VRMフォルダにplayer.vrmを配置してください。");
                    }
                    return;
                }

                var receiveShadows = Settings.ReadBool("ReceiveShadows");
                if (!receiveShadows)
                {
                    foreach (var smr in vrmModel.GetComponentsInChildren <SkinnedMeshRenderer>())
                    {
                        smr.receiveShadows = false;
                    }
                }

                // プレイヤースケール調整
                {
                    var scaleStr = Settings.ReadSettings("PlayerScale");
                    var scale    = 1.0f;
                    if (scaleStr != null && float.TryParse(scaleStr, out scale))
                    {
                        __instance.transform.localScale *= scale;
                        vrmModel.transform.localScale   /= scale;
                    }
                }
            }

            foreach (var smr in __instance.GetComponentsInChildren <SkinnedMeshRenderer>())
            {
                foreach (var mat in smr.materials)
                {
                    mat.SetFloat("_EnableTextureTransparent", 1.0f);
                }
                smr.enabled = false;
                Transform trans = smr.transform;
                while (vrmModel != null && trans != null)
                {
                    if (trans.name.Contains(vrmModel.name))
                    {
                        smr.enabled = true;
                        break;
                    }
                    trans = trans.parent;
                }
            }

            if (__instance is OcPlMaster)
            {
                if (modelMaster == null)
                {
                    modelMaster = GameObject.Instantiate <GameObject>(vrmModel);
                }
                var instAnim   = __instance.GetComponentInChildren <Animator>();
                var masterAnim = modelMaster.GetComponentInChildren <Animator>();
                modelMaster.transform.SetParent(__instance.transform, false);
                masterAnim.runtimeAnimatorController = instAnim.runtimeAnimatorController;

                var fitter = __instance.GetComponent <AnimFitter>();
                if (fitter == null)
                {
                    fitter            = __instance.gameObject.AddComponent <AnimFitter>();
                    fitter.masterAnim = masterAnim;
                }
            }

            if (__instance is OcPlSlave)
            {
                if (modelSlave == null)
                {
                    modelSlave = GameObject.Instantiate <GameObject>(vrmModel);
                }
                var instAnim   = __instance.GetComponentInChildren <Animator>();
                var masterAnim = modelSlave.GetComponentInChildren <Animator>();
                modelSlave.transform.SetParent(__instance.transform, false);
                masterAnim.runtimeAnimatorController = instAnim.runtimeAnimatorController;

                var fitter = __instance.GetComponent <AnimFitter>();
                if (fitter == null)
                {
                    fitter            = __instance.gameObject.AddComponent <AnimFitter>();
                    fitter.masterAnim = masterAnim;
                }
            }
        }
Esempio n. 19
0
 void Start()
 {
     pl = GetComponent <OcPl>();
 }
Esempio n. 20
0
 public static void DelayedPostfix(OcPl __instance)
 {
     //プレイヤー名が取れなかった場合の遅延処理
     Postfix(__instance);
 }
Esempio n. 21
0
        static void Postfix(OcPl __instance)
        {
            string playername = Settings.getPlayerName(__instance);

            if (playername == null)
            {
                GameObject obj = new GameObject("Delay_OcPlVRM");
                DelayVRM   dvm = obj.AddComponent <DelayVRM>();
                dvm.StartCheck(__instance);
                return;
            }

            if (!Settings.isUseVRM(__instance))
            {
                return;
            }


            if (Settings.ReadBool("DisableStool", false))
            {
                SROptions.Current.DisableStool = true;
            }

            GameObject _vrmModel = null;

            if (playername != null)
            {
                if (dic_vrmModel.ContainsKey(playername))
                {
                    _vrmModel = dic_vrmModel[playername];
                }
            }
            if (_vrmModel == null)
            {
                //カスタムモデル名の取得(設定ファイルにないためLogの出力が不自然にならないよう調整)
                var ModelStr = Settings.ReadSettings(playername, "ModelName");

                var path = Environment.CurrentDirectory + @"\Player2VRM\player.vrm";
                if (ModelStr != null)
                {
                    path = Environment.CurrentDirectory + @"\Player2VRM\" + ModelStr + ".vrm";
                }

                try
                {
                    _vrmModel = ImportVRM(path, playername);
                }
                catch
                {
                    string _settings_path = Settings.FindAvatarSettngs(playername);

                    if (ModelStr != null)
                    {
                        UnityEngine.Debug.LogWarning("VRMファイルの読み込みに失敗しました。" + _settings_path + "内のModelNameを確認してください。");
                    }
                    else
                    {
                        UnityEngine.Debug.LogWarning("VRMファイルの読み込みに失敗しました。Player2VRMフォルダにplayer.vrmを配置してください。");
                    }
                    return;
                }

                OcPlHeadPrefabSetting hps = __instance.gameObject.GetComponentInChildren <OcPlHeadPrefabSetting>();
                if (hps != null)
                {
                    foreach (var mr in hps.gameObject.GetComponentsInChildren <MeshRenderer>())
                    {
                        mr.enabled = false;
                    }
                }

                var receiveShadows = Settings.ReadBool(playername, "ReceiveShadows");
                if (!receiveShadows)
                {
                    foreach (var smr in _vrmModel.GetComponentsInChildren <SkinnedMeshRenderer>())
                    {
                        smr.receiveShadows = false;
                    }
                }

                // プレイヤースケール調整
                {
                    var scale = Settings.ReadFloat(playername, "PlayerScale", 1.0f);
                    __instance.transform.localScale *= scale;
                    _vrmModel.transform.localScale  /= scale;
                }
            }

            foreach (var smr in __instance.GetComponentsInChildren <SkinnedMeshRenderer>())
            {
                if (Settings.ReadBool(playername, "UseRealToonShader", false))
                {
                    foreach (var mat in smr.materials)
                    {
                        mat.SetFloat("_EnableTextureTransparent", 1.0f);
                    }
                }
                smr.enabled = false;
                Transform trans = smr.transform;
                while (_vrmModel != null && trans != null)
                {
                    if (trans.name.Contains(_vrmModel.name))
                    {
                        smr.enabled = true;
                        break;
                    }
                    trans = trans.parent;
                }
            }

            __instance.Animator.gameObject.GetOrAddComponent <CloneHumanoid>().Setup(_vrmModel, __instance.Animator, __instance is OcPlMaster);
            if (playername != null)
            {
                dic_vrmModel[playername] = _vrmModel;
            }
        }