Exemplo n.º 1
0
 static bool Prefix(GameNoteController __instance, Saber saber, Vector3 cutPoint, Quaternion orientation, Vector3 cutDirVec, bool allowBadCut,
                    ref AudioTimeSyncController ____audioTimeSyncController, ref BoxCuttableBySaber ____bigCuttableBySaber, ref BoxCuttableBySaber ____smallCuttableBySaber, NoteBasicCutInfoSO ____noteBasicCutInfo)
 {
     if ((int)__instance.noteData.cutDirection >= 2000)
     {
         float timeDeviation = __instance.noteData.time - ____audioTimeSyncController.songTime;
         bool  flag;
         bool  flag2;
         bool  flag3;
         float cutDirDeviation;
         ____noteBasicCutInfo.GetBasicCutInfo(__instance.noteTransform, __instance.noteData.noteType, NoteCutDirection.Any, saber.saberType, saber.bladeSpeed, cutDirVec, out flag, out flag2, out flag3, out cutDirDeviation);
         float swingRating = 0f;
         SaberAfterCutSwingRatingCounter afterCutSwingRatingCounter = null;
         if (flag && flag2 && flag3)
         {
             swingRating = saber.ComputeSwingRating();
             afterCutSwingRatingCounter = saber.CreateAfterCutSwingRatingCounter();
         }
         else if (!allowBadCut)
         {
             return(false);
         }
         Vector3     vector = orientation * Vector3.up;
         Plane       plane  = new Plane(vector, cutPoint);
         float       cutDistanceToCenter = Mathf.Abs(plane.GetDistanceToPoint(__instance.noteTransform.position));
         NoteCutInfo noteCutInfo         = new NoteCutInfo(flag2, flag, flag3, false, saber.bladeSpeed, cutDirVec, saber.saberType, swingRating, timeDeviation, cutDirDeviation, plane.ClosestPointOnPlane(__instance.transform.position), vector, afterCutSwingRatingCounter, cutDistanceToCenter);
         ____bigCuttableBySaber.canBeCut   = false;
         ____smallCuttableBySaber.canBeCut = false;
         __instance.SendNoteWasCutEvent(noteCutInfo);
         return(false);
     }
     return(true);
 }
Exemplo n.º 2
0
        private static void Postfix(BoxCuttableBySaber __instance, ref BoxCollider ____collider)
        {
            if (!Config.Instance.IsEnabled)
            {
                return;
            }

            GameObject cube = GameObject.CreatePrimitive(PrimitiveType.Cube);

            cube.name = "VisibleCubeCollider";
            cube.transform.SetParent(__instance.transform, false);
            cube.transform.localScale = __instance.colliderSize;
            cube.transform.position   = new Vector3(0, 1, 0);
            cube.GetComponent <MeshRenderer>().material = Plugin.hitboxMaterial;

            // Silhouette-Outlined Diffuse
        }
Exemplo n.º 3
0
#pragma warning disable SA1313 // Parameter names should begin with lower-case letter
        private static void Prefix(NoteController __instance, NoteData ____noteData, NoteMovement ____noteMovement)
#pragma warning restore SA1313 // Parameter names should begin with lower-case letter
        {
            if (____noteData is CustomNoteData customData)
            {
                CustomNoteData = customData;

                dynamic dynData = customData.customData;

                Track   track           = Trees.at(dynData, "track");
                dynamic animationObject = Trees.at(dynData, "_animation");
                if (track != null || animationObject != null)
                {
                    NoteJump          noteJump      = NoteControllerInit._noteJumpAccessor(ref ____noteMovement);
                    NoteFloorMovement floorMovement = NoteControllerInit._noteFloorMovementAccessor(ref ____noteMovement);

                    // idk i just copied base game time
                    float jumpDuration = _jumpDurationAccessor(ref noteJump);
                    float elapsedTime  = _audioTimeSyncControllerAccessor(ref noteJump).songTime - (____noteData.time - (jumpDuration * 0.5f));
                    elapsedTime = NoteJumpManualUpdate.NoteJumpTimeAdjust(elapsedTime, jumpDuration);
                    float normalTime = elapsedTime / jumpDuration;

                    AnimationHelper.GetObjectOffset(animationObject, track, normalTime, out Vector3? positionOffset, out Quaternion? rotationOffset, out Vector3? scaleOffset, out Quaternion? localRotationOffset, out float?dissolve, out float?dissolveArrow, out float?cuttable);

                    if (positionOffset.HasValue)
                    {
                        Vector3 moveStartPos = Trees.at(dynData, "moveStartPos");
                        Vector3 moveEndPos   = Trees.at(dynData, "moveEndPos");
                        Vector3 jumpEndPos   = Trees.at(dynData, "jumpEndPos");

                        Vector3 offset = positionOffset.Value;
                        _floorStartPosAccessor(ref floorMovement) = moveStartPos + offset;
                        _floorEndPosAccessor(ref floorMovement)   = moveEndPos + offset;
                        _jumpStartPosAccessor(ref noteJump)       = moveEndPos + offset;
                        _jumpEndPosAccessor(ref noteJump)         = jumpEndPos + offset;
                    }

                    Transform transform = __instance.transform;

                    if (rotationOffset.HasValue || localRotationOffset.HasValue)
                    {
                        Quaternion worldRotation = Trees.at(dynData, "worldRotation");
                        Quaternion localRotation = Trees.at(dynData, "localRotation");

                        Quaternion worldRotationQuatnerion = worldRotation;
                        if (rotationOffset.HasValue)
                        {
                            worldRotationQuatnerion *= rotationOffset.Value;
                            Quaternion inverseWorldRotation = Quaternion.Euler(-worldRotationQuatnerion.eulerAngles);
                            NoteControllerInit._worldRotationJumpAccessor(ref noteJump)              = worldRotationQuatnerion;
                            NoteControllerInit._inverseWorldRotationJumpAccessor(ref noteJump)       = inverseWorldRotation;
                            NoteControllerInit._worldRotationFloorAccessor(ref floorMovement)        = worldRotationQuatnerion;
                            NoteControllerInit._inverseWorldRotationFloorAccessor(ref floorMovement) = inverseWorldRotation;
                        }

                        worldRotationQuatnerion *= localRotation;

                        if (localRotationOffset.HasValue)
                        {
                            worldRotationQuatnerion *= localRotationOffset.Value;
                        }

                        transform.localRotation = worldRotationQuatnerion;
                    }

                    if (scaleOffset.HasValue)
                    {
                        transform.localScale = scaleOffset.Value;
                    }

                    if (dissolve.HasValue)
                    {
                        CutoutEffect cutoutEffect = Trees.at(dynData, "cutoutEffect");
                        if (cutoutEffect == null)
                        {
                            BaseNoteVisuals     baseNoteVisuals     = __instance.gameObject.GetComponent <BaseNoteVisuals>();
                            CutoutAnimateEffect cutoutAnimateEffect = _noteCutoutAnimateEffectAccessor(ref baseNoteVisuals);
                            CutoutEffect[]      cutoutEffects       = _cutoutEffectAccessor(ref cutoutAnimateEffect);
                            cutoutEffect = cutoutEffects.First(n => n.name != "NoteArrow"); // 1.11 NoteArrow has been added to the CutoutAnimateEffect and we don't want that
                            dynData.cutoutAnimateEffect = cutoutEffect;
                        }

                        cutoutEffect.SetCutout(1 - dissolve.Value);
                    }

                    if (dissolveArrow.HasValue && __instance.noteData.noteType != NoteType.Bomb)
                    {
                        DisappearingArrowController disappearingArrowController = Trees.at(dynData, "disappearingArrowController");
                        if (disappearingArrowController == null)
                        {
                            disappearingArrowController         = __instance.gameObject.GetComponent <DisappearingArrowController>();
                            dynData.disappearingArrowController = disappearingArrowController;
                        }

                        disappearingArrowController.SetArrowTransparency(dissolveArrow.Value);
                    }

                    if (cuttable.HasValue)
                    {
                        bool enabled = cuttable.Value >= 1;

                        switch (__instance)
                        {
                        case GameNoteController gameNoteController:
                            BoxCuttableBySaber bigCuttableBySaber = _gameNoteBigCuttableAccessor(ref gameNoteController);
                            if (bigCuttableBySaber.enabled != enabled)
                            {
                                bigCuttableBySaber.enabled = enabled;
                                _gameNoteSmallCuttableAccessor(ref gameNoteController).enabled = enabled;
                            }

                            break;

                        case BombNoteController bombNoteController:
                            CuttableBySaber boxCuttableBySaber = _bombNoteCuttableAccessor(ref bombNoteController);
                            if (boxCuttableBySaber.enabled != enabled)
                            {
                                boxCuttableBySaber.enabled = enabled;
                            }

                            break;
                        }
                    }
                }
            }
        }
        private static bool Prefix(GameNoteController __instance, NoteData noteData, Vector3 moveStartPos, Vector3 moveEndPos, Vector3 jumpEndPos,
                                   float moveDuration, float jumpDuration, float startTime, float jumpGravity, bool disappearingArrow, bool ghostNote,
                                   ref bool ____disappearingArrow, ref bool ____ghostNote, ref BoxCuttableBySaber ____bigCuttableBySaber, ref BoxCuttableBySaber ____smallCuttableBySaber)
        {
            var beatmapData = BS_Utils.Plugin.LevelData.GameplayCoreSceneSetupData.difficultyBeatmap.beatmapData;

            ____disappearingArrow             = disappearingArrow;
            ____ghostNote                     = (noteData.id >= beatmapData.bombsCount + beatmapData.notesCount) ? true : ghostNote;
            ____bigCuttableBySaber.canBeCut   = false;
            ____smallCuttableBySaber.canBeCut = false;

            ((NoteController)__instance).Init(noteData, moveStartPos, moveEndPos, jumpEndPos, moveDuration, jumpDuration, startTime, jumpGravity);
            return(false);
        }