Skip to content

Commit

Permalink
Merge pull request #27 from bookdude13/remastered
Browse files Browse the repository at this point in the history
Remastered changes + UI fixes
  • Loading branch information
bookdude13 authored Jan 8, 2025
2 parents 5e9e0b9 + f37ccb2 commit 4eec470
Show file tree
Hide file tree
Showing 21 changed files with 278 additions and 354 deletions.
3 changes: 3 additions & 0 deletions .gitmodules
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
[submodule "PerformanceMeter/SynthRiders-Websockets-Mod"]
path = PerformanceMeter/SynthRiders-Websockets-Mod
url = [email protected]:bookdude13/SynthRiders-Websockets-Mod.git
10 changes: 0 additions & 10 deletions CopyToSR.bat

This file was deleted.

28 changes: 23 additions & 5 deletions PerformanceMeter/PerformanceMeter.sln
Original file line number Diff line number Diff line change
@@ -1,11 +1,21 @@

Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 16
VisualStudioVersion = 16.0.31129.286
# Visual Studio Version 17
VisualStudioVersion = 17.5.33516.290
MinimumVisualStudioVersion = 10.0.40219.1
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PerformanceMeter", "PerformanceMeter\PerformanceMeter.csproj", "{790E1270-393D-4609-BE62-5A7CB4ACAFF5}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "PerformanceMeter", "PerformanceMeter\PerformanceMeter.csproj", "{790E1270-393D-4609-BE62-5A7CB4ACAFF5}"
ProjectSection(ProjectDependencies) = postProject
{18AFB272-E16E-44F8-9B23-75BF023E8BFD} = {18AFB272-E16E-44F8-9B23-75BF023E8BFD}
{2677D911-C61E-44FE-BA02-3165F74BAE9B} = {2677D911-C61E-44FE-BA02-3165F74BAE9B}
EndProjectSection
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PerformanceMeterTests", "PerformanceMeterTests\PerformanceMeterTests.csproj", "{3FF09DBE-B3A9-47CD-90C0-D3054DFED8E5}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "PerformanceMeterTests", "PerformanceMeterTests\PerformanceMeterTests.csproj", "{3FF09DBE-B3A9-47CD-90C0-D3054DFED8E5}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SynthRidersWebsockets", "SynthRiders-Websockets-Mod\SynthRidersWebsockets\SynthRidersWebsockets.csproj", "{2677D911-C61E-44FE-BA02-3165F74BAE9B}"
ProjectSection(ProjectDependencies) = postProject
{18AFB272-E16E-44F8-9B23-75BF023E8BFD} = {18AFB272-E16E-44F8-9B23-75BF023E8BFD}
EndProjectSection
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SRModCore", "SynthRiders-Websockets-Mod\SRModCore\SRModCore\SRModCore.csproj", "{18AFB272-E16E-44F8-9B23-75BF023E8BFD}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Expand All @@ -21,6 +31,14 @@ Global
{3FF09DBE-B3A9-47CD-90C0-D3054DFED8E5}.Debug|Any CPU.Build.0 = Debug|Any CPU
{3FF09DBE-B3A9-47CD-90C0-D3054DFED8E5}.Release|Any CPU.ActiveCfg = Release|Any CPU
{3FF09DBE-B3A9-47CD-90C0-D3054DFED8E5}.Release|Any CPU.Build.0 = Release|Any CPU
{2677D911-C61E-44FE-BA02-3165F74BAE9B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{2677D911-C61E-44FE-BA02-3165F74BAE9B}.Debug|Any CPU.Build.0 = Debug|Any CPU
{2677D911-C61E-44FE-BA02-3165F74BAE9B}.Release|Any CPU.ActiveCfg = Release|Any CPU
{2677D911-C61E-44FE-BA02-3165F74BAE9B}.Release|Any CPU.Build.0 = Release|Any CPU
{18AFB272-E16E-44F8-9B23-75BF023E8BFD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{18AFB272-E16E-44F8-9B23-75BF023E8BFD}.Debug|Any CPU.Build.0 = Debug|Any CPU
{18AFB272-E16E-44F8-9B23-75BF023E8BFD}.Release|Any CPU.ActiveCfg = Release|Any CPU
{18AFB272-E16E-44F8-9B23-75BF023E8BFD}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
Expand Down
107 changes: 58 additions & 49 deletions PerformanceMeter/PerformanceMeter/EndGameDisplay.cs
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
using SRModCore;
using UnityEngine;
using UnityEngine.UI;
using static Il2CppRootMotion.Demos.Turret;

namespace PerformanceMeter
{
Expand Down Expand Up @@ -54,17 +55,17 @@ List<CumulativeFrame> currentScoreFrames
InjectTitle(logger, leftScreen);

// Get some existing objects for later reference
Transform parent = leftScreen.transform.Find("ScoreWrap");
Transform parent = leftScreen.transform.Find("ScoreUI");
if (parent == null)
{
logger.Msg("Failed to find root transform for graph");
return;
}

Transform clonedStatTransform = parent.Find("Streak");
Transform clonedStatTransform = parent.Find("Song Stats/SongStat - Longest Streak");
if (clonedStatTransform == null)
{
logger.Msg("Failed to find transform to clone for stats");
logger.Msg("Failed to find transform clone for stats");
return;
}

Expand Down Expand Up @@ -110,7 +111,7 @@ List<PercentFrame> lifePctFrames
logger.Msg("Average life pct: " + avgLifePct);

RectTransform lifePctGraphContainer = CreateGraphContainer(logger, parent, "pm_lifePctContainer");
InjectAverageStat(logger, lifePctGraphContainer, clonedStatGameObject, "Average Life Percent: ", avgLifePct);
InjectAverageStat(logger, lifePctGraphContainer, clonedStatGameObject, "Average Life %", avgLifePct);
InjectPercentGraph(logger, lifePctGraphContainer, lifePctFrames, GetColorForLifePercent, avgLifePct);
}

Expand All @@ -120,8 +121,9 @@ List<PercentFrame> lifePctFrames
/// <returns>RectTransform of the created container GameObject</returns>
private RectTransform CreateGraphContainer(SRLogger logger, Transform parent, string containerName)
{
var container = new GameObject(containerName, typeof(Canvas));
var container = new GameObject(containerName);
container.transform.SetParent(parent, false);
container.AddComponent<Canvas>();
container.AddComponent<CanvasRenderer>();
container.AddComponent<Image>();

Expand All @@ -130,8 +132,8 @@ private RectTransform CreateGraphContainer(SRLogger logger, Transform parent, st
containerRect.localEulerAngles = Vector3.zero;
containerRect.anchorMin = new Vector2(0f, 0.5f);
containerRect.anchorMax = new Vector2(1f, 0.5f);
containerRect.sizeDelta = new Vector2(20.0f, 21.0f);
containerRect.anchoredPosition = new Vector2(0f, 5.0f);
containerRect.sizeDelta = new Vector2(2.0f, 2.0f);
containerRect.anchoredPosition = new Vector2(0f, 1.0f);

container.GetComponent<Image>().color = Color.clear;

Expand All @@ -146,52 +148,50 @@ private RectTransform CreateGraphContainer(SRLogger logger, Transform parent, st
/// <returns>Root GameObject for created left screen</returns>
private GameObject InjectLeftScreen(SRLogger logger)
{
GameObject displayWrap = GameObject.Find("DisplayWrap");
GameObject displayWrap = GameObject.Find("[Score Summary]/DisplayWrap");

// Center screen
GameObject centerScreen = displayWrap.transform.Find("No Multiplayer").gameObject;
GameObject centerScreen = displayWrap.transform.Find("SinglePlayer").gameObject;

// Clone
GameObject leftScreen = GameObject.Instantiate(
centerScreen.gameObject,
centerScreen.transform.position,
centerScreen.transform.rotation,
displayWrap.transform
);
GameObject leftScreen = GameObject.Instantiate(centerScreen, centerScreen.transform.parent, true);
leftScreen.name = "pm_gameEndLeftScreen";

// Move to left side
Vector3 platformPosition = new Vector3(0, 0, 0);
leftScreen.transform.RotateAround(platformPosition, Vector3.up, -75.0f);

// Delete unwanted children
UnityUtil.DeleteChildren(logger, leftScreen.transform, new string[] { "ScoreWrap" });
UnityUtil.DeleteChildren(logger, leftScreen.transform, new string[] { "ScoreUI" });

// Delete unwanted children
UnityUtil.DeleteChildren(logger, leftScreen.transform.Find("ScoreWrap"), new string[] { "TotalScore", "Streak" });
var scoreUi = leftScreen.transform.Find("ScoreUI");
UnityUtil.DeleteChildren(logger, scoreUi.transform, new string[] { "Background", "Score", "Song Stats" });

UnityUtil.DeleteChildren(logger, scoreUi.transform.Find("Song Stats"), new string[] { "SongStat - Longest Streak" });

return leftScreen;
}

private void InjectTitle(SRLogger logger, GameObject leftScreen)
{
Transform root = leftScreen.transform.Find("ScoreWrap/TotalScore");
Transform root = leftScreen.transform.Find("ScoreUI/Score");
if (root == null)
{
logger.Msg("Failed to find root transform");
return;
}

root.name = "pm_title";
root.localPosition += Vector3.up * 2.0f;

var labelText = root.Find("Label").GetComponent<TMPro.TMP_Text>();
var labelText = root.Find("Final Score Label").GetComponent<Il2CppTMPro.TMP_Text>();
labelText.SetText("");

var valueText = root.Find("Value").GetComponent<TMPro.TMP_Text>();
var valueText = root.Find("Final Score Value").GetComponent<Il2CppTMPro.TMP_Text>();
valueText.SetText("Performance");
valueText.color = Color.white;

UnityUtil.DeleteChildren(logger, root, new string[] { "Label", "Value" });
UnityUtil.DeleteChildren(logger, root, new string[] { "Final Score Label", "Final Score Value" });

root.gameObject.SetActive(true);
}
Expand All @@ -209,13 +209,13 @@ float averagePercent
averageStat.transform.localPosition = new Vector3(0.0f, 6.0f, 0.0f);
averageStat.transform.localEulerAngles = Vector3.zero;

var labelTMP = averageStat.transform.Find("Label").GetComponent<TMPro.TMP_Text>();
var labelTMP = averageStat.transform.Find("StatName").GetComponent<Il2CppTMPro.TMP_Text>();
labelTMP.SetText(labelText);

var valueText = averageStat.transform.Find("Value").GetComponent<TMPro.TMP_Text>();
var valueText = averageStat.transform.Find("StatValue").GetComponent<Il2CppTMPro.TMP_Text>();
valueText.SetText(string.Format("{0:0.###}%", averagePercent * 100));

UnityUtil.DeleteChildren(logger, averageStat.transform, new string[] { "Label", "Value", "Bg" });
UnityUtil.DeleteChildren(logger, averageStat.transform, new string[] { "StatName", "StatValue", "BG" });

averageStat.SetActive(true);
}
Expand All @@ -231,24 +231,28 @@ private void InjectPercentGraph(
UnityUtil.DeleteChildren(logger, parent, new string[] { "pm_avgPct", "title" });

// Container
GameObject graphContainer = new GameObject("pm_graphContainer", typeof(Canvas));
graphContainer.transform.SetParent(parent, false);
GameObject graphContainer = new GameObject("pm_graphContainer");//, typeof(Canvas));
graphContainer.transform.SetParent(parent, true);

graphContainer.AddComponent<Canvas>();

var containerRect = graphContainer.GetComponent<RectTransform>();
containerRect.localPosition = Vector3.zero;
containerRect.localEulerAngles = Vector3.zero;
containerRect.anchorMin = new Vector2(0.5f, 1f);
containerRect.anchorMax = new Vector2(0.5f, 1f);
containerRect.sizeDelta = new Vector2(20.0f, 15.0f);
containerRect.anchoredPosition = new Vector2(0f, -16.0f);
containerRect.sizeDelta = new Vector2(2.0f, 1.5f);
containerRect.anchoredPosition = new Vector2(0f, -6.0f);

// Background
var backgroundSprite = UnityUtil.CreateSpriteFromAssemblyResource(logger, Assembly.GetExecutingAssembly(), "PerformanceMeter.Resources.Sprites.bg.png");

GameObject graphBackground = GameObject.Instantiate(new GameObject("pm_graphBg", typeof(Image)), graphContainer.transform);
var backgroundImage = graphBackground.GetComponent<Image>();
var graphBackground = new GameObject("pm_graphBg");
graphBackground.transform.SetParent(graphContainer.transform);

var backgroundImage = graphBackground.AddComponent<Image>();
backgroundImage.sprite = backgroundSprite;
backgroundImage.color = Color.black;
backgroundImage.color = new Color(0f, 0f, 0f, 0.7f);

FillParent(graphBackground.GetComponent<RectTransform>());

Expand All @@ -263,7 +267,7 @@ private void InjectPercentGraph(
label0.anchorMax = new Vector2(0f, 0f);*/

// Graphable Region
var padding = new Vector2(0.4f, 0.4f);
var padding = new Vector2(0.2f, 0.2f);
var graphableRegionSize = containerRect.sizeDelta - padding;
var graphableRect = CreateGraphableRegion(graphContainer.transform, graphableRegionSize);

Expand Down Expand Up @@ -296,14 +300,16 @@ private void InjectPercentGraph(
/// <returns>RectTransform of the new label</returns>
private RectTransform CreateLabel(Transform parent, Vector2 anchoredPosition, string text)
{
var label = new GameObject("pm_graphLabel", typeof(TMPro.TextMeshPro));
var label = new GameObject("pm_graphLabel");
label.transform.SetParent(parent, false);

// TODO this may break
var labelRect = label.GetComponent<RectTransform>();
labelRect.anchorMin = new Vector2(0.5f, 0.5f);
labelRect.anchorMax = new Vector2(0.5f, 0.5f);
labelRect.anchoredPosition = anchoredPosition;

var labelTMP = label.GetComponent<TMPro.TextMeshPro>();
var labelTMP = label.AddComponent<Il2CppTMPro.TextMeshPro>();
labelTMP.fontSize = 6f;
labelTMP.SetText(text);
labelTMP.autoSizeTextContainer = true;
Expand All @@ -313,8 +319,9 @@ private RectTransform CreateLabel(Transform parent, Vector2 anchoredPosition, st

private RectTransform CreateGraphableRegion(Transform graphContainer, Vector2 sizeDelta)
{
var graphableRegion = new GameObject("pm_graphArea", typeof(Canvas));
var graphableRegion = new GameObject("pm_graphArea");//, typeof(Canvas));
graphableRegion.transform.SetParent(graphContainer.transform, false);
graphableRegion.AddComponent<Canvas>();
graphableRegion.AddComponent<CanvasRenderer>();

var graphableRect = graphableRegion.GetComponent<RectTransform>();
Expand Down Expand Up @@ -360,6 +367,8 @@ Func<float, Color> fnGetColor

private void FillParent(RectTransform rect)
{
rect.localEulerAngles = Vector3.zero;
rect.localPosition = Vector3.zero;
rect.anchorMin = Vector2.zero;
rect.anchorMax = Vector2.one;
rect.sizeDelta = Vector2.zero;
Expand All @@ -370,10 +379,10 @@ private GameObject CreatePoint(RectTransform graphContainer, Sprite sprite, floa
float graphWidth = graphContainer.sizeDelta.x;
float graphHeight = graphContainer.sizeDelta.y;

var dot = new GameObject("pm_graphCircle", typeof(Image));
var dot = new GameObject("pm_graphCircle");
dot.transform.SetParent(graphContainer, false);

var image = dot.GetComponent<Image>();
var image = dot.AddComponent<Image>();
if (sprite != null)
{
image.sprite = sprite;
Expand All @@ -383,7 +392,7 @@ private GameObject CreatePoint(RectTransform graphContainer, Sprite sprite, floa

var rectTransform = dot.GetComponent<RectTransform>();
rectTransform.anchoredPosition = new Vector2(pctTime * graphWidth, pctOfTotal * graphHeight);
rectTransform.sizeDelta = new Vector2(0.04f, 0.04f);
rectTransform.sizeDelta = new Vector2(0.01f, 0.01f);
rectTransform.anchorMin = new Vector2(0, 0);
rectTransform.anchorMax = new Vector2(0, 0);

Expand All @@ -395,16 +404,16 @@ private GameObject CreateTimeMarker(RectTransform graphContainer, float pctTime)
float graphWidth = graphContainer.sizeDelta.x;
float graphHeight = graphContainer.sizeDelta.y;

var marker = new GameObject("pm_graphTimeMark", typeof(Image));
var marker = new GameObject("pm_graphTimeMark");
marker.transform.SetParent(graphContainer, false);

var image = marker.GetComponent<Image>();
var image = marker.AddComponent<Image>();
image.color = colorMarker;
image.enabled = true;

var rectTransform = marker.GetComponent<RectTransform>();
rectTransform.anchoredPosition = new Vector2(pctTime * graphWidth, 0.0f);
rectTransform.sizeDelta = new Vector2(0.03f, 0.5f);
rectTransform.anchoredPosition = new Vector2(pctTime * graphWidth, -0.1f);
rectTransform.sizeDelta = new Vector2(0.01f, 0.07f);
rectTransform.anchorMin = new Vector2(0, 0);
rectTransform.anchorMax = new Vector2(0, 0);

Expand All @@ -415,28 +424,28 @@ private GameObject CreateAverageLine(RectTransform graphContainer, float average
{
var graphHeight = graphContainer.sizeDelta.y;

var line = new GameObject("pm_graphAverageLine", typeof(Image));
var line = new GameObject("pm_graphAverageLine");
line.transform.SetParent(graphContainer, false);

var image = line.GetComponent<Image>();
var image = line.AddComponent<Image>();
image.color = colorAverageLine;
image.enabled = true;

var rectTransform = line.GetComponent<RectTransform>();
rectTransform.anchorMin = new Vector2(0, 0);
rectTransform.anchorMax = new Vector2(1, 0);
rectTransform.sizeDelta = new Vector2(0f, 0.04f);
rectTransform.sizeDelta = new Vector2(0f, 0.01f);
rectTransform.anchoredPosition = new Vector2(0f, averagePercent * graphHeight);

return line;
}

private GameObject CreateLineSegment(RectTransform graphContainer, Vector2 from, Vector2 to, Color color)
{
var segment = new GameObject("pm_graphLineSegment", typeof(Image));
var segment = new GameObject("pm_graphLineSegment");
segment.transform.SetParent(graphContainer, false);

var image = segment.GetComponent<Image>();
var image = segment.AddComponent<Image>();
image.color = color;
image.enabled = true;

Expand All @@ -445,7 +454,7 @@ private GameObject CreateLineSegment(RectTransform graphContainer, Vector2 from,
var distance = Vector2.Distance(from, to);
rectTransform.anchorMin = new Vector2(0, 0);
rectTransform.anchorMax = new Vector2(0, 0);
rectTransform.sizeDelta = new Vector2(distance, 0.06f);
rectTransform.sizeDelta = new Vector2(distance, 0.01f);
rectTransform.anchoredPosition = from + direction * distance * .5f;
rectTransform.localEulerAngles = new Vector3(0, 0, Mathf.Atan2(direction.y, direction.x) * Mathf.Rad2Deg);

Expand Down
Loading

0 comments on commit 4eec470

Please sign in to comment.