TheXorog / BeatRecorder

Easily record your BeatSaber gameplay!
GNU General Public License v3.0
24 stars 0 forks source link

Add support for BeatSaberPlus #11

Closed TheXorog closed 2 years ago

TheXorog commented 2 years ago

https://github.com/HyldraZolxy/BeatSaber-Overlay uses BeatSaberPlus as a way of getting the info in addition to DataPuller and Http-Status. Might as well add support for it as well.

TheXorog commented 2 years ago

There's no proper documentation yet so i'll leave this here for reference.

Endpoint: ws://localhost:2947/socket

Handshake: dd32959ca3

Event Objects:

[Serializable]
public class Event
{
    [JsonProperty] internal string _type = "event";
    [JsonProperty] internal string _event = "";

    [JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
    internal MapInfo mapInfoChanged = null;
    [JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
    internal string gameStateChanged = null;
    [JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
    internal Score scoreEvent = null;
    [JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
    internal uint? pauseTime = null;
    [JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
    internal uint? resumeTime = null;

    internal void FeedEvent()
    {
        if (mapInfoChanged != null)     _event = "mapInfo";
        if (gameStateChanged != null)   _event = "gameState";
        if (scoreEvent != null)         _event = "score";
        if (pauseTime.HasValue)         _event = "pause";
        if (resumeTime.HasValue)        _event = "resume";
    }
}
[Serializable]
public class MapInfo
{
    [JsonProperty] internal string level_id = "";
    [JsonProperty] internal string name = "N/A";
    [JsonProperty] internal string sub_name = "N/A";
    [JsonProperty] internal string artist = "N/A";
    [JsonProperty] internal string mapper = "N/A";
    [JsonProperty] internal string difficulty = "N/A";
    [JsonProperty] internal uint duration = 0;
    [JsonProperty] internal float BPM = 0;
    [JsonProperty] internal float PP = 0;
    [JsonProperty] internal string BSRKey = "";
    [JsonProperty] internal string coverRaw = "";
}
[Serializable]
public class Score
{
    [JsonProperty] internal uint score = 0;
    [JsonProperty] internal float accuracy = 0;
    [JsonProperty] internal uint combo = 0;
    [JsonProperty] internal uint missCount = 0;
    [JsonProperty] internal float currentHealth = 0;
}