public static void DestroyOptimizers()
 {
     _characters.Clear();
     _playerCharacter = null;
     _playerObject    = null;
     inHScene         = false;
 }
        private static void DynamicBoneOptimize(AIChara.ChaControl character)
        {
            if (character == null)
            {
                return;
            }

            VisibilityMask visibilityMask     = VisibilityMask.None;
            bool           bodyVisibleInRange = false;

            if (character.IsVisibleInCamera)
            {
                if (CheckDistance(character.cmpBoneBody.transform.position, _genitalRangeSquared))
                {
                    visibilityMask |= VisibilityMask.VaginaMask;
                }

                if ((visibilityMask != 0) || CheckDistance(character.cmpBoneBody.transform.position, _hairRangeSquared))
                {
                    visibilityMask |= VisibilityMask.HairMask;
                }

                if ((visibilityMask != 0) || CheckDistance(character.cmpBoneBody.transform.position, _clothingRangeSquared))
                {
                    visibilityMask |= VisibilityMask.ClothingMask;
                }

                if (CheckDistance(character.cmpBoneBody.transform.position, _bodyRangeSquared))
                {
                    bodyVisibleInRange = true;
                }
            }

            SetStateDynamicBones(character, character.IsVisibleInCamera, visibilityMask, bodyVisibleInRange, true);
        }
        public static void RemoveCharacter(AIChara.ChaControl character)
        {
            if (character == null || _characters == null || !_characters.Exists(x => x.chaFile.charaFileName == character.chaFile.charaFileName))
            {
                return;
            }

            _characters.Remove(character);
        }
        public static void AddCharacter(AIChara.ChaControl character)
        {
            if (character == null || character.isPlayer || (_characters != null && _characters.Exists(x => x.chaFile.charaFileName == character.chaFile.charaFileName)))
            {
                return;
            }

            _characters.Add(character);
            UpdateAnimatorCulling(_cullingMode);
        }
예제 #5
0
        private void MakerAPI_Enter(object sender, RegisterCustomControlsEvent e)
        {
            cc        = MakerAPI.GetCharacterControl();
            blinkFlag = cc.GetEyesBlinkFlag();
            //Logger.LogDebug("on enter: " + blinkFlag);

            sidebarToggle       = e.AddSidebarControl(new SidebarToggle("Disable eye blink", true, this));
            sidebarToggle.Value = blinkFlag;
            sidebarToggle.ValueChanged.Subscribe(b => BlinkToggle()); //need to fix so BlinkToggle doesn't get called when control is created
        }
        private static void DynamicBoneForce(AIChara.ChaControl character, bool onState)
        {
            if (character == null)
            {
                return;
            }

            if (onState)
            {
                SetStateDynamicBones(character, true, VisibilityMask.AllMask, true, true);
            }
            else
            {
                SetStateDynamicBones(character, false, VisibilityMask.None, false, true);
            }
        }
        private static void BuildCharacterList()
        {
            _characters = new List <AIChara.ChaControl>();
            AIChara.ChaControl[] allCharacters = GameObject.FindObjectsOfType <AIChara.ChaControl>();

            foreach (var character in allCharacters)
            {
                if (!character.isPlayer)
                {
                    _characters.Add(character);
                }
                else
                {
                    _playerCharacter = character;
                }
            }
        }
예제 #8
0
        public static void H_Lookat_dan_LateUpdate(H_Lookat_dan __instance, AIChara.ChaControl ___male)
        {
            if (loadingCharacter || !inHScene)
            {
                return;
            }

            int maleNum = 0;

            if (___male != null && ___male.chaID != 99)
            {
                if (!b2MAnimation)
                {
                    return;
                }
                maleNum = 1;
            }

            if (!bDansFound[maleNum])
            {
                return;
            }

            danPoints[maleNum].danStart.localScale = new Vector3(_dan_girth[maleNum].Value, _dan_girth[maleNum].Value, 1);
            danPoints[maleNum].danTop.localScale   = new Vector3(_dan_sack_size[maleNum].Value, _dan_sack_size[maleNum].Value, _dan_sack_size[maleNum].Value);

            if (!bHPointsFound[targetF[maleNum]])
            {
                return;
            }

            if (_kokan_adjust.Value && adjustFAnimation && !hScene.NowChangeAnim)
            {
                AdjustFemaleAnimation();
            }

            if (changingAnimations[maleNum] && !hScene.NowChangeAnim)
            {
                SetupNewDanTarget(__instance, maleNum);
            }

            SetDanTarget(maleNum);
        }
        public static void H_Lookat_dan_LateUpdate(H_Lookat_dan __instance, AIChara.ChaControl ___male)
        {
            if (!inHScene)
            {
                return;
            }

            int maleNum = 0;

            if (___male != null && ___male.name.Contains("002"))
            {
                if (!b2MAnimation)
                {
                    return;
                }
                maleNum = 1;
            }

            if (!bDansFound[maleNum])
            {
                return;
            }

            danPoints[maleNum].danStart.localScale = new Vector3(_dan_girth[maleNum].Value, _dan_girth[maleNum].Value, 1);
            danPoints[maleNum].danTop.localScale   = new Vector3(_dan_sack_size[maleNum].Value, _dan_sack_size[maleNum].Value, _dan_sack_size[maleNum].Value);

            if (!bHPointsFound[targetF[maleNum]])
            {
                return;
            }

            if (changingAnimations[maleNum] && !hScene.NowChangeAnim)
            {
                SetupNewDanTarget(__instance, maleNum);
                SetDanTarget(maleNum, false);
            }
            else
            {
                SetDanTarget(maleNum, true);
            }
        }
        private static void H_Lookat_dan_ChangeTarget(H_Lookat_dan __instance, System.Text.StringBuilder ___assetName, AIChara.ChaControl ___male)
        {
            if (loadingCharacter || !inHScene || __instance == null)
            {
                return;
            }

            int maleNum = 0;

            if (___male != null && ___male.chaID != 99)
            {
                maleNum = 1;
            }

            if (!bDansFound[maleNum])
            {
                return;
            }

            b2MAnimation = false;
            if (___assetName != null && ___assetName.Length != 0 && ___assetName.ToString().Contains("m2f"))
            {
                b2MAnimation = true;
            }

            if (maleNum == 1 && b2MAnimation == false)
            {
                return;
            }

            targetF[maleNum] = __instance.numFemale;
            if (targetF[maleNum] >= constrainPoints.Length)
            {
                targetF[maleNum] = 0;
            }

            if (!bHPointsFound[targetF[maleNum]])
            {
                return;
            }

            SetupNewDanTarget(__instance, maleNum);
            SetDanTarget(maleNum);
        }
        private static void SetStateDynamicBones(AIChara.ChaControl character, bool isVisible, VisibilityMask visibilityMask, bool isVisibleInBodyRange = false, bool setIllusionColliders = false)
        {
            if (AIMainGameOptimizations._IKSolverChecks.Value)
            {
                if (character.fullBodyIK.enabled != isVisible)
                {
                    character.fullBodyIK.enabled = isVisible;
                }
            }

            if (AIMainGameOptimizations._LookControllerChecks.Value)
            {
                if (character.neckLookCtrl.enabled != isVisible)
                {
                    character.neckLookCtrl.enabled = isVisible;
                }

                if (character.eyeLookCtrl.enabled != isVisible)
                {
                    character.eyeLookCtrl.enabled = isVisible;
                }
            }

            foreach (var dynamicBone in character.GetComponentsInChildren <DynamicBone>(true))
            {
                if (!dynamicBone)
                {
                    continue;
                }

                bool bIsVisibleInRange = isVisible;
                if (dynamicBone.m_Root != null)
                {
                    if (dynamicBone.m_Root.name.Contains("V****a"))
                    {
                        bIsVisibleInRange = (visibilityMask & VisibilityMask.VaginaMask) == VisibilityMask.VaginaMask;
                    }
                    else if (dynamicBone.m_Root.name.Contains("hair"))
                    {
                        bIsVisibleInRange = (visibilityMask & VisibilityMask.HairMask) == VisibilityMask.HairMask;
                    }
                    else
                    {
                        bIsVisibleInRange = (visibilityMask & VisibilityMask.ClothingMask) == VisibilityMask.ClothingMask;
                    }
                }

                if (dynamicBone.enabled != bIsVisibleInRange)
                {
                    dynamicBone.enabled = bIsVisibleInRange;
                }
            }

            foreach (var dynamicBoneCollider in character.GetComponentsInChildren <DynamicBoneCollider>(true))
            {
                if (!dynamicBoneCollider)
                {
                    continue;
                }

                if (dynamicBoneCollider.enabled != isVisibleInBodyRange)
                {
                    dynamicBoneCollider.enabled = isVisibleInBodyRange;
                }
            }

            if (!setIllusionColliders)
            {
                return;
            }

            foreach (var dynamicBoneV2 in character.GetComponentsInChildren <DynamicBone_Ver02>(true))
            {
                if (!dynamicBoneV2)
                {
                    continue;
                }

                if (dynamicBoneV2.enabled != isVisibleInBodyRange)
                {
                    dynamicBoneV2.enabled = isVisibleInBodyRange;
                }
            }
        }