示例#1
0
 static void HoushiCumFix(Houshi __instance, HSceneSprite ___sprite)
 {
     if (Singleton <HSceneFlagCtrl> .Instance.initiative >= 1 && Singleton <HSceneFlagCtrl> .Instance.feel_m >= 1f)
     {
         // Roll random in/out
         if (___sprite.IsFinishVisible(3) || ___sprite.IsFinishVisible(4))
         {
             float finishRoll = UnityEngine.Random.value;
             if (___sprite.IsFinishVisible(3) && finishRoll <= .33f)
             {
                 Singleton <HSceneFlagCtrl> .Instance.click = HSceneFlagCtrl.ClickKind.FinishDrink;
             }
             else if (___sprite.IsFinishVisible(4) && (finishRoll > .33f && finishRoll <= .66f))
             {
                 Singleton <HSceneFlagCtrl> .Instance.click = HSceneFlagCtrl.ClickKind.FinishVomit;
             }
             else
             {
                 Singleton <HSceneFlagCtrl> .Instance.click = HSceneFlagCtrl.ClickKind.FinishOutSide;
             }
         }
         else
         {
             Singleton <HSceneFlagCtrl> .Instance.click = HSceneFlagCtrl.ClickKind.FinishOutSide;
         }
     }
 }
示例#2
0
 private static void CheckMotionLimitHook(ref HSceneSprite __instance, ref bool __result, HScene.AnimationListInfo lstAnimInfo)
 {
     if (__result == false && unlockAll.Value)
     {
         bool realyFalse = false;
         if (!realyFalse)
         {
             __result = true;
         }
     }
 }
        public static void HScene_EndProc_Patch()
        {
            activeDraggerUI   = false;
            activeAnimationUI = false;

            if (characters != null)
            {
                characters.Clear();
                characters = null;
            }
            hScene    = null;
            hSprite   = null;
            hFlagCtrl = null;
        }
示例#4
0
 public ProcBase(DeliveryMember _delivery)
 {
     this.ctrlFlag        = _delivery.ctrlFlag;
     this.chaMales        = _delivery.chaMales;
     this.chaFemales      = _delivery.chaFemales;
     this.fade            = _delivery.fade;
     this.ctrlMeta        = _delivery.ctrlMeta;
     this.sprite          = _delivery.sprite;
     this.item            = _delivery.item;
     this.feelHit         = _delivery.feelHit;
     this.auto            = _delivery.auto;
     this.voice           = _delivery.voice;
     this.particle        = _delivery.particle;
     this.se              = _delivery.se;
     this.lstMotionIK     = _delivery.lstMotionIK;
     this.AtariEffect     = _delivery.AtariEffect;
     this.FeelHitEffect3D = _delivery.FeelHitEffect3D;
     this.Hitem           = (HSceneSpriteHitem)this.sprite.objHItem.GetComponent <HSceneSpriteHitem>();
     if (Object.op_Equality((Object)ProcBase.hSceneManager, (Object)null))
     {
         ProcBase.hSceneManager = Singleton <HSceneManager> .Instance;
     }
     for (int index = 0; index < 2; ++index)
     {
         this.randVoicePlays[index] = new ShuffleRand(-1);
         this.randVoicePlays[index].Init(index != 0 ? 2 : 3);
     }
     ObservableExtensions.Subscribe <bool>(Observable.Where <bool>((IObservable <M0>) this.isAtariHit, (Func <M0, bool>)(x => this.isAtariHitOld != x && this.CatID != 1)), (Action <M0>)(x =>
     {
         if (this.CatID == 7 && Singleton <HSceneFlagCtrl> .Instance.nowAnimationInfo.ActionCtrl.Item2 == 1 || Singleton <HSceneFlagCtrl> .Instance.nowAnimationInfo.ActionCtrl.Item2 == 2)
         {
             return;
         }
         this.isAtariHitOld = x;
         if (x)
         {
             this.AtariEffect.Play();
             if (!Singleton <HSceneManager> .Instance.isParticle)
             {
                 return;
             }
             this.FeelHitEffect3D.Play();
         }
         else
         {
             this.AtariEffect.Stop();
             this.FeelHitEffect3D.Stop();
         }
     }));
 }
示例#5
0
        public static bool Prefix_HSceneSprite_SetVisibleLeaveItToYou(HSceneSprite __instance,
                                                                      bool _visible,
                                                                      bool _judgeLeaveItToYou = false)
        {
            if (!VisibleAutoH.Value)
            {
                return(true);
            }

            // Force auto H toggle to be visible.
            __instance.tglLeaveItToYou.gameObject.SetActive(true);

            return(false);
        }
示例#6
0
        public static bool Prefix_HSceneSprite_SetAnimationMenu(HSceneSprite __instance, ref bool __result)
        {
            if (!AllHPos.Value)
            {
                return(true);
            }

            // Activate all H categories.
            __result = true;

            __instance.categoryMain.SetActive(true, -1);

            return(false);
        }
示例#7
0
        void UpdateVisibility()
        {
            if (_Canvas)
            {
                _Canvas.gameObject.SetActive(Singleton <HScene> .Instance);
                var newSprite = FindObjectOfType <HSceneSprite>();

                if (IsVisible && newSprite != _Sprite)
                {
                    _Sprite = newSprite;
                    _CachedActiveButtons.Clear();
                    _CurrentVisibleButtons.Clear();
                    _Buttons.Clear();
                    _LastSync = 0;
                    foreach (var stopControl in FindObjectsOfType <SpriteGaugeStopCtrl>())
                    {
                        var button = new PlayButton();
                        var toggle = stopControl.GetComponent <Toggle>();
                        button.OnSelect.AddListener(delegate { toggle.OnPointerEnter(null); });
                        button.OnUnselect.AddListener(delegate { toggle.OnPointerExit(null); });
                        button.OnActivate.AddListener(delegate { toggle.isOn = !toggle.isOn; stopControl.OnChangeValueStopFeel(toggle.isOn); });
                        button.Degrees = 45;

                        if (stopControl.name.Contains("Female"))
                        {
                            button.StartAngle = 270 - 10 - button.Degrees;
                        }
                        else
                        {
                            button.StartAngle = 270 + 10;
                        }

                        _Buttons.Add(button);
                    }

                    if (_Sprite)
                    {
                        PrepareButtons(_Sprite);
                    }
                }
            }
        }
示例#8
0
        public static HSceneSpriteDummy Create(HSceneSprite realSprite)
        {
            var sprite = new GameObject().CopyComponentFrom <HSceneSprite, HSceneSpriteDummy>(realSprite);

            if (!sprite.categoryFinish)
            {
                if (realSprite.categoryFinish)
                {
                    VRLog.Warn("This ain't good man!");
                }
            }
            sprite._Base = realSprite;
            if (!realSprite)
            {
                throw new ArgumentNullException();
            }


            return(sprite);
        }
示例#9
0
        private static void CheckMotionLimitHook(ref HSceneSprite __instance, ref bool __result, HScene.AnimationListInfo lstAnimInfo)
        {
            if (__result == false && unlockAll.Value)
            {
                bool realyFalse = false;
                if (__instance.chaFemales.Length > 1 && __instance.chaFemales[1] == null && (lstAnimInfo.ActionCtrl.Item1 == 4 || lstAnimInfo.ActionCtrl.Item1 == 5))
                {
                    realyFalse = true;
                }
                if (__instance.chaMales.Length > 1 && __instance.chaMales[1] == null && lstAnimInfo.ActionCtrl.Item1 == 6)
                {
                    realyFalse = true;
                }
                if (__instance.EventNo == 19)
                {
                    if (lstAnimInfo.ActionCtrl.Item1 == 4 || lstAnimInfo.ActionCtrl.Item1 == 5 || lstAnimInfo.ActionCtrl.Item1 == 6)
                    {
                        realyFalse = true;
                    }
                    if (lstAnimInfo.ActionCtrl.Item1 == 3 && lstAnimInfo.id == 0)
                    {
                        realyFalse = true;
                    }
                }
                if (!__instance.CheckEventLimit(lstAnimInfo.Event))
                {
                    realyFalse = true;
                }

                if (!__instance.CheckPlace(lstAnimInfo))
                {
                    realyFalse = true;
                }
                if (!realyFalse)
                {
                    __result = true;
                }
            }
        }
示例#10
0
        public static bool Prefix_HSceneSprite_MainCategoryOfLeaveItToYou(HSceneSprite __instance,
                                                                          bool _isLeaveItToYou)
        {
            if (AllHPos.Value)
            {
                if (_isLeaveItToYou)
                {
                    __instance.MainCategoryOfLeaveItToYou(false);

                    return(false);
                }
            }
            else if (VisibleAutoH.Value)
            {
                if (!_isLeaveItToYou)
                {
                    __instance.MainCategoryOfLeaveItToYou(true);

                    return(false);
                }
            }

            return(true);
        }
示例#11
0
        protected override void OnUpdate()
        {
            base.OnUpdate();

            var device             = this.Controller;
            var touchpad_position  = device.GetAxis();
            var touchpad_direction = GetTouchpadDirection(touchpad_position);

            var touchpad_click_up   = device.GetPressUp(EVRButtonId.k_EButton_SteamVR_Touchpad);
            var touchpad_touch      = device.GetTouch(EVRButtonId.k_EButton_SteamVR_Touchpad);
            var touchpad_click_down = device.GetPress(EVRButtonId.k_EButton_SteamVR_Touchpad);

            var tGrip           = device.GetPressUp(EVRButtonId.k_EButton_Grip);
            var tTriggerClicked = device.GetPressUp(EVRButtonId.k_EButton_SteamVR_Trigger);

            if ((VR.Interpreter as HS2Interpreter).isHScene)
            {
                var          scene = ((VR.Interpreter as HS2Interpreter).currentSceneInterpreter as HSceneInterpreter)._HScene;
                HSceneSprite scene_sprite_instance = Singleton <HSceneSprite> .Instance;

                //VRLog.Info("Touchpad direction: {0}", touchpad_direction);
                if (touchpad_direction == TouchpadDirection.Up && touchpad_touch)
                {
                    // Up
                    //VRLog.Info("Scroll up.");
                    SendInputHandler.MouseWheel(10);
                }
                else if (touchpad_direction == TouchpadDirection.Down && touchpad_touch)
                {
                    // Down
                    //VRLog.Info("Scroll down.");
                    SendInputHandler.MouseWheel(-10);
                }

                if (touchpad_click_down)
                {
                    //VRLog.Info("Pressed touchpad.");

                    scene_sprite_instance.categoryFinish.onEnter = true;
                    if (!_was_touchpad_click_down)
                    {
                        if (touchpad_direction == TouchpadDirection.Left)
                        {
                            // Left
                            //VRLog.Info("Scroll up.");
                            SendInputHandler.MouseWheel(-10);
                        }
                        else if (touchpad_direction == TouchpadDirection.Right)
                        {
                            // Right
                            //VRLog.Info("Scroll down.");
                            SendInputHandler.MouseWheel(10);
                        }
                    }
                    //VRLog.Info("Active finish option: {0}", scene_sprite_instance.categoryFinish.GetlstActive());

                    _was_touchpad_click_down = true;
                }
                if (touchpad_click_up)
                {
                    //VRLog.Info("Unpressed touchpad.");
                    //VRLog.Info("Got {0} buttons", scene_sprite_instance.categoryFinish.lstButton.Count);
                    if (touchpad_direction == TouchpadDirection.Center && _was_touchpad_click_down)
                    {
                        for (int i = 0; i < scene_sprite_instance.categoryFinish.lstButton.Count; i++)
                        {
                            if (scene_sprite_instance.categoryFinish.GetEnable(i) && scene_sprite_instance.categoryFinish.lstButton[i].gameObject.activeSelf)
                            {
                                //VRLog.Info("Pressing button {0}", i);
                                scene_sprite_instance.categoryFinish.lstButton[i].onClick.Invoke();
                                break;
                            }
                        }
                    }
                    _was_touchpad_click_down = false;
                }
            }
        }
        public static void HScene_SetStartAnimationInfo_Patch(HScene __instance, HSceneSprite ___sprite)
        {
            hScene  = __instance;
            hSprite = ___sprite;

            if (hScene == null || hSprite == null)
            {
                return;
            }

            hFlagCtrl = hScene.ctrlFlag;
            if (hFlagCtrl == null)
            {
                return;
            }

            cameraCtrl = hFlagCtrl.cameraCtrl;
            if (cameraCtrl == null)
            {
                return;
            }

            hSceneTrav          = Traverse.Create(hScene);
            Tools.hFlagCtrlTrav = Traverse.Create(hFlagCtrl);

            listTrav       = Traverse.Create(hScene.ctrlEyeNeckMale[0]);
            maleMotionList = listTrav?.Field("lstEyeNeck").GetValue <List <HMotionEyeNeckMale.EyeNeck> >();

            if (unlockCamera.Value)
            {
                cameraCtrl.isLimitDir = false;
                cameraCtrl.isLimitPos = false;
            }

            cameraShouldLock = true;

            characters     = new List <ChaControl>();
            maleCharacters = new List <ChaControl>();
            ChaControl[] males = __instance.GetMales();
            foreach (var male in males.Where(male => male != null))
            {
                maleCharacters.Add(male);
                characters.Add(male);
            }

            femaleCharacters = new List <ChaControl>();
            ChaControl[] females = __instance.GetFemales();
            foreach (var female in females.Where(female => female != null))
            {
                femaleCharacters.Add(female);
                characters.Add(female);
            }

            if (characters == null)
            {
                return;
            }

            obiSolver = GameObject.Find("SiruObiMgr").GetComponentInChildren <Obi.ObiSolver>(true);

            if (obiSolver != null)
            {
                obiSolver.UpdateOrder = obiUpdateMode.Value;
            }

            Tools.SetGotoWeaknessCount(countToWeakness.Value);
            SliderUI.InitDraggersUI();
        }
示例#13
0
        public static void HSceneSprite_SetLightInfo_CreateButtons(HSceneSprite __instance)
        {
            sprite = __instance;

            if (created)
            {
                return;
            }

            var UI = GameObject.Find("UI");

            if (UI == null)
            {
                return;
            }

            var back = UI.transform.Find("Light/back");

            if (back == null)
            {
                return;
            }

            var orig = UI.transform.Find("Light/SubLight");

            if (orig == null)
            {
                return;
            }

            toggles = new List <Toggle>();

            lights      = Resources.FindObjectsOfTypeAll <Light>();
            resolutions = new int[lights.Length];

            for (var i = 0; i < lights.Length; i++)
            {
                resolutions[i] = lights[i] != null ? lights[i].shadowCustomResolution : -1;
            }

            foreach (var light in lights)
            {
                var parent = light.transform;

                switch (parent.name)
                {
                case "Directional Light Key":
                    camLightTr = parent;
                    break;

                case "Directional Light Back":
                    backLight = light;
                    break;
                }
            }

            var text = orig.GetComponentInChildren <Text>();

            text.alignment = TextAnchor.MiddleLeft;

            // Make textbox wider and move to the right
            var textRect = text.gameObject.GetComponent <RectTransform>();
            var oldTeMin = textRect.offsetMin;
            var oldTeMax = textRect.offsetMax;

            textRect.offsetMin = new Vector2(128, oldTeMin.y);
            textRect.offsetMax = new Vector2(348, oldTeMax.y);
            textRect.sizeDelta = new Vector2(220, 30);

            var toggleComp = orig.GetComponentInChildren <Toggle>();

            // Move toggle to the left
            var toggleRect = toggleComp.gameObject.GetComponent <RectTransform>();
            var oldToMin   = toggleRect.offsetMin;
            var oldToMax   = toggleRect.offsetMax;

            toggleRect.offsetMin = new Vector2(98, oldToMin.y);
            toggleRect.offsetMax = new Vector2(128, oldToMax.y);
            toggleRect.sizeDelta = new Vector2(30, 30);

            foreach (var toggle in toggleInfo)
            {
                AddBtn(back, orig, toggle.name, toggle.resize, toggle.clickEvent);
            }

            var sub = UI.transform.Find("Light/SubLight");

            if (sub != null)
            {
                auxiliaryLightToggle = sub.GetComponentInChildren <Toggle>();
            }

            if (auxiliaryLightToggle != null)
            {
                auxiliaryLightToggle.isOn = auxiliaryLight.Value;
            }

            created = true;
        }
示例#14
0
        static bool SpankingAutoProc(int _state, Spnking __instance)
        {
            HSceneFlagCtrl ctrlFlag = Singleton <HSceneFlagCtrl> .Instance;

            if (ctrlFlag.initiative == 0)
            {
                return(true);
            }
            HVoiceCtrl   voice  = (HVoiceCtrl)voiceFieldInfo.GetValue(__instance);
            HSceneSprite sprite = (HSceneSprite)spriteFieldInfo.GetValue(__instance);

            ChaControl[]  chaFemales     = (ChaControl[])chaFemalesFieldInfo.GetValue(__instance);
            ShuffleRand[] randVoicePlays = (ShuffleRand[])randVoicePlaysFieldInfo.GetValue(__instance);

            if (!ctrlFlag.stopFeelFemale)
            {
                ctrlFlag.feel_f = Mathf.Clamp01(ctrlFlag.feel_f - ctrlFlag.guageDecreaseRate * Time.deltaTime);
            }
            if (_state == 1 && ctrlFlag.feel_f < 0.5f)
            {
                playMethodInfo.Invoke(__instance, new object[] { "WIdle", false });
                voice.HouchiTime = 0f;
                return(true);
            }
            if (!GeneralHooks.SpankTimer.IsTime())
            {
                return(false);
            }
            else
            {
                GeneralHooks.SpankTimer.Reset();
            }
            if (voice.nowVoices[0].state == HVoiceCtrl.VoiceKind.voice || voice.nowVoices[0].state == HVoiceCtrl.VoiceKind.startVoice)
            {
                Voice.Stop(ctrlFlag.voice.voiceTrs[0]);
                voice.ResetVoice();
            }

            string scene = "D_Action";

            switch (_state)
            {
            case 1:
                scene = "SAction";
                break;

            case 0:
                scene = "WAction";
                break;
            }

            playMethodInfo.Invoke(__instance, new object[] { scene, false });

            upFeelFieldInfo.SetValue(__instance, true);
            float value = Mathf.Clamp01(chaFemales[0].siriAkaRate + ctrlFlag.siriakaAddRate);

            chaFemales[0].ChangeSiriAkaRate(value);
            timeFeelUpFieldInfo.SetValue(__instance, 0f);
            backupFieldInfo.SetValue(__instance, ctrlFlag.feel_f);
            backupFeelFieldInfo.SetValue(__instance, ctrlFlag.feelPain);
            ctrlFlag.isNotCtrl = false;
            if (randVoicePlays[0].Get() == 0)
            {
                ctrlFlag.voice.playVoices[0] = true;
            }
            ctrlFlag.voice.playShorts[0] = 0;

            bool isAddFeel = (bool)isAddFieldInfo.GetValue(__instance);

            if (!isAddFeel && ctrlFlag.feel_f >= 0.70f)
            {
                SpankingAfterWaitingAnimationAutoSelector();
            }

            return(false);
        }
示例#15
0
 private void PrepareButtons(HSceneSprite sprite)
 {
     _CurrentVisibleButtons = _LstFinishVisibleField.GetValue(_Sprite) as List <int>;
 }
示例#16
0
        public static void HSceneSprite_SetLightInfo_CreateButtons(HSceneSprite __instance)
        {
            sprite = __instance;

            created = Content != null;

            if (created)
            {
                for (var i = 0; i < toggleInfo.Count; i++)
                {
                    foreach (var b in btn.Where(b => b.Definition.Key == toggleInfo[i].name))
                    {
                        toggles[i].isOn = b.Value;
                    }
                }

                return;
            }

            oldParents = new GameObject[2];
            newParents = new GameObject[2];

            toggles?.Clear();

            toggles = new List <Toggle>();

            var UI = GameObject.Find("CommonSpace/HSceneUISet");

            var Btn      = UI.transform.Find("Canvas/CanvasGroup/Panel/CoordinatesCard/SortPanel/SortCategory/Name");
            var LightAdj = UI.transform.Find("Canvas/CanvasGroup/LightCategory/BG/LightAdjustment");

            // Lights
            camLightTrs = new Transform[2];
            backLights  = new List <Light>();
            auxLights   = new List <Light>();

            lights      = Resources.FindObjectsOfTypeAll <Light>();
            resolutions = new int[lights.Length];

            for (var i = 0; i < lights.Length; i++)
            {
                resolutions[i] = lights[i] != null ? lights[i].shadowCustomResolution : -1;
            }

            foreach (var light in lights)
            {
                var parent = light.transform;

                switch (parent.name)
                {
                case "Directional Light Key":
                    camLightTrs[0] = parent;
                    break;

                case "Cam Light":
                    camLightTrs[1] = parent;
                    break;

                case "Directional Light Back":
                case "Back Light":
                    backLights.Add(light);
                    break;

                case "Directional Light Fill":
                case "Directional Light Top":
                    auxLights.Add(light);
                    break;
                }
            }

            // Set up panel for new buttons and insert them
            Content = new GameObject("Content", typeof(RectTransform));
            Content.transform.SetParent(LightAdj, false);

            var vlg = Content.AddComponent <VerticalLayoutGroup>();

            vlg.childControlHeight    = false;
            vlg.childControlWidth     = false;
            vlg.childForceExpandWidth = false;
            vlg.enabled = false;

            LightAdj.Find("DirectionHorizontal").SetParent(Content.transform, false);
            LightAdj.Find("DirectionVertical").SetParent(Content.transform, false);
            LightAdj.Find("Power").SetParent(Content.transform, false);

            var ScrollView = new GameObject("ScrollView", typeof(RectTransform));

            ScrollView.transform.SetParent(LightAdj.transform, false);

            var svScrollRect = ScrollView.AddComponent <ScrollRect>();

            var ViewPort = new GameObject("ViewPort", typeof(RectTransform));

            ViewPort.transform.SetParent(ScrollView.transform, false);
            ViewPort.AddComponent <RectMask2D>();

            var vpRectTransform = ViewPort.GetComponent <RectTransform>();

            vpRectTransform.offsetMin = new Vector2(-80, -100);
            vpRectTransform.offsetMax = new Vector2(90, 70);
            vpRectTransform.sizeDelta = new Vector2(170, 170);

            Content.transform.SetParent(ViewPort.transform, false);

            var crt = Content.GetComponent <RectTransform>();

            crt.pivot = new Vector2(0.5f, 1);

            svScrollRect.content           = crt;
            svScrollRect.viewport          = vpRectTransform;
            svScrollRect.horizontal        = false;
            svScrollRect.scrollSensitivity = 40;

            crt.offsetMin = new Vector2(-85, 15);
            crt.offsetMax = new Vector2(85, 15);
            crt.sizeDelta = new Vector2(170, 0);

            foreach (var toggle in toggleInfo)
            {
                AddBtn(Content.transform, Btn, toggle.name, toggle.resize, toggle.clickEvent);
            }

            var csf = Content.AddComponent <ContentSizeFitter>();

            csf.verticalFit = ContentSizeFitter.FitMode.PreferredSize;

            vlg.enabled = true;

            created = true;
        }