11#pragma once
2-
32#include < Geode/Geode.hpp>
43enum EventType {
54 Rate,
@@ -13,17 +12,101 @@ enum EventType {
1312};
1413
1514struct EventData {
16- bool demon;
17- uint8_t starsum;
18- uint8_t stars;
19- uint8_t rate;
20- EventType type;
15+ bool demon = false ;
16+ uint16_t starsum = 0 ;
17+ uint16_t stars = 0 ;
18+ uint16_t rate = 0 ;
19+ EventType type = EventType::Rate ;
2120 std::string title;
22- std::string sprite;
21+ std::string sprite = " GJ_square01.png " ;
2322 std::string level_name;
2423 std::string level_creator;
25- uint8_t coins;
26- bool verified_coins;
27- bool platformer;
24+ uint8_t coins = 0 ;
25+ bool verified_coins = false ;
26+ bool platformer = false ;
2827 int level_id = -1 ;
28+ std::string levels_list;
29+ int maxToCompleteList = 0 ;
30+ };
31+
32+ template <>
33+ struct matjson ::Serialize<EventData> {
34+ static geode::Result<EventData> fromJson (matjson::Value const & value) {
35+ EventData data;
36+ if (value.contains (" demon" )) {
37+ if (value[" demon" ].asInt ().isErr ()) {
38+ GEODE_UNWRAP_INTO (data.demon , value[" demon" ].asBool ());
39+ } else {
40+ GEODE_UNWRAP_INTO (auto demon, value[" demon" ].asInt ());
41+ data.demon = demon == 1 ;
42+ }
43+ }
44+ GEODE_UNWRAP_INTO (data.starsum , value[" starsum" ].asUInt ());
45+ GEODE_UNWRAP_INTO (data.stars , value[" stars" ].asUInt ());
46+ GEODE_UNWRAP_INTO (data.rate , value[" rate" ].asUInt ());
47+ GEODE_UNWRAP_INTO (auto type, value[" type" ].asUInt ());
48+ // yeahhhh im getting linker errors ok
49+ switch (type) {
50+ default :
51+ data.type = EventType::NA;
52+ break ;
53+ case 0 : // Rate
54+ data.type = EventType::Rate;
55+ break ;
56+ case 1 : // Daily
57+ data.type = EventType::Daily;
58+ break ;
59+ case 2 : // Weekly
60+ data.type = EventType::Weekly;
61+ break ;
62+ case 3 : // Small chest
63+ data.type = EventType::smallChest;
64+ break ;
65+ case 4 : // Large chest
66+ data.type = EventType::largeChest;
67+ break ;
68+ case 5 : // List
69+ data.type = EventType::List;
70+ break ;
71+ case 6 : // Event
72+ data.type = EventType::Event;
73+ break ;
74+ }
75+ GEODE_UNWRAP_INTO (data.title , value[" title" ].asString ());
76+ GEODE_UNWRAP_INTO (data.sprite , value[" sprite" ].asString ());
77+ GEODE_UNWRAP_INTO (data.level_name , value[" level_name" ].asString ());
78+ GEODE_UNWRAP_INTO (data.level_creator , value[" level_creator" ].asString ());
79+ GEODE_UNWRAP_INTO (data.rate , value[" rate" ].asUInt ());
80+ if (value.contains (" verified_coins" )) {
81+ if (value[" verified_coins" ].asInt ().isErr ()) {
82+ GEODE_UNWRAP_INTO (data.verified_coins , value[" verified_coins" ].asBool ());
83+ } else {
84+ GEODE_UNWRAP_INTO (auto verified_coins, value[" verified_coins" ].asInt ());
85+ data.verified_coins = verified_coins == 1 ;
86+ }
87+ }
88+ if (value.contains (" platformer" )) {
89+ if (value[" platformer" ].asInt ().isErr ()) {
90+ GEODE_UNWRAP_INTO (data.platformer , value[" platformer" ].asBool ());
91+ } else {
92+ GEODE_UNWRAP_INTO (auto platformer, value[" platformer" ].asInt ());
93+ data.platformer = platformer == 1 ;
94+ }
95+ }
96+ if (value.contains (" level_id" )) {
97+ if (value[" level_id" ].asString ().isErr ()) {
98+ GEODE_UNWRAP_INTO (data.level_id , value[" level_id" ].asInt ());
99+ } else {
100+ GEODE_UNWRAP_INTO (auto level_id, value[" level_id" ].asString ());
101+ data.level_id = geode::utils::numFromString<int >(level_id).unwrapOrDefault ();
102+ }
103+ }
104+ if (value.contains (" levels_list" )) {
105+ GEODE_UNWRAP_INTO (data.levels_list , value[" levels_list" ].asString ());
106+ }
107+ if (value.contains (" maxToCompleteList" )) {
108+ GEODE_UNWRAP_INTO (data.maxToCompleteList , value[" maxToCompleteList" ].asInt ());
109+ }
110+ return geode::Ok (data);
111+ }
29112};
0 commit comments