예제 #1
0
 public void Init(TargetData targetData)
 {
     data = targetData;
     data.HandTypeChangeEvent   += OnHandTypeChanged;
     data.BehaviourChangeEvent  += OnBehaviorChanged;
     data.BeatLengthChangeEvent += OnSustainLengthChanged;
 }
예제 #2
0
        private void OnBehaviorChanged(TargetBehavior oldBehavior, TargetBehavior newBehavior)
        {
            if (data.supportsBeatLength)
            {
                if (!TargetData.BehaviorSupportsBeatLength(oldBehavior))
                {
                    var gridHoldTargetManager = gridTargetIcon.GetComponentInChildren <HoldTargetManager>();

                    if (gridHoldTargetManager != null)
                    {
                        gridHoldTargetManager.sustainLength = data.beatLength;
                        gridHoldTargetManager.LoadSustainController();

                        gridHoldTargetManager.OnTryChangeSustainEvent += MakeTimelineUpdateSustainLength;
                    }
                }

                gridTargetIcon.UpdatePath();
            }
            else
            {
                DisableSustainButtons();

                if (TargetData.BehaviorSupportsBeatLength(oldBehavior))
                {
                    var gridHoldTargetManager = gridTargetIcon.GetComponentInChildren <HoldTargetManager>(true);
                    if (gridHoldTargetManager != null)
                    {
                        gridHoldTargetManager.UnloadSustainController();
                        gridHoldTargetManager.OnTryChangeSustainEvent -= MakeTimelineUpdateSustainLength;
                    }
                }
            }

            if (data.behavior == TargetBehavior.NR_Pathbuilder)
            {
                data.pathBuilderData.InitialAngleChangedEvent += UpdatePathInitialAngle;
                data.pathBuilderData.RecalculateEvent         += RecalculatePathbuilderData;
                data.pathBuilderData.RecalculateFinishedEvent += UpdatePath;
            }

            if (oldBehavior == TargetBehavior.NR_Pathbuilder)
            {
                data.pathBuilderData.InitialAngleChangedEvent -= UpdatePathInitialAngle;
                data.pathBuilderData.RecalculateEvent         -= RecalculatePathbuilderData;
                data.pathBuilderData.RecalculateFinishedEvent -= UpdatePath;
            }

            if (data.behavior != TargetBehavior.NR_Pathbuilder && oldBehavior == TargetBehavior.NR_Pathbuilder)
            {
                data.pathBuilderData.parentNotes.Remove(data);
            }
            else if (data.behavior == TargetBehavior.NR_Pathbuilder)
            {
                data.pathBuilderData.parentNotes.Add(data);
            }
        }
예제 #3
0
 public void Copy(TargetData data)
 {
     x          = data.x;
     y          = data.y;
     time       = data.time;
     beatLength = data.beatLength;
     velocity   = data.velocity;
     handType   = data.handType;
     behavior   = data.behavior;
 }
예제 #4
0
        public void ReplaceData(TargetData newData)
        {
            data.HandTypeChangeEvent   -= OnHandTypeChanged;
            data.BehaviourChangeEvent  -= OnBehaviorChanged;
            data.BeatLengthChangeEvent -= OnSustainLengthChanged;

            data = newData;

            newData.HandTypeChangeEvent   += OnHandTypeChanged;
            newData.BehaviourChangeEvent  += OnBehaviorChanged;
            newData.BeatLengthChangeEvent += OnSustainLengthChanged;
        }
예제 #5
0
        public TargetData(TargetData other, QNT_Timestamp?timeOverride = null)
        {
            ID   = TargetDataInternal.GetNextId();
            data = other.data;

            if (!timeOverride.HasValue)
            {
                time = other.time;
            }
            else
            {
                time = timeOverride.Value;
            }
        }
예제 #6
0
        public void ReplaceData(TargetData newData)
        {
            data.PositionChangeEvent   -= OnGridPositionChanged;
            data.HandTypeChangeEvent   -= OnHandTypeChanged;
            data.TickChangeEvent       -= OnTickChanged;
            data.BeatLengthChangeEvent -= OnBeatLengthChanged;

            data = newData;
            gridTargetIcon.ReplaceData(newData);
            timelineTargetIcon.ReplaceData(newData);

            newData.PositionChangeEvent   += OnGridPositionChanged;
            newData.HandTypeChangeEvent   += OnHandTypeChanged;
            newData.TickChangeEvent       += OnTickChanged;
            newData.BeatLengthChangeEvent += OnBeatLengthChanged;
        }
예제 #7
0
        public Target(TargetData targetData, TargetIcon timelineIcon, TargetIcon gridIcon)
        {
            timelineTargetIcon = timelineIcon;
            gridTargetIcon     = gridIcon;

            data = new TargetData();
            data.PositionChangeEvent   += OnGridPositionChanged;
            data.HandTypeChangeEvent   += OnHandTypeChanged;
            data.BeatTimeChangeEvent   += OnBeatTimeChanged;
            data.BeatLengthChangeEvent += OnBeatLengthChanged;

            timelineTargetIcon.Init(data);
            gridTargetIcon.Init(data);

            data.Copy(targetData);
            UpdateTimelineSustainLength();
        }
예제 #8
0
        public void Init(Target target, TargetData targetData)
        {
            data = targetData;
            data.HandTypeChangeEvent   += OnHandTypeChanged;
            data.BehaviourChangeEvent  += OnBehaviorChanged;
            data.BeatLengthChangeEvent += OnSustainLengthChanged;
            data.TickChangeEvent       += OnTickChanged;

            this.target = target;

            foreach (Renderer r in gameObject.GetComponentsInChildren <Renderer>(true))
            {
                r.material.SetFloat("_FadeThreshold", 1.7f);
                r.material.SetFloat("_OpaqueDuration", 0f);
                r.material.SetFloat("_FadeOutThreshold", 0.5f);
            }

            SetupFade();
        }
예제 #9
0
    public void UpdateOverlay()
    {
        if (canvasGroup.alpha == 0f)
        {
            return;
        }
        rectTransform.pivot    = new Vector2(0f, 1f);
        rectTransform.rotation = Quaternion.Euler(Vector3.zero);
        float minX = 999f, minY = 999f, maxX = -999f, maxY = -999f;
        float totalX = 0f, totalY = 0f;

        foreach (var selectedTarget in timeline.selectedNotes)
        {
            NotReaper.Targets.TargetData current = selectedTarget.data;
            if (current.x > maxX)
            {
                maxX = current.x;
            }
            if (current.y > maxY)
            {
                maxY = current.y;
            }
            if (current.x < minX)
            {
                minX = current.x;
            }
            if (current.y < minY)
            {
                minY = current.y;
            }
            totalX += current.x;
            totalY += current.y;
        }
        float centerX = totalX / timeline.selectedNotes.Count;
        float centerY = totalY / timeline.selectedNotes.Count;

        countLabel.text           = lastSelectedTargetCount.ToString();
        transform.position        = new Vector3(minX, maxY);
        rectTransform.sizeDelta   = new Vector2(Mathf.Abs(maxX - minX), Mathf.Abs(maxY - minY)) * (1 / canvas.transform.localScale.x);
        centerPoint.localPosition = new Vector2((float)(rectTransform.sizeDelta.x * 0.5), (float)-(rectTransform.sizeDelta.y * 0.5));
        selectionMesh.GenerateMeshForTimeline();
    }
예제 #10
0
 public TargetSetHitsoundIntent(TargetSetHitsoundIntent other)
 {
     target           = new TargetData(other.target);
     startingVelocity = other.startingVelocity;
     newVelocity      = other.newVelocity;
 }
예제 #11
0
        public Target(TargetData targetData, TargetIcon timelineIcon, TargetIcon gridIcon, bool transient)
        {
            timelineTargetIcon = timelineIcon;
            gridTargetIcon     = gridIcon;

            data = targetData;
            data.PositionChangeEvent   += OnGridPositionChanged;
            data.HandTypeChangeEvent   += OnHandTypeChanged;
            data.TickChangeEvent       += OnTickChanged;
            data.BeatLengthChangeEvent += OnBeatLengthChanged;

            timelineTargetIcon.Init(this, data);
            gridTargetIcon.Init(this, data);

            //Must be after the two init's, unfortunate timing restiction, but the new objects must be active to find the hold target managers
            data.BehaviourChangeEvent += OnBehaviorChanged;

            UpdateTimelineSustainLength();

            gridTargetIcon.OnTryRemoveEvent     += DeleteNote;
            timelineTargetIcon.OnTryRemoveEvent += DeleteNote;

            gridTargetIcon.IconEnterLoadedNotesEvent += TargetEnterLoadedNotes;
            gridTargetIcon.IconExitLoadedNotesEvent  += TargetExitLoadedNotes;

            timelineTargetIcon.TrySelectEvent += MakeTimelineSelectTarget;
            gridTargetIcon.TrySelectEvent     += MakeTimelineSelectTarget;

            timelineTargetIcon.TryDeselectEvent += MakeTimelineDeselectTarget;
            gridTargetIcon.TryDeselectEvent     += MakeTimelineDeselectTarget;

            SetOutlineColor(NRSettings.config.selectedHighlightColor);

            this.transient = transient;
            if (transient)
            {
                foreach (Renderer r in gridTargetIcon.GetComponentsInChildren <Renderer>(true))
                {
                    if (r.name == "WhiteRing")
                    {
                        var color = r.material.GetColor("_Tint");
                        color.r = 0.1f;
                        color.g = 0.1f;
                        color.b = 0.1f;
                        r.material.SetColor("_Tint", color);
                    }
                }
                foreach (Renderer r in timelineTargetIcon.GetComponentsInChildren <SpriteRenderer>(true))
                {
                    var color = r.material.color;
                    color.r          = 0.5f;
                    color.g          = 0.5f;
                    color.b          = 0.5f;
                    r.material.color = color;
                }
            }

            if (data.behavior == TargetBehavior.NR_Pathbuilder)
            {
                data.pathBuilderData.InitialAngleChangedEvent += UpdatePathInitialAngle;
                data.pathBuilderData.RecalculateEvent         += RecalculatePathbuilderData;
                data.pathBuilderData.RecalculateFinishedEvent += UpdatePath;

                UpdatePathInitialAngle();
            }
        }
예제 #12
0
        public TargetData(TargetData data)
        {
            ID = GetNextId();

            Copy(data);
        }
예제 #13
0
 public TargetData(TargetData data)
 {
     Copy(data);
 }
예제 #14
0
 public TargetGridMoveIntent(TargetGridMoveIntent other)
 {
     target           = new TargetData(other.target);
     startingPosition = other.startingPosition;
     intendedPosition = other.intendedPosition;
 }
예제 #15
0
 public TargetTimelineMoveIntent(TargetTimelineMoveIntent other)
 {
     target       = new TargetData(other.target);
     startTime    = other.startTime;
     intendedTime = other.intendedTime;
 }