├── .gitattributes
├── .gitignore
├── PPPredictor.lutconfig
├── PPPredictor.sln
├── PPPredictor
├── Counter
│ ├── CounterInfoHolder.cs
│ ├── PPPCounter.cs
│ └── Settings
│ │ ├── CounterSettings.bsml
│ │ └── CounterSettings.cs
├── Data
│ ├── Curve
│ │ ├── BeatLeaderPPPCurve.cs
│ │ ├── CurveInfo.cs
│ │ ├── CurveParser.cs
│ │ └── CustomPPPCurve.cs
│ ├── DisplayInfos
│ │ ├── DisplayPPInfo.cs
│ │ └── DisplaySessionInfo.cs
│ ├── LeaderBoardDataTypes
│ │ ├── AccSaberDataTypes.cs
│ │ ├── BeatLeaderDataTypes.cs
│ │ ├── HitBloqDataTypes.cs
│ │ └── ScoreSaberDataTypes.cs
│ ├── PPGainResult.cs
│ ├── PPPBeatMapInfo.cs
│ ├── PPPLeaderboardInfo.cs
│ ├── PPPMapPool.cs
│ ├── PPPMapPoolEntry.cs
│ ├── PPPPlayer.cs
│ ├── PPPScore.cs
│ ├── PPPScoreCollection.cs
│ ├── PPPStarRating.cs
│ ├── PPPWebSocketData.cs
│ ├── ProfileInfo.cs
│ ├── RankGainResult.cs
│ ├── SVector3.cs
│ └── ShortScore.cs
├── Directory.Build.props
├── Installers
│ ├── CoreInstaller.cs
│ ├── GamePlayInstaller.cs
│ ├── MainMenuInstaller.cs
│ └── PPPPredictorDisplayInstaller.cs
├── Interfaces
│ ├── IAccSaberAPI.cs
│ ├── IBeatLeaderAPI.cs
│ ├── IHitBloqAPI.cs
│ ├── IPPPCurve.cs
│ ├── IPPPRawWebsocketData.cs
│ ├── IPPPWebSocket.cs
│ ├── IPPPredictor.cs
│ ├── IPPPredictorMgr.cs
│ └── IScoresaberAPI.cs
├── OpenAPIs
│ ├── PPPWebSocket.cs
│ ├── accsaberapi.cs
│ ├── beatleaderapi.cs
│ ├── hitbloqapi.cs
│ └── scoresaberapi.cs
├── OverlayServer
│ └── WebSocketOverlayServer.cs
├── PPPredictor.csproj
├── Plugin.cs
├── Properties
│ └── AssemblyInfo.cs
├── Resources
│ ├── LeaderBoardLogos
│ │ ├── AccSaber.png
│ │ ├── BeatLeader.png
│ │ ├── HitBloq.png
│ │ └── ScoreSaber.png
│ └── icon.png
├── UI
│ ├── PPPredictorFlowCoordinator.cs
│ ├── ViewController
│ │ ├── PPPredictorViewController.cs
│ │ └── SettingsMidViewController.cs
│ └── Views
│ │ ├── PPPredictorView.bsml
│ │ └── SettingsMidView.bsml
├── Utilities
│ ├── Constants.cs
│ ├── DisplayHelper.cs
│ ├── Enums.cs
│ ├── GamePlayMgr.cs
│ ├── MainMenuMgr.cs
│ ├── PPCalculator.cs
│ ├── PPCalculatorAccSaber.cs
│ ├── PPCalculatorBeatLeader.cs
│ ├── PPCalculatorHitBloq.cs
│ ├── PPCalculatorNoLeaderboard.cs
│ ├── PPCalculatorScoreSaber.cs
│ ├── PPPredictor.cs
│ ├── PPPredictorEventsMgr.cs
│ ├── PPPredictorMgr.cs
│ ├── ParsingUtil.cs
│ ├── ProfileInfoMgr.cs
│ └── WebSocketMgr.cs
├── VersionChecker
│ ├── VersionChecker.cs
│ └── VersionInfo.cs
└── manifest.json
├── README.md
├── Starter
├── Program.cs
└── Starter.csproj
├── UnitTests
├── Data
│ ├── Curve
│ │ ├── TestBeatLeaderPPPCurve.cs
│ │ ├── TestCurveInfo.cs
│ │ ├── TestCurveParser.cs
│ │ └── TestCustomPPPCurve.cs
│ ├── DisplayInfo
│ │ ├── TestDisplayPPInfo.cs
│ │ └── TestDisplaySessionInfo.cs
│ ├── TestPPGainResult.cs
│ ├── TestPPPBeatMapInfo.cs
│ ├── TestPPPLeaderboardInfo.cs
│ ├── TestPPPMapPool.cs
│ ├── TestPPPMapPoolEntry.cs
│ ├── TestPPPScore.cs
│ ├── TestPPPScoreCollection.cs
│ ├── TestPPPStarRating.cs
│ ├── TestPPPlayer.cs
│ ├── TestProfileInfo.cs
│ ├── TestRankGainResult.cs
│ ├── TestSVector3.cs
│ └── TestShortScore.cs
├── MockServices
│ └── MockScoreSaberApi.cs
├── TestUtils
│ └── TestUtils.cs
├── UnitTests.csproj
└── Usings.cs
└── testEnvironments.json
/.gitattributes:
--------------------------------------------------------------------------------
1 | ###############################################################################
2 | # Set default behavior to automatically normalize line endings.
3 | ###############################################################################
4 | * text=auto
5 |
6 | ###############################################################################
7 | # Set default behavior for command prompt diff.
8 | #
9 | # This is need for earlier builds of msysgit that does not have it on by
10 | # default for csharp files.
11 | # Note: This is only used by command line
12 | ###############################################################################
13 | #*.cs diff=csharp
14 |
15 | ###############################################################################
16 | # Set the merge driver for project and solution files
17 | #
18 | # Merging from the command prompt will add diff markers to the files if there
19 | # are conflicts (Merging from VS is not affected by the settings below, in VS
20 | # the diff markers are never inserted). Diff markers may cause the following
21 | # file extensions to fail to load in VS. An alternative would be to treat
22 | # these files as binary and thus will always conflict and require user
23 | # intervention with every merge. To do so, just uncomment the entries below
24 | ###############################################################################
25 | #*.sln merge=binary
26 | #*.csproj merge=binary
27 | #*.vbproj merge=binary
28 | #*.vcxproj merge=binary
29 | #*.vcproj merge=binary
30 | #*.dbproj merge=binary
31 | #*.fsproj merge=binary
32 | #*.lsproj merge=binary
33 | #*.wixproj merge=binary
34 | #*.modelproj merge=binary
35 | #*.sqlproj merge=binary
36 | #*.wwaproj merge=binary
37 |
38 | ###############################################################################
39 | # behavior for image files
40 | #
41 | # image files are treated as binary by default.
42 | ###############################################################################
43 | #*.jpg binary
44 | #*.png binary
45 | #*.gif binary
46 |
47 | ###############################################################################
48 | # diff behavior for common document formats
49 | #
50 | # Convert binary document formats to text before diffing them. This feature
51 | # is only available from the command line. Turn it on by uncommenting the
52 | # entries below.
53 | ###############################################################################
54 | #*.doc diff=astextplain
55 | #*.DOC diff=astextplain
56 | #*.docx diff=astextplain
57 | #*.DOCX diff=astextplain
58 | #*.dot diff=astextplain
59 | #*.DOT diff=astextplain
60 | #*.pdf diff=astextplain
61 | #*.PDF diff=astextplain
62 | #*.rtf diff=astextplain
63 | #*.RTF diff=astextplain
64 |
--------------------------------------------------------------------------------
/PPPredictor.lutconfig:
--------------------------------------------------------------------------------
1 |
2 |
3 | true
4 | true
5 | 180000
6 |
--------------------------------------------------------------------------------
/PPPredictor.sln:
--------------------------------------------------------------------------------
1 |
2 | Microsoft Visual Studio Solution File, Format Version 12.00
3 | # Visual Studio Version 17
4 | VisualStudioVersion = 17.4.33213.308
5 | MinimumVisualStudioVersion = 10.0.40219.1
6 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PPPredictor", "PPPredictor\PPPredictor.csproj", "{7D72F6BF-5835-49C8-ADD7-8F2F587B9588}"
7 | EndProject
8 | Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Starter", "Starter\Starter.csproj", "{FA9C8BD1-3460-42AF-B129-1FD95E25A5B0}"
9 | EndProject
10 | Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "UnitTests", "UnitTests\UnitTests.csproj", "{8B7FB8F5-39D5-41E8-9583-1B8B7620D389}"
11 | EndProject
12 | Global
13 | GlobalSection(SolutionConfigurationPlatforms) = preSolution
14 | Debug ACCSABERNETWORK|Any CPU = Debug ACCSABERNETWORK|Any CPU
15 | Debug ALLNETWORK|Any CPU = Debug ALLNETWORK|Any CPU
16 | Debug BEATLEADERNETWORK|Any CPU = Debug BEATLEADERNETWORK|Any CPU
17 | Debug HITBLOQNETWORK|Any CPU = Debug HITBLOQNETWORK|Any CPU
18 | Debug SCORESABERNETWORK|Any CPU = Debug SCORESABERNETWORK|Any CPU
19 | Debug|Any CPU = Debug|Any CPU
20 | Release|Any CPU = Release|Any CPU
21 | EndGlobalSection
22 | GlobalSection(ProjectConfigurationPlatforms) = postSolution
23 | {7D72F6BF-5835-49C8-ADD7-8F2F587B9588}.Debug ACCSABERNETWORK|Any CPU.ActiveCfg = Debug ACCSABERNETWORK|Any CPU
24 | {7D72F6BF-5835-49C8-ADD7-8F2F587B9588}.Debug ACCSABERNETWORK|Any CPU.Build.0 = Debug ACCSABERNETWORK|Any CPU
25 | {7D72F6BF-5835-49C8-ADD7-8F2F587B9588}.Debug ALLNETWORK|Any CPU.ActiveCfg = Debug ALLNETWORK|Any CPU
26 | {7D72F6BF-5835-49C8-ADD7-8F2F587B9588}.Debug ALLNETWORK|Any CPU.Build.0 = Debug ALLNETWORK|Any CPU
27 | {7D72F6BF-5835-49C8-ADD7-8F2F587B9588}.Debug BEATLEADERNETWORK|Any CPU.ActiveCfg = Debug BEATLEADERNETWORK|Any CPU
28 | {7D72F6BF-5835-49C8-ADD7-8F2F587B9588}.Debug BEATLEADERNETWORK|Any CPU.Build.0 = Debug BEATLEADERNETWORK|Any CPU
29 | {7D72F6BF-5835-49C8-ADD7-8F2F587B9588}.Debug HITBLOQNETWORK|Any CPU.ActiveCfg = Debug HITBLOQNETWORK|Any CPU
30 | {7D72F6BF-5835-49C8-ADD7-8F2F587B9588}.Debug HITBLOQNETWORK|Any CPU.Build.0 = Debug HITBLOQNETWORK|Any CPU
31 | {7D72F6BF-5835-49C8-ADD7-8F2F587B9588}.Debug SCORESABERNETWORK|Any CPU.ActiveCfg = Debug SCORESABERNETWORK|Any CPU
32 | {7D72F6BF-5835-49C8-ADD7-8F2F587B9588}.Debug SCORESABERNETWORK|Any CPU.Build.0 = Debug SCORESABERNETWORK|Any CPU
33 | {7D72F6BF-5835-49C8-ADD7-8F2F587B9588}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
34 | {7D72F6BF-5835-49C8-ADD7-8F2F587B9588}.Debug|Any CPU.Build.0 = Debug|Any CPU
35 | {7D72F6BF-5835-49C8-ADD7-8F2F587B9588}.Release|Any CPU.ActiveCfg = Release|Any CPU
36 | {7D72F6BF-5835-49C8-ADD7-8F2F587B9588}.Release|Any CPU.Build.0 = Release|Any CPU
37 | {FA9C8BD1-3460-42AF-B129-1FD95E25A5B0}.Debug ACCSABERNETWORK|Any CPU.ActiveCfg = Debug ACCSABERNETWORK|Any CPU
38 | {FA9C8BD1-3460-42AF-B129-1FD95E25A5B0}.Debug ACCSABERNETWORK|Any CPU.Build.0 = Debug ACCSABERNETWORK|Any CPU
39 | {FA9C8BD1-3460-42AF-B129-1FD95E25A5B0}.Debug ALLNETWORK|Any CPU.ActiveCfg = Debug|Any CPU
40 | {FA9C8BD1-3460-42AF-B129-1FD95E25A5B0}.Debug ALLNETWORK|Any CPU.Build.0 = Debug|Any CPU
41 | {FA9C8BD1-3460-42AF-B129-1FD95E25A5B0}.Debug BEATLEADERNETWORK|Any CPU.ActiveCfg = Debug|Any CPU
42 | {FA9C8BD1-3460-42AF-B129-1FD95E25A5B0}.Debug BEATLEADERNETWORK|Any CPU.Build.0 = Debug|Any CPU
43 | {FA9C8BD1-3460-42AF-B129-1FD95E25A5B0}.Debug HITBLOQNETWORK|Any CPU.ActiveCfg = Debug|Any CPU
44 | {FA9C8BD1-3460-42AF-B129-1FD95E25A5B0}.Debug HITBLOQNETWORK|Any CPU.Build.0 = Debug|Any CPU
45 | {FA9C8BD1-3460-42AF-B129-1FD95E25A5B0}.Debug SCORESABERNETWORK|Any CPU.ActiveCfg = Debug|Any CPU
46 | {FA9C8BD1-3460-42AF-B129-1FD95E25A5B0}.Debug SCORESABERNETWORK|Any CPU.Build.0 = Debug|Any CPU
47 | {FA9C8BD1-3460-42AF-B129-1FD95E25A5B0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
48 | {FA9C8BD1-3460-42AF-B129-1FD95E25A5B0}.Debug|Any CPU.Build.0 = Debug|Any CPU
49 | {FA9C8BD1-3460-42AF-B129-1FD95E25A5B0}.Release|Any CPU.ActiveCfg = Release|Any CPU
50 | {FA9C8BD1-3460-42AF-B129-1FD95E25A5B0}.Release|Any CPU.Build.0 = Release|Any CPU
51 | {8B7FB8F5-39D5-41E8-9583-1B8B7620D389}.Debug ACCSABERNETWORK|Any CPU.ActiveCfg = Debug|Any CPU
52 | {8B7FB8F5-39D5-41E8-9583-1B8B7620D389}.Debug ACCSABERNETWORK|Any CPU.Build.0 = Debug|Any CPU
53 | {8B7FB8F5-39D5-41E8-9583-1B8B7620D389}.Debug ALLNETWORK|Any CPU.ActiveCfg = Debug|Any CPU
54 | {8B7FB8F5-39D5-41E8-9583-1B8B7620D389}.Debug ALLNETWORK|Any CPU.Build.0 = Debug|Any CPU
55 | {8B7FB8F5-39D5-41E8-9583-1B8B7620D389}.Debug BEATLEADERNETWORK|Any CPU.ActiveCfg = Debug|Any CPU
56 | {8B7FB8F5-39D5-41E8-9583-1B8B7620D389}.Debug BEATLEADERNETWORK|Any CPU.Build.0 = Debug|Any CPU
57 | {8B7FB8F5-39D5-41E8-9583-1B8B7620D389}.Debug HITBLOQNETWORK|Any CPU.ActiveCfg = Debug|Any CPU
58 | {8B7FB8F5-39D5-41E8-9583-1B8B7620D389}.Debug HITBLOQNETWORK|Any CPU.Build.0 = Debug|Any CPU
59 | {8B7FB8F5-39D5-41E8-9583-1B8B7620D389}.Debug SCORESABERNETWORK|Any CPU.ActiveCfg = Debug|Any CPU
60 | {8B7FB8F5-39D5-41E8-9583-1B8B7620D389}.Debug SCORESABERNETWORK|Any CPU.Build.0 = Debug|Any CPU
61 | {8B7FB8F5-39D5-41E8-9583-1B8B7620D389}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
62 | {8B7FB8F5-39D5-41E8-9583-1B8B7620D389}.Debug|Any CPU.Build.0 = Debug|Any CPU
63 | {8B7FB8F5-39D5-41E8-9583-1B8B7620D389}.Release|Any CPU.ActiveCfg = Release|Any CPU
64 | {8B7FB8F5-39D5-41E8-9583-1B8B7620D389}.Release|Any CPU.Build.0 = Release|Any CPU
65 | EndGlobalSection
66 | GlobalSection(SolutionProperties) = preSolution
67 | HideSolutionNode = FALSE
68 | EndGlobalSection
69 | GlobalSection(ExtensibilityGlobals) = postSolution
70 | SolutionGuid = {222333A5-DD41-4ED5-8005-FECEBC7DA237}
71 | EndGlobalSection
72 | EndGlobal
73 |
--------------------------------------------------------------------------------
/PPPredictor/Counter/Settings/CounterSettings.bsml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
--------------------------------------------------------------------------------
/PPPredictor/Counter/Settings/CounterSettings.cs:
--------------------------------------------------------------------------------
1 | using BeatSaberMarkupLanguage.Attributes;
2 | using PPPredictor.Utilities;
3 | using System;
4 | using System.Collections.Generic;
5 | using System.ComponentModel;
6 |
7 | namespace PPPredictor.Counter.Settings
8 | {
9 | internal class CounterSettings : INotifyPropertyChanged
10 | {
11 | private readonly List