private void Init(CountersData data) { scoreController = data.ScoreController; Vector3 position = CountersController.DeterminePosition(gameObject, settings.Position, settings.Distance); TextHelper.CreateText(out missedText, position - new Vector3(0, 0.4f, 0)); missedText.text = "0"; missedText.fontSize = 4; missedText.color = Color.white; missedText.alignment = TextAlignmentOptions.Center; GameObject labelGO = new GameObject("Counters+ | Missed Label"); labelGO.transform.parent = transform; TextHelper.CreateText(out label, position); label.text = "Misses"; label.fontSize = 3; label.color = Color.white; label.alignment = TextAlignmentOptions.Center; if (settings.CustomMissTextIntegration) { UpdateCustomMissText(); } if (scoreController != null) { scoreController.noteWasCutEvent += OnNoteCut; scoreController.noteWasMissedEvent += OnNoteMiss; } }
private void Init(CountersData data) { SC = data.ScoreController; SC.noteWasCutEvent += OnNoteCut; SC.noteWasMissedEvent += OnNoteMiss; notesLeft = data.GCSSD.difficultyBeatmap.beatmapData.notesCount; Vector3 position = CountersController.DeterminePosition(gameObject, settings.Position, settings.Distance); TextHelper.CreateText(out counter, position - new Vector3(0, 0.4f, 0)); counter.text = $"Notes Remaining {notesLeft}"; counter.fontSize = 3f; counter.color = Color.white; counter.alignment = TextAlignmentOptions.Center; if (settings.LabelAboveCount) { counter.fontSize = 4; counter.text = notesLeft.ToString(); GameObject labelGO = new GameObject("Counters+ | Notes Left Label"); labelGO.transform.parent = transform; TextHelper.CreateText(out TMP_Text label, position); label.text = "Notes Remaining"; label.fontSize = 3; label.color = Color.white; label.alignment = TextAlignmentOptions.Center; } }
internal override void Init(CountersData data, Vector3 position) { beatmapObjectManager = data.BOM; beatmapObjectManager.noteWasCutEvent += OnNoteCut; beatmapObjectManager.noteWasMissedEvent += OnNoteMiss; notesLeft = data.GCSSD.difficultyBeatmap.beatmapData.notesCount; TextHelper.CreateText(out counter, position - new Vector3(0, 0.4f, 0)); counter.text = $"Notes Remaining {notesLeft}"; counter.fontSize = 3f; counter.color = Color.white; counter.alignment = TextAlignmentOptions.Center; if (settings.LabelAboveCount) { counter.fontSize = 4; counter.text = notesLeft.ToString(); GameObject labelGO = new GameObject("Counters+ | Notes Left Label"); labelGO.transform.parent = transform; TextHelper.CreateText(out TMP_Text label, position); label.text = "Notes Remaining"; label.fontSize = 3; label.color = Color.white; label.alignment = TextAlignmentOptions.Center; } }
private void Init(CountersData data) { _scoreController = data.ScoreController; PlayerDataModelSO player = data.PlayerData; gameplayModsModel = data.ModifiersData; gameplayMods = data.PlayerData.playerData.gameplayModifiers; IDifficultyBeatmap beatmap = data.GCSSD.difficultyBeatmap; stats = player.playerData.GetPlayerLevelStatsData( beatmap.level.levelID, beatmap.difficulty, beatmap.parentDifficultyBeatmapSet.beatmapCharacteristic); int maxRawScore = ScoreController.MaxRawScoreForNumberOfNotes(beatmap.beatmapData.notesCount); _maxPossibleScore = Mathf.RoundToInt(maxRawScore * gameplayModsModel.GetTotalMultiplier(gameplayMods)); beginningPB = stats.highScore / (float)_maxPossibleScore; highScore = stats.highScore; Vector3 position = CountersController.DeterminePosition(gameObject, settings.Position, settings.Distance); TextHelper.CreateText(out _PbTrackerText, position); _PbTrackerText.fontSize = settings.TextSize; _PbTrackerText.color = Color.white; _PbTrackerText.alignment = TextAlignmentOptions.Center; _scoreController.scoreDidChangeEvent += UpdateScore; SetPersonalBest(beginningPB); if (settings.UnderScore) { StartCoroutine(WaitForScoreCounter()); } }
internal override void Init(CountersData data, Vector3 position) { beatmapObjectManager = data.BOM; TextHelper.CreateText(out missedText, position - new Vector3(0, 0.4f, 0)); missedText.text = "0"; missedText.fontSize = 4; missedText.color = Color.white; missedText.alignment = TextAlignmentOptions.Center; GameObject labelGO = new GameObject("Counters+ | Missed Label"); labelGO.transform.parent = transform; TextHelper.CreateText(out label, position); label.text = "Misses"; label.fontSize = 3; label.color = Color.white; label.alignment = TextAlignmentOptions.Center; if (settings.CustomMissTextIntegration && PluginUtility.IsPluginPresent("CustomMissText")) { UpdateCustomMissText(); } else if (!PluginUtility.IsPluginPresent("CustomMissText")) { settings.CustomMissTextIntegration = false; settings.Save(); } if (beatmapObjectManager != null) { beatmapObjectManager.noteWasMissedEvent += OnNoteMiss; beatmapObjectManager.noteWasCutEvent += OnNoteCut; } }
private void Init(CountersData data) { scoreController = data.ScoreController; Vector3 position = CountersController.DeterminePosition(gameObject, settings.Position, settings.Distance); TextHelper.CreateText(out counterText, position - new Vector3(0, 0.4f, 0)); counterText.text = settings.ShowPercentage ? "0 / 0 - (100%)" : "0 / 0"; counterText.fontSize = 4; counterText.color = Color.white; counterText.alignment = TextAlignmentOptions.Center; GameObject labelGO = new GameObject("Counters+ | Notes Label"); labelGO.transform.parent = transform; TextHelper.CreateText(out TMP_Text label, position); label.text = "Notes"; label.fontSize = 3; label.color = Color.white; label.alignment = TextAlignmentOptions.Center; if (scoreController != null) { scoreController.noteWasCutEvent += OnNoteCut; scoreController.noteWasMissedEvent += OnNoteMiss; } }
private void FlushCountersToDisk() { Log.I("Flushing counters to disk"); string json = null; Metadata metadata; CountersData counters; lock (_mutex) { metadata = new Metadata( Configuration.Instance.GetInstanceId(), Configuration.Instance.GetAttemptId(), AddMetaData?.Invoke() ); counters = new CountersData(_counters, metadata); } json = JsonConvert.SerializeObject(counters, new JsonSerializerSettings { NullValueHandling = NullValueHandling.Ignore }); Log.I("Writing the GameSim Counters files.."); if (json != null) { var filename = "counters_" + _countersSequence + ".json"; FileProducer.Write(Path.Combine(Manager.Instance.GetDirectoryFor("GameSim"), filename), Encoding.ASCII.GetBytes(json)); _countersSequence++; } }
private void Init(CountersData data) { //Because CountersController.ReadyToInit relies on finding other objects via Resources.FindObjectsOfTypeAll<>() //before invoking, it is safe to assume that the objects we find do indeed exist. energy = Resources.FindObjectsOfTypeAll <GameEnergyCounter>().First(); fails = data.PlayerData.currentLocalPlayer.playerAllOverallStatsData.allOverallStatsData.failedLevelsCount; if (settings.ShowRestartsInstead) { bool SameLevel = false; if (CurrentLevel != null) { SameLevel = data.GCSSD.difficultyBeatmap.level.songName == CurrentLevel.songName && //I mean, data.GCSSD.difficultyBeatmap.level.songSubName == CurrentLevel.songSubName && //Probably not the best way to compare levels, data.GCSSD.difficultyBeatmap.level.songAuthorName == CurrentLevel.songAuthorName && //But that means I have more lines to spend data.GCSSD.difficultyBeatmap.beatmapData.notesCount == BeatmapDiff.beatmapData.notesCount && //Making snarky comments like these data.GCSSD.difficultyBeatmap.beatmapData.obstaclesCount == BeatmapDiff.beatmapData.obstaclesCount && //For you to find data.GCSSD.difficultyBeatmap.beatmapData.bombsCount == BeatmapDiff.beatmapData.bombsCount; //And to @ me on Discord. } if (SameLevel) { Restarts++; } else { CurrentLevel = data.GCSSD.difficultyBeatmap.level; BeatmapDiff = data.GCSSD.difficultyBeatmap; Restarts = 0; } } Vector3 position = CountersController.DeterminePosition(gameObject, settings.Position, settings.Distance); TextHelper.CreateText(out failText, position - new Vector3(0, 0.4f, 0)); failText.text = settings.ShowRestartsInstead ? Restarts.ToString() : fails.ToString(); failText.fontSize = 4; failText.color = Color.white; failText.alignment = TextAlignmentOptions.Center; GameObject labelGO = new GameObject("Counters+ | Fail Label"); labelGO.transform.parent = transform; TextHelper.CreateText(out TMP_Text label, position); label.text = settings.ShowRestartsInstead ? "Restarts" : "Fails"; label.fontSize = 3; label.color = Color.white; label.alignment = TextAlignmentOptions.Center; if (!settings.ShowRestartsInstead) { energy.gameEnergyDidReach0Event += SlowlyAnnoyThePlayerBecauseTheyFailed; } }
/// <summary> /// Returns a list of counters in memory with metadata /// </summary> /// <param name="instanceId"></param> /// <param name="attemptId"></param> /// <param name="gameSimSettings"></param> /// <returns>CountersData</returns> public string GetCounters(string instanceId, string attemptId = "", string gameSimSettings = "") { #if UNITY_GAME_SIMULATION || UNITY_EDITOR Metadata metadata = new Metadata(instanceId, attemptId, gameSimSettings); lock (_mutex) { var counters = new CountersData(_counters, metadata); return(JsonConvert.SerializeObject(counters, new JsonSerializerSettings { NullValueHandling = NullValueHandling.Ignore })); } #endif }
//We have a local copy here so that we can do some optimizing that isn't available in MenuCore. private Vector3 DeterminePosition(Counter <T> counter, CountersData data) { float comboOffset = CountersController.settings.ComboOffset; float multOffset = CountersController.settings.MultiplierOffset; ICounterPositions position = settings.Position; int index = settings.Distance; Vector3 pos = new Vector3(); //Base position Vector3 offset = new Vector3(0, -0.75f * (index), 0); //Offset for any overlapping, indexes, etc. bool hud360 = CountersController.settings.hudConfig.AttachToBaseGameHUDFor360 && data.Is360Or90Level; float X = hud360 ? 2f : 3.2f; switch (position) { case ICounterPositions.BelowCombo: pos = new Vector3(-X, 1.15f - comboOffset, 7); break; case ICounterPositions.AboveCombo: pos = new Vector3(-X, 2f + comboOffset, 7); offset = new Vector3(0, (offset.y * -1) + 0.75f, 0); break; case ICounterPositions.BelowMultiplier: pos = new Vector3(X, 1.05f - multOffset, 7); break; case ICounterPositions.AboveMultiplier: pos = new Vector3(X, 2f + multOffset, 7); offset = new Vector3(0, (offset.y * -1) + 0.75f, 0); break; case ICounterPositions.BelowEnergy: pos = new Vector3(0, hud360 ? -0.25f : -1.5f, 7); break; case ICounterPositions.AboveHighway: pos = new Vector3(0, 2.5f, 7); offset = new Vector3(0, (offset.y * -1) + (hud360 ? 0.25f : 0.75f), 0); break; } if (counter is ProgressCounter) { if ((settings as ProgressConfigModel).Mode == ICounterMode.Original) { offset += new Vector3(0.25f, 0, 0); } } return(pos + offset); }
internal override void Init(CountersData data, Vector3 position) { TextHelper.CreateText(out counter, position - new Vector3(0, 0.4f, 0)); counter.text = "Data"; counter.fontSize = 4; counter.color = Color.white; counter.alignment = TextAlignmentOptions.Center; TextHelper.CreateText(out label, position); label.text = $"{settings.CustomCounter.Name}"; label.fontSize = 3; label.color = Color.white; label.alignment = TextAlignmentOptions.Center; RefreshCounter(); }
internal override void Init(CountersData data, Vector3 position) { string iniValue = FormatLabel(0, 0, settings.AveragePrecision); Vector3 leftOffset; // Added this so you don't have to change position after creating the text TextAlignmentOptions leftAlign; _RankObject = new GameObject("Counters+ | Cut Label"); _RankObject.transform.parent = transform; beatmapObjectManager = data.BOM; TextHelper.CreateText(out cutLabel, position); cutLabel.text = "Average Cut"; cutLabel.fontSize = 3; cutLabel.color = Color.white; cutLabel.alignment = TextAlignmentOptions.Center; if (settings.SeparateSaberCounts) { TextHelper.CreateText(out cutCounterRight, position - new Vector3(-0.2f, 0.2f, 0)); cutCounterRight.fontSize = 4; cutCounterRight.color = Color.white; cutCounterRight.lineSpacing = -26; cutCounterRight.text = settings.SeparateCutValues ? $"{iniValue}\n{iniValue}\n{iniValue}" : $"{iniValue}"; cutCounterRight.alignment = TextAlignmentOptions.TopLeft; leftOffset = new Vector3(0.2f, 0.2f, 0); leftAlign = TextAlignmentOptions.TopRight; } else { leftOffset = new Vector3(0, 0.2f, 0); leftAlign = TextAlignmentOptions.Top; } TextHelper.CreateText(out cutCounterLeft, position - leftOffset); cutCounterLeft.fontSize = 4; cutCounterLeft.color = Color.white; cutCounterLeft.lineSpacing = -26; cutCounterLeft.text = settings.SeparateCutValues ? $"{iniValue}\n{iniValue}\n{iniValue}" : $"{iniValue}"; cutCounterLeft.alignment = leftAlign; if (beatmapObjectManager != null) { beatmapObjectManager.noteWasCutEvent += UpdateScore; } }
internal override void Init(CountersData data, Vector3 position) { Saber[] sabers = Resources.FindObjectsOfTypeAll <Saber>(); leftSaber = sabers.Where((Saber x) => x.name.ToLower().Contains("left")).First(); rightSaber = sabers.Where((Saber x) => x.name.ToLower().Contains("right")).First(); TextHelper.CreateText(out spinometer, position - new Vector3(0, 0.4f, 0)); spinometer.text = settings.Mode == ICounterMode.SplitAverage ? "0 | 0" : "0"; spinometer.fontSize = 4; spinometer.color = Color.white; spinometer.alignment = TextAlignmentOptions.Center; GameObject labelGO = new GameObject("Counters+ | Spinometer Label"); labelGO.transform.parent = transform; TextHelper.CreateText(out TMP_Text label, position); label.text = "Spinometer"; label.fontSize = 3; label.color = Color.white; label.alignment = TextAlignmentOptions.Center; StartCoroutine(SecondTick()); }
internal override void Init(CountersData data, Vector3 position) { localData = data; localPosition = position; if (gameObject.name != "ScoreCanvas") { StartCoroutine(YeetToBaseCounter()); return; } if (!(settings.Mode == ICounterMode.BaseGame || settings.Mode == ICounterMode.BaseWithOutPoints)) { for (var i = 0; i < transform.childCount; i++) { Transform child = transform.GetChild(i); if (child.gameObject.name != "ScoreText") { if (child.GetComponent <TextMeshProUGUI>() != null) { Destroy(child.GetComponent <TextMeshProUGUI>()); } Destroy(child.gameObject); } else { PointsText = child.GetComponent <TMP_Text>(); } } if (settings.Mode == ICounterMode.ScoreOnly) { Destroy(GameObject.Find("ScoreText")); } CreateText(position); } else { transform.SetParent(TextHelper.CounterCanvas.transform, true); transform.localPosition = position; } }
private void Init(CountersData data) { _scoreController = data.ScoreController; Vector3 position = CountersController.DeterminePosition(gameObject, settings.Position, settings.Distance); TextHelper.CreateText(out cutLabel, position); cutLabel.text = "Average Cut"; cutLabel.fontSize = 3; cutLabel.color = Color.white; cutLabel.alignment = TextAlignmentOptions.Center; _RankObject = new GameObject("Counters+ | Cut Label"); _RankObject.transform.parent = transform; TextHelper.CreateText(out cutCounter, position - new Vector3(0, 0.4f, 0)); cutCounter.text = settings.SeparateSaberCounts ? "0 0" : "0"; cutCounter.fontSize = 4; cutCounter.color = Color.white; cutCounter.alignment = TextAlignmentOptions.Center; if (_scoreController != null) { _scoreController.noteWasCutEvent += UpdateScore; } }
internal override void Init(CountersData data, Vector3 position) { beatmapObjectManager = data.BOM; TextHelper.CreateText(out counterText, position - new Vector3(0, 0.4f, 0)); counterText.text = settings.ShowPercentage ? "0 / 0 - (100%)" : "0 / 0"; counterText.fontSize = 4; counterText.color = Color.white; counterText.alignment = TextAlignmentOptions.Center; GameObject labelGO = new GameObject("Counters+ | Notes Label"); labelGO.transform.parent = transform; TextHelper.CreateText(out TMP_Text label, position); label.text = "Notes"; label.fontSize = 3; label.color = Color.white; label.alignment = TextAlignmentOptions.Center; if (beatmapObjectManager != null) { beatmapObjectManager.noteWasCutEvent += OnNoteCut; beatmapObjectManager.noteWasMissedEvent += OnNoteMiss; } }
private void Init(CountersData data) { Vector3 position = CountersController.DeterminePosition(gameObject, settings.Position, settings.Distance); pc = data.PlayerController; right = data.PlayerController.rightSaber; left = data.PlayerController.leftSaber; if (settings.Mode == ICounterMode.Average || settings.Mode == ICounterMode.SplitAverage) { TextHelper.CreateText(out counterText, position - new Vector3(0, 0.4f, 0)); counterText.text = settings.Mode == ICounterMode.Average ? "0" : "0 | 0"; counterText.fontSize = 4; counterText.color = Color.white; counterText.alignment = TextAlignmentOptions.Center; GameObject labelGO = new GameObject("Counters+ | Speed Label"); labelGO.transform.parent = transform; TextHelper.CreateText(out TMP_Text label, position); label.text = "Average Speed"; label.fontSize = 3; label.color = Color.white; label.alignment = TextAlignmentOptions.Center; } else if (settings.Mode == ICounterMode.Top5Sec) { TextHelper.CreateText(out counterText, position - new Vector3(0, 0.4f, 0)); counterText.text = "00.00"; counterText.fontSize = 4; counterText.color = Color.white; counterText.alignment = TextAlignmentOptions.Center; GameObject labelGO = new GameObject("Counters+ | Highest Speed Label"); labelGO.transform.parent = transform; TextHelper.CreateText(out TMP_Text label, position); label.text = "Top Speed (5 Sec.)"; label.fontSize = 3; label.color = Color.white; label.alignment = TextAlignmentOptions.Center; StartCoroutine(FastestSpeed()); } else if (settings.Mode == ICounterMode.Both || settings.Mode == ICounterMode.SplitBoth) { TextHelper.CreateText(out counterText, position - new Vector3(0, 0.4f, 0)); counterText.text = settings.Mode == ICounterMode.Both ? "0" : "0 | 0"; counterText.fontSize = 4; counterText.color = Color.white; counterText.alignment = TextAlignmentOptions.Center; GameObject labelGO = new GameObject("Counters+ | Speed Label"); labelGO.transform.parent = transform; TextHelper.CreateText(out TMP_Text label, position); label.text = "Average Speed"; label.fontSize = 3; label.color = Color.white; label.alignment = TextAlignmentOptions.Center; GameObject altGO = new GameObject("Counters+ | Highest Speed"); altGO.transform.parent = transform; TextHelper.CreateText(out altCounterText, position - new Vector3(0, 1.1f, 0)); altCounterText.text = "00.00"; altCounterText.fontSize = 4; altCounterText.color = Color.white; altCounterText.alignment = TextAlignmentOptions.Center; GameObject altLabelGO = new GameObject("Counters+ | Highest Speed Label"); altLabelGO.transform.parent = altGO.transform; TextHelper.CreateText(out TMP_Text altLabel, position - new Vector3(0, 0.7f, 0)); altLabel.text = "Top Speed (5 Sec.)"; altLabel.fontSize = 3; altLabel.color = Color.white; altLabel.alignment = TextAlignmentOptions.Center; if (settings.Position == ICounterPositions.AboveCombo || settings.Position == ICounterPositions.AboveHighway || settings.Position == ICounterPositions.AboveMultiplier) { altGO.transform.position += new Vector3(0, 1f, 0); } else { altGO.transform.position += new Vector3(0, -0.75f, 0); } StartCoroutine(FastestSpeed()); } }
internal override void Init(CountersData data, Vector3 position) { StartCoroutine(GetRequired(position)); }
private void InternalInit(CountersData data) { Init(data, DeterminePosition(this, data)); }
void Init(CountersData data) { _audioTimeSync = data.AudioTimeSyncController; length = _audioTimeSync.songLength; if (settings.Mode == ICounterMode.Original) { Vector3 position = CountersController.DeterminePosition(gameObject, settings.Position, settings.Distance); TextHelper.CreateText(out _timeMesh, position + new Vector3(-0.25f, 0.25f, 0)); _timeMesh.text = settings.ProgressTimeLeft ? $"{Math.Floor(length / 60):N0}:{Math.Floor(length % 60):00}" : "0:00"; _timeMesh.fontSize = 4; _timeMesh.color = Color.white; _timeMesh.GetComponent <RectTransform>().SetSizeWithCurrentAnchors(RectTransform.Axis.Horizontal, 0); _timeMesh.GetComponent <RectTransform>().SetSizeWithCurrentAnchors(RectTransform.Axis.Vertical, 0); var image = ReflectionUtil.GetPrivateField <Image>( Resources.FindObjectsOfTypeAll <ScoreMultiplierUIController>().First(), "_multiplierProgressImage"); GameObject g = new GameObject(); Canvas canvas = g.AddComponent <Canvas>(); canvas.renderMode = RenderMode.WorldSpace; CanvasScaler cs = g.AddComponent <CanvasScaler>(); cs.scaleFactor = 10.0f; cs.dynamicPixelsPerUnit = 10f; GraphicRaycaster gr = g.AddComponent <GraphicRaycaster>(); g.GetComponent <RectTransform>().SetSizeWithCurrentAnchors(RectTransform.Axis.Horizontal, 1f); g.GetComponent <RectTransform>().SetSizeWithCurrentAnchors(RectTransform.Axis.Vertical, 1f); GameObject g2 = new GameObject(); _image = g2.AddComponent <Image>(); g2.transform.parent = g.transform; g2.GetComponent <RectTransform>().SetSizeWithCurrentAnchors(RectTransform.Axis.Horizontal, 0.5f); g2.GetComponent <RectTransform>().SetSizeWithCurrentAnchors(RectTransform.Axis.Vertical, 0.5f); g2.transform.localScale = new Vector3(2.3f, 2.3f, 2.3f); _image.sprite = image.sprite; _image.type = Image.Type.Filled; _image.fillMethod = Image.FillMethod.Radial360; _image.fillOrigin = (int)Image.Origin360.Top; _image.fillClockwise = true; GameObject g3 = new GameObject(); var bg = g3.AddComponent <Image>(); g3.transform.parent = g.transform; g3.GetComponent <RectTransform>().SetSizeWithCurrentAnchors(RectTransform.Axis.Horizontal, 0.5f); g3.GetComponent <RectTransform>().SetSizeWithCurrentAnchors(RectTransform.Axis.Vertical, 0.5f); g3.transform.localScale = new Vector3(2.3f, 2.3f, 2.3f); bg.sprite = image.sprite; bg.CrossFadeAlpha(0.05f, 1f, false); g.GetComponent <RectTransform>().SetParent(this.transform, false); g.transform.localPosition = new Vector3(-0.25f, .25f, 0f); transform.position += new Vector3(0.5f, 0, 0); _image.fillAmount = (settings.ProgressTimeLeft && settings.IncludeRing) ? 1 : 0; } else if (settings.Mode == ICounterMode.Percent) { Vector3 position = CountersController.DeterminePosition(gameObject, settings.Position, settings.Distance); TextHelper.CreateText(out _timeMesh, position); _timeMesh.text = settings.ProgressTimeLeft ? "100%" : "0.00%"; _timeMesh.fontSize = 4; _timeMesh.color = Color.white; _timeMesh.alignment = TextAlignmentOptions.Center; } transform.position = CountersController.DeterminePosition(gameObject, settings.Position, settings.Distance); if (GameObject.Find("SongProgressPanel") != null && settings.Mode != ICounterMode.BaseGame) { Destroy(GameObject.Find("SongProgressPanel")); } StartCoroutine(SecondTick()); }
internal abstract void Init(CountersData data, Vector3 textPosition);