Example #1
0
        internal static void OnBuildTracks(CustomDataDeserializer.DeserializeBeatmapEventArgs eventArgs)
        {
            TrackBuilder trackBuilder = eventArgs.TrackBuilder;

            foreach (CustomEventData customEventData in eventArgs.CustomEventDatas)
            {
                try
                {
                    switch (customEventData.type)
                    {
                    case ASSIGNPLAYERTOTRACK:
                        trackBuilder.AddTrack(customEventData.data.Get <string>(TRACK) ?? throw new InvalidOperationException("Track was not defined."));
                        break;

                    case ASSIGNTRACKPARENT:
                        trackBuilder.AddTrack(customEventData.data.Get <string>(PARENTTRACK) ?? throw new InvalidOperationException("Parent track was not defined."));
                        break;

                    default:
                        continue;
                    }
                }
                catch (Exception e)
                {
                    CustomDataDeserializer.LogFailure(Plugin.Logger, e, customEventData);
                }
            }
        }
Example #2
0
        internal static void OnDeserializeBeatmapData(CustomDataDeserializer.DeserializeBeatmapEventArgs eventArgs)
        {
            if (eventArgs.IsMultiplayer)
            {
                return;
            }

            CustomBeatmapData beatmapData = eventArgs.BeatmapData;

            _noodleObjectDatas = new Dictionary <BeatmapObjectData, IBeatmapObjectDataCustomData>();
            Dictionary <string, PointDefinition> pointDefinitions = beatmapData.GetBeatmapPointDefinitions();
            Dictionary <string, Track>           beatmapTracks    = beatmapData.GetBeatmapTracks();

            foreach (BeatmapObjectData beatmapObjectData in eventArgs.BeatmapObjectDatas)
            {
                try
                {
                    NoodleObjectData noodleObjectData;

                    Dictionary <string, object?> customData;

                    switch (beatmapObjectData)
                    {
                    case CustomObstacleData customObstacleData:
                        customData       = customObstacleData.customData;
                        noodleObjectData = ProcessCustomObstacle(customData);
                        break;

                    case CustomNoteData customNoteData:
                        customData       = customNoteData.customData;
                        noodleObjectData = ProcessCustomNote(customData);
                        break;

                    case CustomWaypointData customWaypointData:
                        customData       = customWaypointData.customData;
                        noodleObjectData = new NoodleObjectData();
                        break;

                    default:
                        continue;
                    }

                    FinalizeCustomObject(customData, noodleObjectData, pointDefinitions, beatmapTracks);
                    _noodleObjectDatas.Add(beatmapObjectData, noodleObjectData);
                }
                catch (Exception e)
                {
                    CustomDataDeserializer.LogFailure(Plugin.Logger, e, beatmapObjectData);
                }
            }

            _noodleEventDatas = new Dictionary <CustomEventData, ICustomEventCustomData>();
            foreach (CustomEventData customEventData in eventArgs.CustomEventDatas)
            {
                try
                {
                    ICustomEventCustomData noodleEventData;

                    Dictionary <string, object?> data = customEventData.data;
                    switch (customEventData.type)
                    {
                    case ASSIGNPLAYERTOTRACK:
                        noodleEventData = new NoodlePlayerTrackEventData(GetTrack(customEventData.data, beatmapTracks) ?? throw new InvalidOperationException("Track was not defined."));
                        break;

                    case ASSIGNTRACKPARENT:
                        noodleEventData = ProcessParentTrackEvent(data, beatmapTracks);
                        break;

                    default:
                        continue;
                    }

                    _noodleEventDatas.Add(customEventData, noodleEventData);
                }
                catch (Exception e)
                {
                    CustomDataDeserializer.LogFailure(Plugin.Logger, e, customEventData);
                }
            }
        }