Exemplo n.º 1
0
 public void Initialize(Game game)
 {
     if (IsInitialized)
     {
         return;
     }
     IsInitialized = true;
     Game          = game;
     Renderer      = CreateRenderer();
 }
Exemplo n.º 2
0
    public void UpdateObjects(double smoothTick, NoteRenderer noteRenderer, int frameIndex)
    {
        Vector3 boardPosition = board.localPosition;

        boardPosition.z = (float)((TickDistanceToMeters(smoothTick) % 2) * -1f + 4);
        if (!float.IsNaN(boardPosition.z))
        {
            board.localPosition = boardPosition;
        }
        for (int i = 0; i < activeNotes.Count; ++i)
        {
            NoteInstance noteInstance  = activeNotes[i];
            Transform    noteTransform = noteInstance.noteModel.transform;
            Vector3      pos           = noteTransform.localPosition;

            double tickDistance     = noteInstance.timestamp - smoothTick;
            double distanceInMeters = TickDistanceToMeters(tickDistance);
            pos.z = (float)distanceInMeters;
            noteTransform.localPosition = pos;
            double noteDistance         = tickDistance;
            double noteDistanceInMeters = TickDistanceToMeters(noteDistance);
            double endOfNoteDistance    = tickDistance + noteInstance.duration;
            double endOfNoteInMeters    = TickDistanceToMeters(endOfNoteDistance);
            if (noteInstance.duration > 0)
            {
                //update long note length
                float length = (float)(endOfNoteInMeters - distanceInMeters);
                noteInstance.noteModel.SetLengt(length);
            }

            //show correct sprite
            SpriteRenderer spriteRenderer = noteInstance.noteModel.spriteRenderer;
            NoteRenderer.FredSpriteData fredSpriteData = noteRenderer.spriteData.fred[noteInstance.fred];
            if (noteInstance.star)
            {
                spriteRenderer.sprite = (noteInstance.hammeron) ? fredSpriteData.starHammerOn[frameIndex % 16] : fredSpriteData.star[frameIndex % 16];
            }
            else
            {
                spriteRenderer.sprite = (noteInstance.hammeron) ? fredSpriteData.hammerOn : fredSpriteData.normal;
            }
            if (endOfNoteInMeters < -1)             //out of view
            {
                willRemove.Add(noteInstance);
            }
        }
    }
Exemplo n.º 3
0
    public void PlayClearEffect(NoteRenderer noteRenderer, NoteGrade grade, float timeUntilEnd, bool earlyLateIndicator)
    {
        if (game.State.Mode == GameMode.GlobalCalibration)
        {
            return;
        }

        var color = game.Config.NoteGradeEffectColors[grade];
        var at    = noteRenderer.Note.transform.position;

        if (noteRenderer.Note.Type == NoteType.Hold || noteRenderer.Note.Type == NoteType.LongHold)
        {
            if (noteRenderer.Note.Model.style == 1)
            {
                at = new Vector3(at.x, Scanner.Instance.transform.position.y, at.z);
            }
        }

        var speed = 1f;

        switch (grade)
        {
        case NoteGrade.Great:
            speed = 0.9f;
            break;

        case NoteGrade.Good:
            speed = 0.7f;
            break;

        case NoteGrade.Bad:
            speed = 0.5f;
            break;

        case NoteGrade.Miss:
            speed = 0.3f;
            break;
        }

        var isDragType = noteRenderer.Note.Type == NoteType.DragHead || noteRenderer.Note.Type == NoteType.DragChild ||
                         noteRenderer.Note.Type == NoteType.CDragChild;

        var settings = flatFx.settings[1];

        settings.lifetime         = 0.4f / speed;
        settings.sectorCount      = noteRenderer.Note.Type == NoteType.Flick ? 4 : 24;
        settings.start.innerColor = settings.start.outerColor = color.WithAlpha(1);
        settings.end.innerColor   = settings.end.outerColor = color.WithAlpha(0);
        settings.end.size         = (isDragType ? 4f : 5f) * noteRenderer.Game.Config.GlobalNoteSizeMultiplier * (1 + clearEffectSizeMultiplier);
        settings.start.thickness  = 1.333f;
        settings.end.thickness    = 0.333f;
        flatFx.AddEffect(at, 1);

        if (grade == NoteGrade.Miss)
        {
            var fx = game.ObjectPool.SpawnEffect(Effect.Miss, at);
            fx.Stop();

            var mainModule = fx.main;
            mainModule.simulationSpeed = 0.3f;
            mainModule.duration       /= 0.3f;
            mainModule.startColor      = game.Config.NoteGradeEffectColors[grade];

            if (isDragType)
            {
                fx.transform.localScale = new Vector3(2, 2, 2);
            }

            fx.Play();
            AwaitAndCollect(Effect.Miss, fx);
        }
        else
        {
            var clearEffect = isDragType ? Effect.ClearDrag : Effect.Clear;

            var fx = game.ObjectPool.SpawnEffect(clearEffect, at);
            fx.Stop();

            if (!isDragType)
            {
                var t     = fx.transform.GetChild(0);
                var early = t.GetChild(0);
                var late  = t.GetChild(1);
                if (earlyLateIndicator)
                {
                    if (grade != NoteGrade.Perfect)
                    {
                        t.gameObject.SetActive(true);
                        if (timeUntilEnd > 0)
                        {
                            early.gameObject.SetActive(true);
                            late.gameObject.SetActive(false);
                        }
                        else
                        {
                            early.gameObject.SetActive(false);
                            late.gameObject.SetActive(true);
                        }
                    }
                    else
                    {
                        t.gameObject.SetActive(false);
                    }
                }
                else
                {
                    t.gameObject.SetActive(false);
                }
            }

            var mainModule = fx.main;
            mainModule.simulationSpeed = speed;
            mainModule.duration       /= speed;
            mainModule.startColor      = color.WithAlpha(1);

            if (isDragType)
            {
                fx.transform.localScale = new Vector3(3f, 3f, 3f);
            }

            fx.Play();
            AwaitAndCollect(clearEffect, fx);
        }
    }
Exemplo n.º 4
0
 public void PlayClearEffect(NoteRenderer noteRenderer, NoteGrade grade, float timeUntilEnd)
 {
     PlayClearEffect(noteRenderer, grade, timeUntilEnd, Context.Player.Settings.DisplayEarlyLateIndicators);
 }