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); } }
public static bool HasAvatarSettings(OcPl pl) { string playername = getPlayerName(pl); string path = FindAvatarSettngs(playername); return(path != SettingsPath); }
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); }
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); }
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); }
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); } }
static void Postfix(OcPl __instance) { foreach (var mr in __instance.GetComponentsInChildren <MeshRenderer>()) { mr.enabled = false; } }
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); }
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; } }
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)); }
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); }
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; } }
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; } }
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); }
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); }
public void StartCheck(OcPl __instance) { ocpl = __instance; StartCoroutine(CheckPlayerName(20)); }
public static bool HasAvatarSettings(OcPl pl) { string playername = getPlayerName(pl); return(dic_players_settings.ContainsKey(playername)); }
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; } } }
void Start() { pl = GetComponent <OcPl>(); }
public static void DelayedPostfix(OcPl __instance) { //プレイヤー名が取れなかった場合の遅延処理 Postfix(__instance); }
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; } }