Skip to content

Commit

Permalink
squashed commits
Browse files Browse the repository at this point in the history
  • Loading branch information
lemz1 committed Jan 22, 2025
1 parent dfe02ec commit b7aab5a
Show file tree
Hide file tree
Showing 22 changed files with 430 additions and 809 deletions.
4 changes: 4 additions & 0 deletions source/funkin/data/DefaultRegistryImpl.hx
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
package funkin.data;

@:autoBuild(funkin.util.macro.RegistryMacro.buildRegistry())
interface DefaultRegistryImpl {}
6 changes: 5 additions & 1 deletion source/funkin/data/IRegistryEntry.hx
Original file line number Diff line number Diff line change
@@ -1,11 +1,15 @@
package funkin.data;

@:autoBuild(funkin.util.macro.RegistryMacro.buildEntry())
interface DefaultEntryImpl {}

/**
* An interface defining the necessary functions for a registry entry.
* A `String->Void` constructor is also mandatory, but enforced elsewhere.
* @param T The JSON data type of the registry entry.
*/
interface IRegistryEntry<T>
@:funkinBase
interface IRegistryEntry<T> extends DefaultEntryImpl
{
public final id:String;

Expand Down
69 changes: 2 additions & 67 deletions source/funkin/data/dialogue/conversation/ConversationRegistry.hx
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,9 @@ package funkin.data.dialogue.conversation;

import funkin.play.cutscene.dialogue.Conversation;
import funkin.play.cutscene.dialogue.ScriptedConversation;
import funkin.data.DefaultRegistryImpl;

class ConversationRegistry extends BaseRegistry<Conversation, ConversationData>
class ConversationRegistry extends BaseRegistry<Conversation, ConversationData> implements DefaultRegistryImpl
{
/**
* The current version string for the dialogue box data format.
Expand All @@ -14,74 +15,8 @@ class ConversationRegistry extends BaseRegistry<Conversation, ConversationData>

public static final CONVERSATION_DATA_VERSION_RULE:thx.semver.VersionRule = "1.0.x";

public static var instance(get, never):ConversationRegistry;
static var _instance:Null<ConversationRegistry> = null;

static function get_instance():ConversationRegistry
{
if (_instance == null) _instance = new ConversationRegistry();
return _instance;
}

public function new()
{
super('CONVERSATION', 'dialogue/conversations', CONVERSATION_DATA_VERSION_RULE);
}

/**
* Read, parse, and validate the JSON data and produce the corresponding data object.
*/
public function parseEntryData(id:String):Null<ConversationData>
{
// JsonParser does not take type parameters,
// otherwise this function would be in BaseRegistry.
var parser = new json2object.JsonParser<ConversationData>();
parser.ignoreUnknownVariables = false;

switch (loadEntryFile(id))
{
case {fileName: fileName, contents: contents}:
parser.fromJson(contents, fileName);
default:
return null;
}

if (parser.errors.length > 0)
{
printErrors(parser.errors, id);
return null;
}
return parser.value;
}

/**
* Parse and validate the JSON data and produce the corresponding data object.
*
* NOTE: Must be implemented on the implementation class.
* @param contents The JSON as a string.
* @param fileName An optional file name for error reporting.
*/
public function parseEntryDataRaw(contents:String, ?fileName:String):Null<ConversationData>
{
var parser = new json2object.JsonParser<ConversationData>();
parser.ignoreUnknownVariables = false;
parser.fromJson(contents, fileName);

if (parser.errors.length > 0)
{
printErrors(parser.errors, fileName);
return null;
}
return parser.value;
}

function createScriptedEntry(clsName:String):Conversation
{
return ScriptedConversation.init(clsName, "unknown");
}

function getScriptedClassNames():Array<String>
{
return ScriptedConversation.listScriptClasses();
}
}
69 changes: 2 additions & 67 deletions source/funkin/data/dialogue/dialoguebox/DialogueBoxRegistry.hx
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,9 @@ package funkin.data.dialogue.dialoguebox;
import funkin.play.cutscene.dialogue.DialogueBox;
import funkin.data.dialogue.dialoguebox.DialogueBoxData;
import funkin.play.cutscene.dialogue.ScriptedDialogueBox;
import funkin.data.DefaultRegistryImpl;

class DialogueBoxRegistry extends BaseRegistry<DialogueBox, DialogueBoxData>
class DialogueBoxRegistry extends BaseRegistry<DialogueBox, DialogueBoxData> implements DefaultRegistryImpl
{
/**
* The current version string for the dialogue box data format.
Expand All @@ -15,74 +16,8 @@ class DialogueBoxRegistry extends BaseRegistry<DialogueBox, DialogueBoxData>

public static final DIALOGUEBOX_DATA_VERSION_RULE:thx.semver.VersionRule = "1.1.x";

public static var instance(get, never):DialogueBoxRegistry;
static var _instance:Null<DialogueBoxRegistry> = null;

static function get_instance():DialogueBoxRegistry
{
if (_instance == null) _instance = new DialogueBoxRegistry();
return _instance;
}

public function new()
{
super('DIALOGUEBOX', 'dialogue/boxes', DIALOGUEBOX_DATA_VERSION_RULE);
}

/**
* Read, parse, and validate the JSON data and produce the corresponding data object.
*/
public function parseEntryData(id:String):Null<DialogueBoxData>
{
// JsonParser does not take type parameters,
// otherwise this function would be in BaseRegistry.
var parser = new json2object.JsonParser<DialogueBoxData>();
parser.ignoreUnknownVariables = false;

switch (loadEntryFile(id))
{
case {fileName: fileName, contents: contents}:
parser.fromJson(contents, fileName);
default:
return null;
}

if (parser.errors.length > 0)
{
printErrors(parser.errors, id);
return null;
}
return parser.value;
}

/**
* Parse and validate the JSON data and produce the corresponding data object.
*
* NOTE: Must be implemented on the implementation class.
* @param contents The JSON as a string.
* @param fileName An optional file name for error reporting.
*/
public function parseEntryDataRaw(contents:String, ?fileName:String):Null<DialogueBoxData>
{
var parser = new json2object.JsonParser<DialogueBoxData>();
parser.ignoreUnknownVariables = false;
parser.fromJson(contents, fileName);

if (parser.errors.length > 0)
{
printErrors(parser.errors, fileName);
return null;
}
return parser.value;
}

function createScriptedEntry(clsName:String):DialogueBox
{
return ScriptedDialogueBox.init(clsName, "unknown");
}

function getScriptedClassNames():Array<String>
{
return ScriptedDialogueBox.listScriptClasses();
}
}
69 changes: 2 additions & 67 deletions source/funkin/data/dialogue/speaker/SpeakerRegistry.hx
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,9 @@ package funkin.data.dialogue.speaker;
import funkin.play.cutscene.dialogue.Speaker;
import funkin.data.dialogue.speaker.SpeakerData;
import funkin.play.cutscene.dialogue.ScriptedSpeaker;
import funkin.data.DefaultRegistryImpl;

class SpeakerRegistry extends BaseRegistry<Speaker, SpeakerData>
class SpeakerRegistry extends BaseRegistry<Speaker, SpeakerData> implements DefaultRegistryImpl
{
/**
* The current version string for the speaker data format.
Expand All @@ -15,74 +16,8 @@ class SpeakerRegistry extends BaseRegistry<Speaker, SpeakerData>

public static final SPEAKER_DATA_VERSION_RULE:thx.semver.VersionRule = "1.0.x";

public static var instance(get, never):SpeakerRegistry;
static var _instance:Null<SpeakerRegistry> = null;

static function get_instance():SpeakerRegistry
{
if (_instance == null) _instance = new SpeakerRegistry();
return _instance;
}

public function new()
{
super('SPEAKER', 'dialogue/speakers', SPEAKER_DATA_VERSION_RULE);
}

/**
* Read, parse, and validate the JSON data and produce the corresponding data object.
*/
public function parseEntryData(id:String):Null<SpeakerData>
{
// JsonParser does not take type parameters,
// otherwise this function would be in BaseRegistry.
var parser = new json2object.JsonParser<SpeakerData>();
parser.ignoreUnknownVariables = false;

switch (loadEntryFile(id))
{
case {fileName: fileName, contents: contents}:
parser.fromJson(contents, fileName);
default:
return null;
}

if (parser.errors.length > 0)
{
printErrors(parser.errors, id);
return null;
}
return parser.value;
}

/**
* Parse and validate the JSON data and produce the corresponding data object.
*
* NOTE: Must be implemented on the implementation class.
* @param contents The JSON as a string.
* @param fileName An optional file name for error reporting.
*/
public function parseEntryDataRaw(contents:String, ?fileName:String):Null<SpeakerData>
{
var parser = new json2object.JsonParser<SpeakerData>();
parser.ignoreUnknownVariables = false;
parser.fromJson(contents, fileName);

if (parser.errors.length > 0)
{
printErrors(parser.errors, fileName);
return null;
}
return parser.value;
}

function createScriptedEntry(clsName:String):Speaker
{
return ScriptedSpeaker.init(clsName, "unknown");
}

function getScriptedClassNames():Array<String>
{
return ScriptedSpeaker.listScriptClasses();
}
}
65 changes: 2 additions & 63 deletions source/funkin/data/freeplay/album/AlbumRegistry.hx
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,9 @@ package funkin.data.freeplay.album;
import funkin.ui.freeplay.Album;
import funkin.data.freeplay.album.AlbumData;
import funkin.ui.freeplay.ScriptedAlbum;
import funkin.data.DefaultRegistryImpl;

class AlbumRegistry extends BaseRegistry<Album, AlbumData>
class AlbumRegistry extends BaseRegistry<Album, AlbumData> implements DefaultRegistryImpl
{
/**
* The current version string for the album data format.
Expand All @@ -15,70 +16,8 @@ class AlbumRegistry extends BaseRegistry<Album, AlbumData>

public static final ALBUM_DATA_VERSION_RULE:thx.semver.VersionRule = '1.0.x';

public static final instance:AlbumRegistry = new AlbumRegistry();

public function new()
{
super('ALBUM', 'ui/freeplay/albums', ALBUM_DATA_VERSION_RULE);
}

/**
* Read, parse, and validate the JSON data and produce the corresponding data object.
* @param id The ID of the entry to load.
* @return The parsed data object.
*/
public function parseEntryData(id:String):Null<AlbumData>
{
// JsonParser does not take type parameters,
// otherwise this function would be in BaseRegistry.
var parser:json2object.JsonParser<AlbumData> = new json2object.JsonParser<AlbumData>();
parser.ignoreUnknownVariables = false;

switch (loadEntryFile(id))
{
case {fileName: fileName, contents: contents}:
parser.fromJson(contents, fileName);
default:
return null;
}

if (parser.errors.length > 0)
{
printErrors(parser.errors, id);
return null;
}
return parser.value;
}

/**
* Parse and validate the JSON data and produce the corresponding data object.
*
* NOTE: Must be implemented on the implementation class.
* @param contents The JSON as a string.
* @param fileName An optional file name for error reporting.
* @return The parsed data object.
*/
public function parseEntryDataRaw(contents:String, ?fileName:String):Null<AlbumData>
{
var parser:json2object.JsonParser<AlbumData> = new json2object.JsonParser<AlbumData>();
parser.ignoreUnknownVariables = false;
parser.fromJson(contents, fileName);

if (parser.errors.length > 0)
{
printErrors(parser.errors, fileName);
return null;
}
return parser.value;
}

function createScriptedEntry(clsName:String):Album
{
return ScriptedAlbum.init(clsName, 'unknown');
}

function getScriptedClassNames():Array<String>
{
return ScriptedAlbum.listScriptClasses();
}
}
Loading

0 comments on commit b7aab5a

Please sign in to comment.