public void Initialize(Game game) { if (IsInitialized) { return; } IsInitialized = true; Game = game; Renderer = CreateRenderer(); }
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); } } }
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); } }
public void PlayClearEffect(NoteRenderer noteRenderer, NoteGrade grade, float timeUntilEnd) { PlayClearEffect(noteRenderer, grade, timeUntilEnd, Context.Player.Settings.DisplayEarlyLateIndicators); }