protected override void OnLoadContents() { base.OnLoadContents(); var game = Game.ToBaseGame(); _basicEffect = new BasicEffect(game.GraphicsDevice); game.EffectManager.RegisterSingleton(_basicEffect); // Hack: register note effect list NoteEffects.Effects[(int)NoteType.Floor] = _basicEffect; NoteEffects.Effects[(int)NoteType.Long] = _basicEffect; NoteEffects.Effects[(int)NoteType.Arc] = _basicEffect; NoteEffects.Effects[(int)NoteType.Sky] = _basicEffect; var beatmap = Game.FindSingleElement <BeatmapLoader>()?.Beatmap; if (beatmap != null) { _beatmap = new VisualBeatmap(game.GraphicsDevice, beatmap, _stageMetrics); } var config = ConfigurationStore.Get <TrackDisplayConfig>(); _panelTexture = ContentHelper.LoadTexture(game.GraphicsDevice, config.Data.PanelTexture); _trackLaneDividerTexture = ContentHelper.LoadTexture(game.GraphicsDevice, config.Data.TrackLaneDividerTexture); _skyInputTexture = ContentHelper.LoadTexture(game.GraphicsDevice, config.Data.SkyInputTexture); _noteTexture = ContentHelper.LoadTexture(game.GraphicsDevice, config.Data.NoteTexture); _noteHoldTexture = ContentHelper.LoadTexture(game.GraphicsDevice, config.Data.NoteHoldTexture); _noteHoldHighlightedTexture = ContentHelper.LoadTexture(game.GraphicsDevice, config.Data.NoteHoldHighlightedTexture); _noteSkyTexture = ContentHelper.LoadTexture(game.GraphicsDevice, config.Data.NoteSkyTexture); var metrics = _stageMetrics; { _trackRectangle = new TexturedRectangle(game.GraphicsDevice); _trackRectangle.SetVerticesXY(new Vector2(-metrics.HalfTrackFullWidth, -metrics.TrackLength * 0.1f), new Vector2(metrics.TrackFullWidth, metrics.TrackLength * 1.1f), new Color(Color.White, 0.9f), 0, 0); } { _finishLineRectangle = new TexturedRectangle(game.GraphicsDevice); _finishLineRectangle.SetVerticesXY(new Vector2(-metrics.HalfTrackInnerWidth, metrics.FinishLineY - metrics.FinishLineHeight / 2), new Vector2(metrics.TrackInnerWidth, metrics.FinishLineHeight), new Color(Color.MediumPurple, 0.9f), 0.02f); } { _laneDividerRectangles = new TexturedRectangle[3]; for (var i = 1; i < 4; ++i) { _laneDividerRectangles[i - 1] = new TexturedRectangle(game.GraphicsDevice); var left = i * metrics.TrackInnerWidth / 4 - metrics.LaneDividerWidth / 2 - metrics.HalfTrackInnerWidth; var origin = new Vector2(left, 0); var size = new Vector2(metrics.LaneDividerWidth, metrics.TrackLength); _laneDividerRectangles[i - 1].SetVerticesXY(origin, size, new Color(Color.Lavender, 0.9f), 0.01f); } } { _skyInputRectangle = new TexturedRectangle(game.GraphicsDevice); _skyInputRectangle.SetVerticesXZ(new Vector2(-metrics.SkyInputWidth / 2, metrics.SkyInputZ - metrics.SkyInputTallness / 2), new Vector2(metrics.SkyInputWidth, metrics.SkyInputTallness), Color.White, metrics.FinishLineY); } }