Beispiel #1
0
        private static void TrackColorize(NoteController instance, NoteData noteData, NoteMovement noteMovement)
        {
            if (NoodleExtensions.NoodleController.NoodleExtensionsActive)
            {
                ChromaNoodleData chromaData = ChromaNoodleDatas[noteData];

                Track           track = chromaData.Track;
                PointDefinition pathPointDefinition = chromaData.LocalPathColor;
                if (track != null || pathPointDefinition != null)
                {
                    NoteJump noteJump = _noteJumpAccessor(ref noteMovement);

                    float jumpDuration = _jumpDurationAccessor(ref noteJump);
                    float elapsedTime  = _audioTimeSyncControllerAccessor(ref noteJump).songTime - (noteData.time - (jumpDuration * 0.5f));
                    float normalTime   = elapsedTime / jumpDuration;

                    Chroma.AnimationHelper.GetColorOffset(pathPointDefinition, track, normalTime, out Color? colorOffset);

                    if (colorOffset.HasValue)
                    {
                        Color color = colorOffset.Value;
                        if (instance is BombNoteController bnc)
                        {
                            bnc.SetBombColor(color);
                        }
                        else
                        {
                            instance.SetNoteColors(color, color);
                            instance.SetActiveColors();
                        }
                    }
                }
            }
        }
Beispiel #2
0
    public GameObject GetPooledPurpleNote(bool isStar = false)
    {
        for (int i = 0; i < PooledBlueNotes.Count; i++)
        {
            if (!PooledBlueNotes[i].activeInHierarchy)
            {
                Component[] objs = PooledBlueNotes[i].GetComponents(typeof(Component)); //Remove Scripts
                foreach (Component comp in objs)
                {
                    if (comp.GetType() == typeof(NoteJump))
                    {
                        NoteJump test = comp as NoteJump;
                        Destroy(test);
                    }
                }

                Transform[] ts = PooledBlueNotes[i].transform.GetComponentsInChildren <Transform>(true);
                foreach (Transform t in ts)
                {
                    if (t.gameObject.name == "Box")
                    {
                        t.gameObject.transform.localRotation = Quaternion.identity;
                    }
                }
                PooledBlueNotes[i].transform.localRotation = Quaternion.identity;
                return(PooledBlueNotes[i]);
            }
        }

        GameObject newPurple = Instantiate(bluePrefab);

        newPurple.SetActive(false);
        PooledBlueNotes.Add(newPurple);
        return(newPurple);
    }
Beispiel #3
0
    void OnTriggerEnter(Collider other)
    {
        if (other.name == "Box")
        {
            velocityEstimator.BeginEstimatingVelocity();
            hitNote = null;

            mainManager.Vibrate(Controller, device);

            _Sliced hull = other.gameObject.Slice(cutPlane.transform.position, cutPlane.transform.up, crossMat);

            if (hull != null)
            {
                hull.CreateLowerHull(other.gameObject, crossMat);
                hull.CreateUpperHull(other.gameObject, crossMat);
            }

            Component[] objs = other.gameObject.transform.parent.GetComponents(typeof(Component)); //Remove Scripts
            foreach (Component comp in objs)
            {
                if (comp.GetType() == typeof(NoteJump))
                {
                    hitNote = comp as NoteJump;

                    if (hitNote.note._type == handColor)
                    {
                        hitSpeed = velocityEstimator.speed;

                        if (correctHit(hitNote.note._cutDirection))
                        {
                            mainManager.gameManager.UpdateScore(false);
                        }
                        else
                        {
                            //Play a wrong hit sound here
                            mainManager.gameManager.UpdateScore(true);
                        }
                    }
                    else
                    {
                        //Play a wrong hit sound here
                        mainManager.gameManager.UpdateScore(true);
                    }

                    hitNote.gameObject.SetActive(false);
                }
            }
        }
    }
Beispiel #4
0
    public static void SpawnBombNote(NoteData note, int noteIndex)
    {
        GameObject newNote = ObjectPooler._current.GetPooledBombNote();

        Vector3 position = new Vector3(GameObject.Find(note._lineLayer.ToString() + note._lineIndex.ToString()).transform.position.x, GameObject.Find(note._lineLayer.ToString() + note._lineIndex.ToString()).transform.position.y, mainManager.gameManager.SpawnPoint.transform.position.z);

        NoteJump tempCube = newNote.AddComponent <NoteJump>();

        tempCube.noteIndex    = noteIndex;
        tempCube.note         = note;
        tempCube.currentColor = note._type;

        newNote.transform.position = position;

        newNote.SetActive(true);
    }
        public override void SetNoteControllerEventCallbacks(NoteController noteController)
        {
            noteController.noteDidStartJumpEvent  += HandleNoteDidStartJump;
            noteController.noteDidFinishJumpEvent += HandleNoteDidFinishJump;
            noteController.noteWasCutEvent        += HandleNoteWasCut;
            noteController.noteWasMissedEvent     += HandleNoteWasMissed;
            noteController.noteDidDissolveEvent   += HandleNoteDidDissolve;

            NoteJump noteJump = noteController.GetComponent <NoteJump>();

            NoteJumpPlayerController(ref noteJump)        = owner;
            NoteJumpAudioTimeSyncController(ref noteJump) = onlineSyncController;
            NoteFloorMovement noteFloorMovement = noteController.GetComponent <NoteFloorMovement>();

            NoteFloorMovementAudioTimeSyncController(ref noteFloorMovement) = onlineSyncController;
            _activeNotes.Add(noteController);
        }
        public static void Postfix(NoteJump __instance, Vector3 startPos, Vector3 endPos, float jumpDuration, float startTime, float gravity, float flipYSide, NoteCutDirection cutDirection, ref Quaternion ____startRotation, ref Quaternion ____middleRotation, ref Quaternion ____endRotation, ref int ____randomRotationIdx, ref Vector3[] ____randomRotations)
        {
            if (!Plugin.active)
            {
                return;
            }

            Vector3 eulerAngles = ____endRotation.eulerAngles;

            eulerAngles.y = __instance.transform.rotation.eulerAngles.y;
            ____endRotation.eulerAngles = eulerAngles;
            Vector3 vector = ____endRotation.eulerAngles;

            ____randomRotationIdx = (____randomRotationIdx + Mathf.RoundToInt(Mathf.Abs(startPos.x) * 10f) + 1) % ____randomRotations.Length;
            vector            += ____randomRotations[____randomRotationIdx] * 20f;
            ____middleRotation = Quaternion.Euler(vector);
            ____startRotation  = __instance.transform.rotation;
        }
        public override void RemoveNoteControllerEventCallbacks(NoteController noteController)
        {
            noteController.noteDidStartJumpEvent  -= HandleNoteDidStartJump;
            noteController.noteDidFinishJumpEvent -= HandleNoteDidFinishJump;
            noteController.noteWasCutEvent        -= HandleNoteWasCut;
            noteController.noteWasMissedEvent     -= HandleNoteWasMissed;
            noteController.noteDidDissolveEvent   -= HandleNoteDidDissolve;

            NoteJump noteJump = noteController.GetComponent <NoteJump>();

            NoteJumpPlayerController(ref noteJump)        = _localPlayer;
            NoteJumpAudioTimeSyncController(ref noteJump) = _localSyncController;
            NoteFloorMovement noteFloorMovement = noteController.GetComponent <NoteFloorMovement>();

            NoteFloorMovementAudioTimeSyncController(ref noteFloorMovement) = _localSyncController;

            if (_activeNotes != null)
            {
                _activeNotes.Remove(noteController);
            }
        }
        private static void Postfix(NoteController __instance, NoteData noteData, NoteMovement ____noteMovement)
        {
            if (noteData is CustomNoteData customData)
            {
                dynamic dynData = customData.customData;

                float?cutDir = (float?)Trees.at(dynData, CUTDIRECTION);

                NoteJump          noteJump      = _noteJumpAccessor(ref ____noteMovement);
                NoteFloorMovement floorMovement = _noteFloorMovementAccessor(ref ____noteMovement);

                if (cutDir.HasValue)
                {
                    Quaternion rotation = Quaternion.Euler(0, 0, cutDir.Value);
                    _endRotationAccessor(ref noteJump) = rotation;
                    Vector3 vector = rotation.eulerAngles;
                    vector += _randomRotationsAccessor(ref noteJump)[_randomRotationIdxAccessor(ref noteJump)] * 20;
                    Quaternion midrotation = Quaternion.Euler(vector);
                    _middleRotationAccessor(ref noteJump) = midrotation;
                }
            }
        }
Beispiel #9
0
        private static void TrackColorize(NoteController instance, NoteData noteData, NoteMovement noteMovement)
        {
            if (NoodleExtensions.NoodleController.NoodleExtensionsActive && noteData is CustomNoteData customData)
            {
                dynamic dynData         = customData.customData;
                Track   track           = AnimationHelper.GetTrack(dynData);
                dynamic animationObject = Trees.at(dynData, ANIMATION);

                if (track != null || animationObject != null)
                {
                    NoteJump noteJump = _noteJumpAccessor(ref noteMovement);

                    float jumpDuration = _jumpDurationAccessor(ref noteJump);
                    float elapsedTime  = _audioTimeSyncControllerAccessor(ref noteJump).songTime - (noteData.time - (jumpDuration * 0.5f));
                    float normalTime   = elapsedTime / jumpDuration;

                    Chroma.AnimationHelper.GetColorOffset(animationObject, track, normalTime, out Color? colorOffset);

                    if (colorOffset.HasValue)
                    {
                        Color color = colorOffset.Value;
                        if (instance is BombNoteController bnc)
                        {
                            bnc.SetBombColor(color);
                        }
                        else
                        {
                            instance.SetNoteColors(color, color);
                            dynData.color0 = color;
                            dynData.color1 = color;
                            instance.SetActiveColors();
                        }
                    }
                }
            }
        }
Beispiel #10
0
        private static void Postfix(NoteController __instance, NoteData ____noteData, NoteMovement ____noteMovement)
        {
            ChromaObjectData?chromaData = TryGetObjectData <ChromaObjectData>(____noteData);

            if (chromaData == null)
            {
                return;
            }

            Track?          track = chromaData.Track;
            PointDefinition?pathPointDefinition = chromaData.LocalPathColor;

            if (track != null || pathPointDefinition != null)
            {
                NoteJump noteJump = _noteJumpAccessor(ref ____noteMovement);

                float jumpDuration = _jumpDurationAccessor(ref noteJump);
                float elapsedTime  = _audioTimeSyncControllerAccessor(ref noteJump).songTime - (____noteData.time - (jumpDuration * 0.5f));
                float normalTime   = elapsedTime / jumpDuration;

                Chroma.AnimationHelper.GetColorOffset(pathPointDefinition, track, normalTime, out Color? colorOffset);

                if (colorOffset.HasValue)
                {
                    Color color = colorOffset.Value;
                    if (__instance is BombNoteController)
                    {
                        __instance.ColorizeBomb(color);
                    }
                    else
                    {
                        __instance.ColorizeNote(color);
                    }
                }
            }
        }
        static void Postfix(
            NoteJump __instance,
            ref Vector3 __result,
            AudioTimeSyncController ____audioTimeSyncController,
            float ____beatTime,
            float ____jumpDuration,
            Vector3 ____localPosition,
            Vector3 ____startPos,
            Vector3 ____endPos,
            Quaternion ____worldRotation)
        {
            if (Config.parabola)
            {
                float time       = ____audioTimeSyncController.songTime - ____beatTime + ____jumpDuration * 0.5f;
                float amount     = time / ____jumpDuration;
                float amountHalf = amount - 0.25f;
                ____localPosition.y = ____localPosition.y - 60f * (amountHalf * amountHalf - 0.0625f);
                //____localPosition.z = playerController.MoveTowardsHead(____startPos.z, ____endPos.z, ____inverseWorldRotation, num2);
                ____localPosition.z = Mathf.Lerp(____startPos.z, ____endPos.z, amount);

                __result = ____worldRotation * ____localPosition;
                __instance.transform.position = __result;
            }

            if (Config.centering)
            {
                ____localPosition.x           = ____localPosition.x / 2f + center.x / 2f;
                ____localPosition.y           = ____localPosition.y / 2f + center.y / 2f;
                ____localPosition.y           = ____localPosition.y + 0.3f;
                __result                      = ____worldRotation * ____localPosition;
                __instance.transform.position = __result;
            }

            //if (tick++ % 9 == 0) Logger.log.Debug($"NoteJumpManualUpdate: num2={num2}, __result={__result}, ____startPos={____startPos}, ____endPos={____endPos}");

            if (Config.vacuum)
            {
                if (playerController == null)
                {
                    playerController = Resources.FindObjectsOfTypeAll <PlayerController>().FirstOrDefault();
                }

                if (playerController != null)
                {
                    float time   = ____audioTimeSyncController.songTime - ____beatTime + ____jumpDuration * 0.5f;
                    float amount = time / ____jumpDuration;
                    amount = Mathf.Clamp01(amount * 2);

                    if (amount > 0.7f)
                    {
                        Vector3 endPos = playerController.rightSaber.saberBladeTopPos;
                        float   t      = (amount - 0.5f) * 2;
                        t = t * t * t * t;
                        ____localPosition.x           = Mathf.Lerp(____localPosition.x, endPos.x, t);
                        ____localPosition.y           = Mathf.Lerp(____localPosition.y, endPos.y, t);
                        __result                      = ____worldRotation * ____localPosition;
                        __instance.transform.position = __result;
                    }
                }
            }

            if (Config.feet)
            {
                ____localPosition.y           = 0.1f;
                __result                      = ____worldRotation * ____localPosition;
                __instance.transform.position = __result;

                if (Config.centering)
                {
                    ____localPosition.y = ____localPosition.y / 2f + center.y / 2f;
                }
            }
        }
        private static bool Prefix(NoteMovement __instance, Vector3 moveStartPos, Vector3 moveEndPos, Vector3 jumpEndPos, float moveDuration, float jumpDuration, float startTime, float jumpGravity, float flipYSide, NoteCutDirection cutDirection, ref float ____zOffset, ref NoteFloorMovement ____floorMovement, ref Vector3 ____position, ref Vector3 ____prevPosition, ref NoteJump ____jump, ref Action ___didInitEvent)
        {
            if (!Plugin.active)
            {
                return(true);
            }

            moveStartPos += __instance.transform.forward * ____zOffset;
            moveEndPos   += __instance.transform.forward * ____zOffset;
            jumpEndPos   += __instance.transform.forward * ____zOffset;

            ____floorMovement.Init(moveStartPos, moveEndPos, moveDuration, startTime);
            ____position     = ____floorMovement.SetToStart();
            ____prevPosition = ____position;
            ____jump.Init(moveEndPos, jumpEndPos, jumpDuration, startTime + moveDuration, jumpGravity, flipYSide, cutDirection);
            ReflectionUtil.SetPrivateProperty(__instance, "movementPhase", NoteMovement.MovementPhase.MovingOnTheFloor);
            ___didInitEvent?.Invoke();

            return(false);
        }
        public static bool Prefix(NoteJump __instance, ref Vector3 __result, ref AudioTimeSyncController ____audioTimeSyncController, ref float ____startTime, ref float ____jumpDuration, ref Vector3 ____startPos, ref Vector3 ____endPos, ref Vector3 ____localPosition, ref PlayerController ____playerController, ref float ____startVerticalVelocity, ref float ____gravity, ref float ____yAvoidance, ref Quaternion ____startRotation, ref Quaternion ____middleRotation, ref Quaternion ____endRotation, ref Transform ____rotatedObject, ref float ____endDistanceOffest, ref bool ____halfJumpMarkReported, ref Action ___noteJumpDidPassHalfEvent, ref bool ____threeQuartersMarkReported, ref Action <NoteJump> ___noteJumpDidPassThreeQuartersEvent, ref float ____missedTime, ref bool ____missedMarkReported, ref Action ___noteJumpDidPassMissedMarkerEvent, ref Action ___noteJumpDidFinishEvent)
        {
            if (!Plugin.active)
            {
                return(true);
            }

            float songTime = ____audioTimeSyncController.songTime;
            float num      = songTime - ____startTime;
            float num2     = num / ____jumpDuration;

            ____localPosition   = Vector3.LerpUnclamped(____startPos + __instance.transform.rotation * ____playerController.headPos * Mathf.Min(1f, num2 * 2f), ____endPos + __instance.transform.rotation * ____playerController.headPos, num2);
            ____localPosition.y = ____startPos.y + ____startVerticalVelocity * num - ____gravity * num * num * 0.5f;

            if (____yAvoidance != 0f && num2 < 0.25f)
            {
                float num3 = 0.5f - Mathf.Cos(num2 * 8f * 3.14159274f) * 0.5f;
                ____localPosition.y += num3 * ____yAvoidance;
            }

            if (num2 < 0.5f)
            {
                Quaternion quaternion;
                if (num2 < 0.125f)
                {
                    quaternion = Quaternion.Lerp(____startRotation, ____middleRotation, Mathf.Sin(num2 * 3.14159274f * 4f));
                }
                else
                {
                    quaternion = Quaternion.Lerp(____middleRotation, ____endRotation, Mathf.Sin((num2 - 0.125f) * 3.14159274f * 2f));
                }
                Vector3 headPos = ____playerController.headPos;
                headPos.y = Mathf.Lerp(headPos.y, ____localPosition.y, 0.8f);
                Vector3    normalized  = (____localPosition - headPos).normalized;
                Quaternion quaternion2 = default(Quaternion);
                quaternion2.SetLookRotation(normalized, ____rotatedObject.up);
                ____rotatedObject.rotation = Quaternion.Lerp(quaternion, quaternion2, num2 * 2f);
            }

            if (num2 >= 0.5f && !____halfJumpMarkReported)
            {
                ____halfJumpMarkReported = true;
                ___noteJumpDidPassHalfEvent?.Invoke();
            }

            if (num2 >= 0.75f && !____threeQuartersMarkReported)
            {
                ____threeQuartersMarkReported = true;
                ___noteJumpDidPassThreeQuartersEvent?.Invoke(__instance);
            }

            if (songTime >= ____missedTime && !____missedMarkReported)
            {
                ____missedMarkReported = true;
                ___noteJumpDidPassMissedMarkerEvent?.Invoke();
            }

            if (____threeQuartersMarkReported)
            {
                float num4 = (num2 - 0.75f) / 0.25f;
                num4 = num4 * num4 * num4;
                ____localPosition -= Vector3.LerpUnclamped(Vector3.zero, __instance.transform.forward * ____endDistanceOffest, num4);
            }

            if (num2 >= 1f)
            {
                ___noteJumpDidFinishEvent?.Invoke();
            }

            Vector3 vector = ____localPosition;

            __instance.transform.position = ____localPosition;
            __result = vector;

            return(false);
        }
#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;
                        }
                    }
                }
            }
        }
Beispiel #15
0
        static void Postfix(
            NoteJump __instance,
            ref Vector3 __result,
            AudioTimeSyncController ____audioTimeSyncController,
            float ____beatTime,
            float ____jumpDuration,
            Vector3 ____localPosition,
            Vector3 ____startPos,
            Vector3 ____endPos,
            Quaternion ____worldRotation,
            Quaternion ____middleRotation,
            Transform ____rotatedObject)
        {
            if (Config.parabola)
            {
                float time       = ____audioTimeSyncController.songTime - ____beatTime + ____jumpDuration * 0.5f;
                float amount     = time / ____jumpDuration;
                float amountHalf = amount - 0.25f;
                ____localPosition.y = ____localPosition.y - 60f * (amountHalf * amountHalf - 0.0625f);
                //____localPosition.z = playerController.MoveTowardsHead(____startPos.z, ____endPos.z, ____inverseWorldRotation, num2);
                ____localPosition.z = Mathf.Lerp(____startPos.z, ____endPos.z, amount);

                __result = ____worldRotation * ____localPosition;
                __instance.transform.position = __result;
            }

            if (Config.centering)
            {
                float time   = ____audioTimeSyncController.songTime - ____beatTime + ____jumpDuration * 0.5f;
                float amount = time / ____jumpDuration;
                ____localPosition.y           = Mathf.Lerp(____localPosition.y, ____localPosition.y / 2f + Config.centeringBaseY, Mathf.Clamp01(amount * 10f));
                __result                      = ____worldRotation * ____localPosition;
                __instance.transform.position = __result;
            }

            //if (tick++ % 9 == 0) Logger.log.Debug($"NoteJumpManualUpdate: num2={num2}, __result={__result}, ____startPos={____startPos}, ____endPos={____endPos}");

            if (Config.vacuum)
            {
                if (_saberManager == null)
                {
                    _saberManager = Object.FindObjectsOfType <SaberManager>().FirstOrDefault();
                }

                if (_saberManager != null)
                {
                    float time   = ____audioTimeSyncController.songTime - ____beatTime + ____jumpDuration * 0.5f;
                    float amount = time / ____jumpDuration;
                    amount = Mathf.Clamp01(amount * 2);

                    if (amount > 0.7f)
                    {
                        Vector3 endPos = _saberManager.rightSaber.saberBladeTopPos;
                        float   t      = (amount - 0.5f) * 2;
                        t = t * t * t * t;
                        ____localPosition.x           = Mathf.Lerp(____localPosition.x, endPos.x, t);
                        ____localPosition.y           = Mathf.Lerp(____localPosition.y, endPos.y, t);
                        __result                      = ____worldRotation * ____localPosition;
                        __instance.transform.position = __result;
                    }
                }
            }

            if (Config.feet)
            {
                ____localPosition.y           = Config.feetNotesY;
                __result                      = ____worldRotation * ____localPosition;
                __instance.transform.position = __result;

                Transform noteCube = __instance.transform.Find("NoteCube");
                if (noteCube != null)
                {
                    foreach (Transform noteCubeChild in noteCube)
                    {
                        if (noteCubeChild.name.StartsWith("customNote"))
                        {
                            foreach (Transform noteCubeGrandChild in noteCubeChild)
                            {
                                if (noteCubeGrandChild.name.StartsWith("Feet"))
                                {
                                    noteCubeGrandChild.rotation = ____middleRotation;
                                }
                            }
                        }
                    }
                }
            }

            if (Config.topNotesToFeet || Config.middleNotesToFeet || Config.bottomNotesToFeet)
            {
                if (____startPos.y == Config.feetNotesY)
                {
                    ____localPosition.y           = Config.feetNotesY;
                    __result                      = ____worldRotation * ____localPosition;
                    __instance.transform.position = __result;
                }
            }
        }
Beispiel #16
0
        private static void Postfix(NoteController __instance, NoteData noteData, NoteMovement ____noteMovement, Vector3 moveStartPos, Vector3 moveEndPos, Vector3 jumpEndPos, float endRotation)
        {
            if (__instance is MultiplayerConnectedPlayerNoteController)
            {
                return;
            }

            NoodleNoteData noodleData = (NoodleNoteData)NoodleObjectDatas[noteData];

            Quaternion?cutQuaternion = noodleData.CutQuaternion;

            NoteJump          noteJump      = _noteJumpAccessor(ref ____noteMovement);
            NoteFloorMovement floorMovement = _noteFloorMovementAccessor(ref ____noteMovement);

            if (cutQuaternion.HasValue)
            {
                Quaternion quatVal = cutQuaternion.Value;
                _endRotationAccessor(ref noteJump) = quatVal;
                Vector3 vector = quatVal.eulerAngles;
                vector += _randomRotationsAccessor(ref noteJump)[_randomRotationIdxAccessor(ref noteJump)] * 20;
                Quaternion midrotation = Quaternion.Euler(vector);
                _middleRotationAccessor(ref noteJump) = midrotation;
            }

            Quaternion?worldRotationQuaternion = noodleData.WorldRotationQuaternion;
            Quaternion?localRotationQuaternion = noodleData.LocalRotationQuaternion;

            Transform transform = __instance.transform;

            Quaternion localRotation = _quaternionIdentity;

            if (worldRotationQuaternion.HasValue || localRotationQuaternion.HasValue)
            {
                if (localRotationQuaternion.HasValue)
                {
                    localRotation = localRotationQuaternion.Value;
                }

                if (worldRotationQuaternion.HasValue)
                {
                    Quaternion quatVal = worldRotationQuaternion.Value;
                    Quaternion inverseWorldRotation = Quaternion.Inverse(quatVal);
                    _worldRotationJumpAccessor(ref noteJump)              = quatVal;
                    _inverseWorldRotationJumpAccessor(ref noteJump)       = inverseWorldRotation;
                    _worldRotationFloorAccessor(ref floorMovement)        = quatVal;
                    _inverseWorldRotationFloorAccessor(ref floorMovement) = inverseWorldRotation;

                    quatVal *= localRotation;

                    transform.localRotation = quatVal;
                }
                else
                {
                    transform.localRotation *= localRotation;
                }
            }

            if (transform.localScale != Vector3.one)
            {
                transform.localScale = Vector3.one; // This is a fix for animation due to notes being recycled
            }

            Track track = noodleData.Track;

            if (track != null && ParentObject.Controller != null)
            {
                ParentObject parentObject = ParentObject.Controller.GetParentObjectTrack(track);
                if (parentObject != null)
                {
                    parentObject.ParentToObject(transform);
                }
                else
                {
                    ParentObject.ResetTransformParent(transform);
                }
            }
            else
            {
                ParentObject.ResetTransformParent(transform);
            }

            noodleData.EndRotation   = endRotation;
            noodleData.MoveStartPos  = moveStartPos;
            noodleData.MoveEndPos    = moveEndPos;
            noodleData.JumpEndPos    = jumpEndPos;
            noodleData.WorldRotation = __instance.worldRotation;
            noodleData.LocalRotation = localRotation;
        }
Beispiel #17
0
        private static void Prefix(NoteController __instance, NoteData ____noteData, NoteMovement ____noteMovement)
        {
            if (__instance is MultiplayerConnectedPlayerNoteController)
            {
                NoodleData = null;
                return;
            }

            NoodleData = NoodleObjectDatas[____noteData];
            NoodleNoteData noodleData = (NoodleNoteData)NoodleData;

            Track track = noodleData.Track;

            NoodleObjectData.AnimationObjectData animationObject = noodleData.AnimationObject;
            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 = noodleData.MoveStartPos;
                    Vector3 moveEndPos   = noodleData.MoveEndPos;
                    Vector3 jumpEndPos   = noodleData.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 = noodleData.WorldRotation;
                    Quaternion localRotation = noodleData.LocalRotation;

                    Quaternion worldRotationQuatnerion = worldRotation;
                    if (rotationOffset.HasValue)
                    {
                        worldRotationQuatnerion *= rotationOffset.Value;
                        Quaternion inverseWorldRotation = Quaternion.Inverse(worldRotationQuatnerion);
                        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 = noodleData.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
                        noodleData.CutoutEffect = cutoutEffect;
                    }

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

                if (dissolveArrow.HasValue && __instance.noteData.colorType != ColorType.None)
                {
                    MonoBehaviour disappearingArrowController = noodleData.DisappearingArrowController;
                    if (disappearingArrowController == null)
                    {
                        disappearingArrowController = __instance.gameObject.GetComponent <DisappearingArrowControllerBase <GameNoteController> >();
                        if (disappearingArrowController == null)
                        {
                            disappearingArrowController = __instance.gameObject.GetComponent <DisappearingArrowControllerBase <MultiplayerConnectedPlayerGameNoteController> >();
                        }

                        noodleData.DisappearingArrowController = disappearingArrowController;
                        noodleData.DisappearingArrowMethod     = GetSetArrowTransparency(disappearingArrowController.GetType());
                    }

                    // gross nasty reflection
                    noodleData.DisappearingArrowMethod.Invoke(disappearingArrowController, new object[] { dissolveArrow.Value });
                }

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

                    switch (__instance)
                    {
                    case GameNoteController gameNoteController:
                        BoxCuttableBySaber[] bigCuttableBySaberList = _gameNoteBigCuttableAccessor(ref gameNoteController);
                        foreach (BoxCuttableBySaber bigCuttableBySaber in bigCuttableBySaberList)
                        {
                            if (bigCuttableBySaber.canBeCut != enabled)
                            {
                                bigCuttableBySaber.canBeCut = enabled;
                            }
                        }

                        BoxCuttableBySaber[] smallCuttableBySaberList = _gameNoteSmallCuttableAccessor(ref gameNoteController);
                        foreach (BoxCuttableBySaber smallCuttableBySaber in smallCuttableBySaberList)
                        {
                            if (smallCuttableBySaber.canBeCut != enabled)
                            {
                                smallCuttableBySaber.canBeCut = enabled;
                            }
                        }

                        break;

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

                        break;
                    }
                }
            }
        }
Beispiel #18
0
        private static void Postfix(NoteController __instance, NoteData noteData, NoteMovement ____noteMovement, Vector3 moveStartPos, Vector3 moveEndPos, Vector3 jumpEndPos, float endRotation)
        {
            NoodleNoteData?noodleData = TryGetObjectData <NoodleNoteData>(noteData);

            if (noodleData == null)
            {
                return;
            }

            Quaternion?cutQuaternion = noodleData.CutQuaternion;

            NoteJump          noteJump      = _noteJumpAccessor(ref ____noteMovement);
            NoteFloorMovement floorMovement = _noteFloorMovementAccessor(ref ____noteMovement);

            if (cutQuaternion.HasValue)
            {
                Quaternion quatVal = cutQuaternion.Value;
                _endRotationAccessor(ref noteJump) = quatVal;
                Vector3 vector = quatVal.eulerAngles;
                vector += _randomRotationsAccessor(ref noteJump)[_randomRotationIdxAccessor(ref noteJump)] * 20;
                Quaternion midrotation = Quaternion.Euler(vector);
                _middleRotationAccessor(ref noteJump) = midrotation;
            }

            Quaternion?worldRotationQuaternion = noodleData.WorldRotationQuaternion;
            Quaternion?localRotationQuaternion = noodleData.LocalRotationQuaternion;

            Transform transform = __instance.transform;

            Quaternion localRotation = Quaternion.identity;

            if (worldRotationQuaternion.HasValue || localRotationQuaternion.HasValue)
            {
                if (localRotationQuaternion.HasValue)
                {
                    localRotation = localRotationQuaternion.Value;
                }

                if (worldRotationQuaternion.HasValue)
                {
                    Quaternion quatVal = worldRotationQuaternion.Value;
                    Quaternion inverseWorldRotation = Quaternion.Inverse(quatVal);
                    _worldRotationJumpAccessor(ref noteJump)              = quatVal;
                    _inverseWorldRotationJumpAccessor(ref noteJump)       = inverseWorldRotation;
                    _worldRotationFloorAccessor(ref floorMovement)        = quatVal;
                    _inverseWorldRotationFloorAccessor(ref floorMovement) = inverseWorldRotation;

                    quatVal *= localRotation;

                    transform.localRotation = quatVal;
                }
                else
                {
                    transform.localRotation *= localRotation;
                }
            }

            if (transform.localScale != Vector3.one)
            {
                transform.localScale = Vector3.one; // This is a fix for animation due to notes being recycled
            }

            IEnumerable <Track>?tracks = noodleData.Track;

            if (tracks != null)
            {
                foreach (Track track in tracks)
                {
                    // add to gameobjects
                    track.AddGameObject(__instance.gameObject);
                }
            }

            // how f*****g long has _zOffset existed???!??
            float zOffset = _zOffsetAccessor(ref ____noteMovement);

            moveStartPos.z += zOffset;
            moveEndPos.z   += zOffset;
            jumpEndPos.z   += zOffset;

            noodleData.EndRotation   = endRotation;
            noodleData.MoveStartPos  = moveStartPos;
            noodleData.MoveEndPos    = moveEndPos;
            noodleData.JumpEndPos    = jumpEndPos;
            noodleData.WorldRotation = __instance.worldRotation;
            noodleData.LocalRotation = localRotation;
        }
Beispiel #19
0
        private static void Prefix(NoteController __instance, NoteData ____noteData, NoteMovement ____noteMovement)
        {
            NoodleData = TryGetObjectData <NoodleObjectData>(____noteData);
            if (NoodleData == null)
            {
                return;
            }

            NoodleNoteData noodleData = (NoodleNoteData)NoodleData;

            IEnumerable <Track>?tracks = noodleData.Track;

            NoodleObjectData.AnimationObjectData?animationObject = noodleData.AnimationObject;
            if (tracks != 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;

                Animation.AnimationHelper.GetObjectOffset(animationObject, tracks, 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 = noodleData.MoveStartPos;
                    Vector3 moveEndPos   = noodleData.MoveEndPos;
                    Vector3 jumpEndPos   = noodleData.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 = noodleData.WorldRotation;
                    Quaternion localRotation = noodleData.LocalRotation;

                    Quaternion worldRotationQuatnerion = worldRotation;
                    if (rotationOffset.HasValue)
                    {
                        worldRotationQuatnerion *= rotationOffset.Value;
                        Quaternion inverseWorldRotation = Quaternion.Inverse(worldRotationQuatnerion);
                        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)
                {
                    if (CutoutManager.NoteCutoutEffects.TryGetValue(__instance, out CutoutEffectWrapper cutoutEffect))
                    {
                        cutoutEffect.SetCutout(dissolve.Value);
                    }
                }

                if (dissolveArrow.HasValue && __instance.noteData.colorType != ColorType.None)
                {
                    if (CutoutManager.NoteDisappearingArrowWrappers.TryGetValue(__instance, out DisappearingArrowWrapper disappearingArrowWrapper))
                    {
                        disappearingArrowWrapper.SetCutout(dissolveArrow.Value);
                    }
                }

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

                    switch (__instance)
                    {
                    case GameNoteController gameNoteController:
                        BoxCuttableBySaber[] bigCuttableBySaberList = _gameNoteBigCuttableAccessor(ref gameNoteController);
                        foreach (BoxCuttableBySaber bigCuttableBySaber in bigCuttableBySaberList)
                        {
                            if (bigCuttableBySaber.canBeCut != enabled)
                            {
                                bigCuttableBySaber.canBeCut = enabled;
                            }
                        }

                        BoxCuttableBySaber[] smallCuttableBySaberList = _gameNoteSmallCuttableAccessor(ref gameNoteController);
                        foreach (BoxCuttableBySaber smallCuttableBySaber in smallCuttableBySaberList)
                        {
                            if (smallCuttableBySaber.canBeCut != enabled)
                            {
                                smallCuttableBySaber.canBeCut = enabled;
                            }
                        }

                        break;

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

                        break;
                    }
                }
            }
        }
#pragma warning disable SA1313 // Parameter names should begin with lower-case letter
        private static void Postfix(NoteController __instance, NoteData noteData, NoteMovement ____noteMovement, Vector3 moveStartPos, Vector3 moveEndPos, Vector3 jumpEndPos)
#pragma warning restore SA1313 // Parameter names should begin with lower-case letter
        {
            if (noteData is CustomNoteData customData)
            {
                dynamic dynData = customData.customData;

                float?cutDir = (float?)Trees.at(dynData, CUTDIRECTION);

                NoteJump          noteJump      = _noteJumpAccessor(ref ____noteMovement);
                NoteFloorMovement floorMovement = _noteFloorMovementAccessor(ref ____noteMovement);

                if (cutDir.HasValue)
                {
                    Quaternion cutQuaternion = Quaternion.Euler(0, 0, cutDir.Value);
                    _endRotationAccessor(ref noteJump) = cutQuaternion;
                    Vector3 vector = cutQuaternion.eulerAngles;
                    vector += _randomRotationsAccessor(ref noteJump)[_randomRotationIdxAccessor(ref noteJump)] * 20;
                    Quaternion midrotation = Quaternion.Euler(vector);
                    _middleRotationAccessor(ref noteJump) = midrotation;
                }

                dynamic             rotation = Trees.at(dynData, ROTATION);
                IEnumerable <float> localrot = ((List <object>)Trees.at(dynData, LOCALROTATION))?.Select(n => Convert.ToSingle(n));

                Transform transform = __instance.transform;

                Quaternion localRotation = _quaternionIdentity;
                if (rotation != null || localRotation != null)
                {
                    if (localrot != null)
                    {
                        localRotation = Quaternion.Euler(localrot.ElementAt(0), localrot.ElementAt(1), localrot.ElementAt(2));
                    }

                    Quaternion worldRotationQuatnerion;
                    if (rotation != null)
                    {
                        if (rotation is List <object> list)
                        {
                            IEnumerable <float> rot = list?.Select(n => Convert.ToSingle(n));
                            worldRotationQuatnerion = Quaternion.Euler(rot.ElementAt(0), rot.ElementAt(1), rot.ElementAt(2));
                        }
                        else
                        {
                            worldRotationQuatnerion = Quaternion.Euler(0, (float)rotation, 0);
                        }

                        Quaternion inverseWorldRotation = Quaternion.Euler(-worldRotationQuatnerion.eulerAngles);
                        _worldRotationJumpAccessor(ref noteJump)              = worldRotationQuatnerion;
                        _inverseWorldRotationJumpAccessor(ref noteJump)       = inverseWorldRotation;
                        _worldRotationFloorAccessor(ref floorMovement)        = worldRotationQuatnerion;
                        _inverseWorldRotationFloorAccessor(ref floorMovement) = inverseWorldRotation;

                        worldRotationQuatnerion *= localRotation;

                        transform.localRotation = worldRotationQuatnerion;
                    }
                    else
                    {
                        transform.localRotation *= localRotation;
                    }
                }

                transform.localScale = Vector3.one; // This is a fix for animation due to notes being recycled

                Track track = AnimationHelper.GetTrack(dynData);
                if (track != null && ParentObject.Controller != null)
                {
                    ParentObject parentObject = ParentObject.Controller.GetParentObjectTrack(track);
                    if (parentObject != null)
                    {
                        parentObject.ParentToObject(transform);
                    }
                    else
                    {
                        ParentObject.ResetTransformParent(transform);
                    }
                }
                else
                {
                    ParentObject.ResetTransformParent(transform);
                }

                dynData.moveStartPos  = moveStartPos;
                dynData.moveEndPos    = moveEndPos;
                dynData.jumpEndPos    = jumpEndPos;
                dynData.worldRotation = __instance.worldRotation;
                dynData.localRotation = localRotation;
            }

            if (__instance is GameNoteController)
            {
                _gameNoteControllerUpdate.Invoke(__instance, null);
            }
            else
            {
                _noteControllerUpdate.Invoke(__instance, null);
            }
        }
Beispiel #21
0
    public GameObject GetPooledRedNote(bool isAny = false)
    {
        if (!isAny)
        {
            for (int i = 0; i < PooledRedNotes.Count; i++)
            {
                if (!PooledRedNotes[i].activeInHierarchy)
                {
                    Component[] objs = PooledRedNotes[i].GetComponents(typeof(Component));
                    foreach (Component comp in objs)
                    {
                        if (comp.GetType() == typeof(NoteJump))
                        {
                            NoteJump test = comp as NoteJump;
                            Destroy(test);
                        }
                    }

                    Transform[] ts = PooledRedNotes[i].transform.GetComponentsInChildren <Transform>(true);
                    foreach (Transform t in ts)
                    {
                        if (t.gameObject.name == "Box")
                        {
                            t.gameObject.transform.localRotation = Quaternion.identity;
                        }
                    }
                    PooledRedNotes[i].transform.localRotation = Quaternion.identity;

                    return(PooledRedNotes[i]);
                }
            }

            GameObject newRed = Instantiate(redPrefab, mainManager.gameManager.NotesParent.transform);
            newRed.SetActive(false);
            PooledRedNotes.Add(newRed);
            return(newRed);
        }
        else
        {
            for (int i = 0; i < PooledAnyRedNotes.Count; i++)
            {
                if (!PooledAnyRedNotes[i].activeInHierarchy)
                {
                    Component[] objs = PooledAnyRedNotes[i].GetComponents(typeof(Component));
                    foreach (Component comp in objs)
                    {
                        if (comp.GetType() == typeof(NoteJump))
                        {
                            NoteJump test = comp as NoteJump;
                            Destroy(test);
                        }
                    }

                    Transform[] ts = PooledAnyRedNotes[i].transform.GetComponentsInChildren <Transform>(true);
                    foreach (Transform t in ts)
                    {
                        if (t.gameObject.name == "Box")
                        {
                            t.gameObject.transform.localRotation = Quaternion.identity;
                        }
                    }
                    PooledAnyRedNotes[i].transform.localRotation = Quaternion.identity;

                    return(PooledAnyRedNotes[i]);
                }
            }

            GameObject newRed = Instantiate(redAnyPrefab, mainManager.gameManager.NotesParent.transform);
            newRed.SetActive(false);
            PooledAnyRedNotes.Add(newRed);
            return(newRed);
        }
    }