[gnome-games/wip/exalm/n64: 9/10] Introduce Nintendo 64 plugin
- From: Alexander Mikhaylenko <alexm src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-games/wip/exalm/n64: 9/10] Introduce Nintendo 64 plugin
- Date: Tue, 3 Mar 2020 12:40:08 +0000 (UTC)
commit 97feaffb900224f64095207cc7aa8a89a2a4f983
Author: Alexander Mikhaylenko <alexm gnome org>
Date: Sun Feb 2 04:06:34 2020 +0500
Introduce Nintendo 64 plugin
Replace simple type with a plugin. This will be needed to support switching
expansion paks in the following commits.
meson_options.txt | 1 +
plugins/meson.build | 1 +
plugins/nintendo-64/data/meson.build | 1 +
plugins/nintendo-64/data/nintendo-64.plugin | 6 +++
plugins/nintendo-64/meson.build | 2 +
plugins/nintendo-64/src/meson.build | 16 ++++++
plugins/nintendo-64/src/nintendo-64-plugin.vala | 68 +++++++++++++++++++++++++
src/retro/retro-simple-types.vala | 1 -
8 files changed, 95 insertions(+), 1 deletion(-)
---
diff --git a/meson_options.txt b/meson_options.txt
index 1a9844fd..fa589741 100644
--- a/meson_options.txt
+++ b/meson_options.txt
@@ -17,6 +17,7 @@ option ('libretro-plugin', description: 'Support for Libretro games',
option ('love-plugin', description: 'Support for LÖVE games', type: 'boolean')
option ('mame-plugin', description: 'Support for MAME games', type: 'boolean')
option ('ms-dos-plugin', description: 'Support for MS-DOS games', type: 'boolean')
+option ('nintendo-64-plugin', description: 'Support for Nintendo 64 games', type: 'boolean')
option ('nintendo-ds-plugin', description: 'Support for Nintendo DS games', type: 'boolean')
option ('playstation-plugin', description: 'Support for PlayStation games', type: 'boolean')
option ('sega-cd-plugin', description: 'Support for Sega CD games', type: 'boolean')
diff --git a/plugins/meson.build b/plugins/meson.build
index 3fe8b172..f15025bb 100644
--- a/plugins/meson.build
+++ b/plugins/meson.build
@@ -6,6 +6,7 @@ plugins = [
'love',
'mame',
'ms-dos',
+ 'nintendo-64',
'nintendo-ds',
'playstation',
'sega-cd',
diff --git a/plugins/nintendo-64/data/meson.build b/plugins/nintendo-64/data/meson.build
new file mode 100644
index 00000000..0d4b6c49
--- /dev/null
+++ b/plugins/nintendo-64/data/meson.build
@@ -0,0 +1 @@
+install_data (plugin_name + '.plugin', install_dir: plugins_dir)
diff --git a/plugins/nintendo-64/data/nintendo-64.plugin b/plugins/nintendo-64/data/nintendo-64.plugin
new file mode 100644
index 00000000..54fdeea0
--- /dev/null
+++ b/plugins/nintendo-64/data/nintendo-64.plugin
@@ -0,0 +1,6 @@
+[Plugin]
+Module=libgames-nintendo-64-plugin
+Name=Nintendo 64 Plugin
+Description=Provides support for Nintendo 64 games.
+Authors=Alexander Mikhaylenko <alexm gnome org>
+Copyright=Copyright © 2020 Alexander Mikhaylenko
diff --git a/plugins/nintendo-64/meson.build b/plugins/nintendo-64/meson.build
new file mode 100644
index 00000000..d7e84900
--- /dev/null
+++ b/plugins/nintendo-64/meson.build
@@ -0,0 +1,2 @@
+subdir ('data')
+subdir ('src')
diff --git a/plugins/nintendo-64/src/meson.build b/plugins/nintendo-64/src/meson.build
new file mode 100644
index 00000000..39b5bd24
--- /dev/null
+++ b/plugins/nintendo-64/src/meson.build
@@ -0,0 +1,16 @@
+vala_sources = [
+ 'nintendo-64-plugin.vala',
+]
+
+c_args = [
+ '-DG_LOG_DOMAIN="GamesNintendo64"'
+]
+
+shared_module (
+ 'games-' + plugin_name + '-plugin',
+ vala_sources,
+ dependencies: gnome_games_dep,
+ c_args: c_args,
+ install: true,
+ install_dir: plugins_dir
+)
diff --git a/plugins/nintendo-64/src/nintendo-64-plugin.vala b/plugins/nintendo-64/src/nintendo-64-plugin.vala
new file mode 100644
index 00000000..a06551c7
--- /dev/null
+++ b/plugins/nintendo-64/src/nintendo-64-plugin.vala
@@ -0,0 +1,68 @@
+// This file is part of GNOME Games. License: GPL-3.0+.
+
+private class Games.Nintendo64Plugin : Object, Plugin {
+ private const string MIME_TYPE = "application/x-n64-rom";
+ private const string PLATFORM_ID = "Nintendo64";
+ private const string PLATFORM_NAME = _("Nintendo 64");
+ private const string PLATFORM_UID_PREFIX = "nintendo-64";
+
+ private static RetroPlatform platform;
+
+ static construct {
+ platform = new RetroPlatform (PLATFORM_ID, PLATFORM_NAME, { MIME_TYPE }, PLATFORM_UID_PREFIX);
+ }
+
+ public Platform[] get_platforms () {
+ return { platform };
+ }
+
+ public string[] get_mime_types () {
+ return { MIME_TYPE };
+ }
+
+ public UriGameFactory[] get_uri_game_factories () {
+ var game_uri_adapter = new GenericGameUriAdapter (game_for_uri);
+ var factory = new GenericUriGameFactory (game_uri_adapter);
+ factory.add_mime_type (MIME_TYPE);
+
+ return { factory };
+ }
+
+ public RunnerFactory[] get_runner_factories () {
+ var factory = new GenericRunnerFactory (create_runner);
+ factory.add_platform (platform);
+
+ return { factory };
+ }
+
+ private static Game game_for_uri (Uri uri) throws Error {
+
+ var uid = new FingerprintUid (uri, PLATFORM_UID_PREFIX);
+ var title = new FilenameTitle (uri);
+ var media = new GriloMedia (title, MIME_TYPE);
+ var cover = new CompositeCover ({
+ new LocalCover (uri),
+ new GriloCover (media, uid)});
+
+ var game = new GenericGame (uid, uri, title, platform);
+ game.set_cover (cover);
+
+ return game;
+ }
+
+ private static Runner? create_runner (Game game) throws Error {
+ var core_source = new RetroCoreSource (platform);
+
+ var builder = new RetroRunnerBuilder ();
+ builder.core_source = core_source;
+ builder.uri = game.get_uri ();
+ builder.uid = game.get_uid ();
+ builder.title = game.name;
+ return builder.to_runner ();
+ }
+}
+
+[ModuleInit]
+public Type register_games_plugin (TypeModule module) {
+ return typeof (Games.Nintendo64Plugin);
+}
diff --git a/src/retro/retro-simple-types.vala b/src/retro/retro-simple-types.vala
index 0910f394..6fc3b0f7 100644
--- a/src/retro/retro-simple-types.vala
+++ b/src/retro/retro-simple-types.vala
@@ -15,7 +15,6 @@ namespace Games {
{ "application/x-gba-rom", true, "GameBoyAdvance", "game-boy-advance" },
{ "application/x-genesis-32x-rom", true, "Sega32X", "mega-drive-32x" },
{ "application/x-genesis-rom", true, "SegaGenesis", "mega-drive" },
- { "application/x-n64-rom", true, "Nintendo64", "nintendo-64" },
{ "application/x-neo-geo-pocket-color-rom", true, "NeoGeoPocketColor", "neo-geo-pocket" }, //
The prefix is the same as the Neo Geo Pocket type for backward compatibility.
{ "application/x-neo-geo-pocket-rom", true, "NeoGeoPocket", "neo-geo-pocket" },
{ "application/x-nes-rom", true, "NintendoEntertainmentSystem", "nes" },
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]