summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBenjamin Otte <otte@redhat.com>2011-10-16 19:15:20 -0700
committerBenjamin Otte <otte@redhat.com>2011-10-16 22:32:55 -0700
commit29daf412d442f98c64d3e26313f5f7c157691f81 (patch)
treebd82309632e4064604d449b5585c49efe6d4e0aa
parent329d4dd598133f7b133be108417ddba6db13825a (diff)
bomber: Rewrite to make use of resources
-rw-r--r--games/bomber/Makefile.am1
-rw-r--r--games/bomber/bomber-bomb.c3
-rw-r--r--games/bomber/bomber-bomber.c27
-rw-r--r--games/bomber/bomber-explosion.c3
-rw-r--r--games/bomber/bomber-item.c3
-rw-r--r--games/bomber/bomber.resources255
-rw-r--r--games/bomber/main.c115
7 files changed, 286 insertions, 121 deletions
diff --git a/games/bomber/Makefile.am b/games/bomber/Makefile.am
index 78be0f5..a3cb11b 100644
--- a/games/bomber/Makefile.am
+++ b/games/bomber/Makefile.am
@@ -41,6 +41,7 @@ bomberdata_DATA = \
bomb14.png \
bomb15.png \
bomb16.png \
+ bomber.resources \
bomber-down0.png \
bomber-down1.png \
bomber-down2.png \
diff --git a/games/bomber/bomber-bomb.c b/games/bomber/bomber-bomb.c
index d22bbbb..3c429d1 100644
--- a/games/bomber/bomber-bomb.c
+++ b/games/bomber/bomber-bomb.c
@@ -258,8 +258,7 @@ bomber_bomb_new (BomberBomber *bomber)
g_return_if_fail (BOMBER_IS_BOMBER (bomber));
- graphic = game_object_copy (game_game_get_object (
- GAME_OBJECT (bomber)->game, "bomb"));
+ graphic = game_game_spawn_object (GAME_OBJECT (bomber)->game, "bomb");
game_board_add_sprite (GAME_SPRITE (bomber)->board, BOMBER_TYPE_BOMB,
"owner", bomber, "position", &nowhere, "graphic", graphic,
"speed", BOMBER_BOMB_SPEED, NULL);
diff --git a/games/bomber/bomber-bomber.c b/games/bomber/bomber-bomber.c
index 437b04e..e972cf0 100644
--- a/games/bomber/bomber-bomber.c
+++ b/games/bomber/bomber-bomber.c
@@ -109,11 +109,11 @@ bomber_bomber_notify (GObject *object, GParamSpec *pspec)
if (direction != GAME_DIRECTION_NONE) {
char *name = g_strdup_printf ("skel-%s",
game_direction_to_string (direction));
- GameGraphic *graphic = GAME_GRAPHIC (game_game_get_object (
+ GameGraphic *graphic = GAME_GRAPHIC (game_game_spawn_object (
GAME_OBJECT (bomber)->game, name));
g_free (name);
- if (GAME_SPRITE (object)->graphic != graphic)
- g_object_set (object, "graphic", graphic, NULL);
+ g_object_set (object, "graphic", graphic, NULL);
+ g_object_unref (graphic);
}
} else {
if (direction == GAME_DIRECTION_NONE) {
@@ -171,13 +171,26 @@ bomber_bomber_game_set (GameObject *object)
BomberBomber *bomber = BOMBER_BOMBER (object);
GameGame *game = object->game;
guint i;
+ GameGraphic *base, *mask;
+ char *s;
for (i = 1; i < 5; i++) {
- bomber->graphics[i] = GAME_GRAPHIC (game_object_copy (
- game_game_get_object (game, game_direction_to_string (i))));
+ s = g_strconcat ("bomber-", game_direction_to_string (i), NULL);
+ base = GAME_GRAPHIC (game_game_spawn_object (game, s));
+ g_object_set (base, "animate", FALSE, NULL);
+ g_free (s);
+ s = g_strconcat ("bomber-", game_direction_to_string (i), "-overlay", NULL);
+ mask = GAME_GRAPHIC (game_game_spawn_object (game, s));
+ g_object_set (mask, "animate", FALSE, NULL);
+ g_free (s);
+ bomber->graphics[i] = GAME_GRAPHIC (game_game_add_object (game, GAME_TYPE_COLORED,
+ "x", base->rect.x1, "y", base->rect.y1,
+ "width", base->rect.x2 - base->rect.x1,
+ "height", base->rect.y2 - base->rect.y1,
+ "base", base, "mask", mask, NULL));
g_assert (bomber->graphics[i]);
- g_object_set (GAME_COLORED (bomber->graphics[i])->base, "animate", FALSE, NULL);
- g_object_set (GAME_COLORED (bomber->graphics[i])->mask, "animate", FALSE, NULL);
+ g_object_unref (base);
+ g_object_unref (mask);
}
g_object_set (bomber, "graphic", bomber->graphics[GAME_DIRECTION_RIGHT], NULL);
diff --git a/games/bomber/bomber-explosion.c b/games/bomber/bomber-explosion.c
index 7c0e4a7..7100c9d 100644
--- a/games/bomber/bomber-explosion.c
+++ b/games/bomber/bomber-explosion.c
@@ -50,9 +50,10 @@ bomber_explosion_update_graphic (BomberExplosion *explode)
}
name = g_strdup_printf ("explosion%d", id);
- graphic = game_game_get_object (GAME_OBJECT (explode)->game, name);
+ graphic = game_game_spawn_object (GAME_OBJECT (explode)->game, name);
g_free (name);
g_object_set (explode, "graphic", graphic, NULL);
+ g_object_unref (graphic);
}
void
diff --git a/games/bomber/bomber-item.c b/games/bomber/bomber-item.c
index b6c128c..0edc4db 100644
--- a/games/bomber/bomber-item.c
+++ b/games/bomber/bomber-item.c
@@ -56,8 +56,9 @@ bomber_item_set_graphic (BomberItem *item)
"item-kick", "item-remote" };
GameObject *graphic;
- graphic = game_game_get_object (GAME_OBJECT (item)->game, names[item->type]);
+ graphic = game_game_spawn_object (GAME_OBJECT (item)->game, names[item->type]);
g_object_set (item, "graphic", graphic, NULL);
+ g_object_unref (graphic);
}
static void
diff --git a/games/bomber/bomber.resources b/games/bomber/bomber.resources
new file mode 100644
index 0000000..df9075a
--- /dev/null
+++ b/games/bomber/bomber.resources
@@ -0,0 +1,255 @@
+@a{sv}
+ {
+ "bomb":
+ < ("GameAnimationResource",
+ -0.16666666666, 0.0, 1.3333333333, 1.0,
+ [ < ("GameFileResource", "bomb00.png") >,
+ < ("GameFileResource", "bomb01.png") >,
+ < ("GameFileResource", "bomb02.png") >,
+ < ("GameFileResource", "bomb03.png") >,
+ < ("GameFileResource", "bomb04.png") >,
+ < ("GameFileResource", "bomb05.png") >,
+ < ("GameFileResource", "bomb06.png") >,
+ < ("GameFileResource", "bomb07.png") >,
+ < ("GameFileResource", "bomb08.png") >,
+ < ("GameFileResource", "bomb09.png") >,
+ < ("GameFileResource", "bomb10.png") >,
+ < ("GameFileResource", "bomb11.png") >,
+ < ("GameFileResource", "bomb12.png") >,
+ < ("GameFileResource", "bomb13.png") >,
+ < ("GameFileResource", "bomb14.png") >,
+ < ("GameFileResource", "bomb15.png") >,
+ < ("GameFileResource", "bomb16.png") >
+ ]
+ ) >
+ ,
+ "bomber-left":
+ < ( "GameAnimationResource",
+ -0.3, -0.9, 1.6, 1.8,
+ [ < ("GameFileResource", "bomber-left0.png") >,
+ < ("GameFileResource", "bomber-left1.png") >,
+ < ("GameFileResource", "bomber-left2.png") >,
+ < ("GameFileResource", "bomber-left3.png") >
+ ]
+ ) >
+ ,
+ "bomber-left-overlay":
+ < ( "GameAnimationResource",
+ -0.3, -0.9, 1.6, 1.8,
+ [ < ("GameFileResource", "bomber-left0-overlay.png") >,
+ < ("GameFileResource", "bomber-left1-overlay.png") >,
+ < ("GameFileResource", "bomber-left2-overlay.png") >,
+ < ("GameFileResource", "bomber-left3-overlay.png") >
+ ]
+ ) >
+ ,
+ "bomber-right":
+ < ( "GameAnimationResource",
+ -0.3, -0.9, 1.6, 1.8,
+ [ < ("GameFileResource", "bomber-right0.png") >,
+ < ("GameFileResource", "bomber-right1.png") >,
+ < ("GameFileResource", "bomber-right2.png") >,
+ < ("GameFileResource", "bomber-right3.png") >
+ ]
+ ) >
+ ,
+ "bomber-right-overlay":
+ < ( "GameAnimationResource",
+ -0.3, -0.9, 1.6, 1.8,
+ [ < ("GameFileResource", "bomber-right0-overlay.png") >,
+ < ("GameFileResource", "bomber-right1-overlay.png") >,
+ < ("GameFileResource", "bomber-right2-overlay.png") >,
+ < ("GameFileResource", "bomber-right3-overlay.png") >
+ ]
+ ) >
+ ,
+ "bomber-up":
+ < ( "GameAnimationResource",
+ -0.3, -0.9, 1.6, 1.8,
+ [ < ("GameFileResource", "bomber-up0.png") >,
+ < ("GameFileResource", "bomber-up1.png") >,
+ < ("GameFileResource", "bomber-up2.png") >,
+ < ("GameFileResource", "bomber-up3.png") >
+ ]
+ ) >
+ ,
+ "bomber-up-overlay":
+ < ( "GameAnimationResource",
+ -0.3, -0.9, 1.6, 1.8,
+ [ < ("GameFileResource", "bomber-up0-overlay.png") >,
+ < ("GameFileResource", "bomber-up1-overlay.png") >,
+ < ("GameFileResource", "bomber-up2-overlay.png") >,
+ < ("GameFileResource", "bomber-up3-overlay.png") >
+ ]
+ ) >
+ ,
+ "bomber-down":
+ < ( "GameAnimationResource",
+ -0.3, -0.9, 1.6, 1.8,
+ [ < ("GameFileResource", "bomber-down0.png") >,
+ < ("GameFileResource", "bomber-down1.png") >,
+ < ("GameFileResource", "bomber-down2.png") >,
+ < ("GameFileResource", "bomber-down3.png") >
+ ]
+ ) >
+ ,
+ "bomber-down-overlay":
+ < ( "GameAnimationResource",
+ -0.3, -0.9, 1.6, 1.8,
+ [ < ("GameFileResource", "bomber-down0-overlay.png") >,
+ < ("GameFileResource", "bomber-down1-overlay.png") >,
+ < ("GameFileResource", "bomber-down2-overlay.png") >,
+ < ("GameFileResource", "bomber-down3-overlay.png") >
+ ]
+ ) >
+ ,
+ "item-bomb":
+ < ( "GameImageResource",
+ 0.0, 0.0, 1.0, 1.0,
+ < ("GameFileResource", "item-bomb.png") >
+ ) >
+ ,
+ "item-kick":
+ < ( "GameImageResource",
+ 0.0, 0.0, 1.0, 1.0,
+ < ("GameFileResource", "item-kick.png") >
+ ) >
+ ,
+ "item-range":
+ < ( "GameImageResource",
+ 0.0, 0.0, 1.0, 1.0,
+ < ("GameFileResource", "item-range.png") >
+ ) >
+ ,
+ "item-remote":
+ < ( "GameImageResource",
+ 0.0, 0.0, 1.0, 1.0,
+ < ("GameFileResource", "item-remote.png") >
+ ) >
+ ,
+ "item-speed":
+ < ( "GameImageResource",
+ 0.0, 0.0, 1.0, 1.0,
+ < ("GameFileResource", "item-speed.png") >
+ ) >
+ ,
+ "skel-left":
+ < ( "GameImageResource",
+ -0.3, -0.9, 1.6, 1.8,
+ < ("GameFileResource", "skel-left.png") >
+ ) >
+ ,
+ "skel-right":
+ < ( "GameImageResource",
+ -0.3, -0.9, 1.6, 1.8,
+ < ("GameFileResource", "skel-right.png") >
+ ) >
+ ,
+ "skel-up":
+ < ( "GameImageResource",
+ -0.3, -0.9, 1.6, 1.8,
+ < ("GameFileResource", "skel-up.png") >
+ ) >
+ ,
+ "skel-down":
+ < ( "GameImageResource",
+ -0.3, -0.9, 1.6, 1.8,
+ < ("GameFileResource", "skel-down.png") >
+ ) >
+ ,
+ "explosion0":
+ < ( "GameImageResource",
+ 0.0, 0.0, 1.0, 1.0,
+ < ("GameFileResource", "explosion0.png") >
+ ) >
+ ,
+ "explosion1":
+ < ( "GameImageResource",
+ 0.0, 0.0, 1.0, 1.0,
+ < ("GameFileResource", "explosion1.png") >
+ ) >
+ ,
+ "explosion2":
+ < ( "GameImageResource",
+ 0.0, 0.0, 1.0, 1.0,
+ < ("GameFileResource", "explosion2.png") >
+ ) >
+ ,
+ "explosion3":
+ < ( "GameImageResource",
+ 0.0, 0.0, 1.0, 1.0,
+ < ("GameFileResource", "explosion3.png") >
+ ) >
+ ,
+ "explosion4":
+ < ( "GameImageResource",
+ 0.0, 0.0, 1.0, 1.0,
+ < ("GameFileResource", "explosion4.png") >
+ ) >
+ ,
+ "explosion5":
+ < ( "GameImageResource",
+ 0.0, 0.0, 1.0, 1.0,
+ < ("GameFileResource", "explosion5.png") >
+ ) >
+ ,
+ "explosion6":
+ < ( "GameImageResource",
+ 0.0, 0.0, 1.0, 1.0,
+ < ("GameFileResource", "explosion6.png") >
+ ) >
+ ,
+ "explosion7":
+ < ( "GameImageResource",
+ 0.0, 0.0, 1.0, 1.0,
+ < ("GameFileResource", "explosion7.png") >
+ ) >
+ ,
+ "explosion8":
+ < ( "GameImageResource",
+ 0.0, 0.0, 1.0, 1.0,
+ < ("GameFileResource", "explosion8.png") >
+ ) >
+ ,
+ "explosion9":
+ < ( "GameImageResource",
+ 0.0, 0.0, 1.0, 1.0,
+ < ("GameFileResource", "explosion9.png") >
+ ) >
+ ,
+ "explosion10":
+ < ( "GameImageResource",
+ 0.0, 0.0, 1.0, 1.0,
+ < ("GameFileResource", "explosion10.png") >
+ ) >
+ ,
+ "explosion11":
+ < ( "GameImageResource",
+ 0.0, 0.0, 1.0, 1.0,
+ < ("GameFileResource", "explosion11.png") >
+ ) >
+ ,
+ "explosion12":
+ < ( "GameImageResource",
+ 0.0, 0.0, 1.0, 1.0,
+ < ("GameFileResource", "explosion12.png") >
+ ) >
+ ,
+ "explosion13":
+ < ( "GameImageResource",
+ 0.0, 0.0, 1.0, 1.0,
+ < ("GameFileResource", "explosion13.png") >
+ ) >
+ ,
+ "explosion14":
+ < ( "GameImageResource",
+ 0.0, 0.0, 1.0, 1.0,
+ < ("GameFileResource", "explosion14.png") >
+ ) >
+ ,
+ "explosion15":
+ < ( "GameImageResource",
+ 0.0, 0.0, 1.0, 1.0,
+ < ("GameFileResource", "explosion15.png") >
+ ) >
+ }
diff --git a/games/bomber/main.c b/games/bomber/main.c
index aca55f1..20d2a66 100644
--- a/games/bomber/main.c
+++ b/games/bomber/main.c
@@ -40,115 +40,11 @@ static const GameInfoScore scores[] = {
static const GameRectangle BOMBER_SIZE = { -0.3, -0.9, 1.3, 0.9 };
-static gboolean
-load_images (GameGame *game, GError **error)
-{
- static const struct {
- const char *name;
- const GameRectangle *size;
- } images[] = {
- { "item-bomb", NULL },
- { "item-kick", NULL },
- { "item-range", NULL },
- { "item-remote", NULL },
- { "item-speed", NULL },
- { "skel-left", &BOMBER_SIZE },
- { "skel-right", &BOMBER_SIZE },
- { "skel-up", &BOMBER_SIZE },
- { "skel-down", &BOMBER_SIZE }
- };
- char *file;
- guint i;
- GameGraphic *image;
-
- for (i = 0; i < G_N_ELEMENTS (images); i++) {
- file = g_strdup_printf ("%s.png", images[i].name);
- image = game_image_new_from_file (game, file, images[i].size, error);
- g_free (file);
- if (!image)
- return FALSE;
- g_object_set (image, "name", images[i].name, NULL);
- g_object_unref (image);
- }
- return TRUE;
-}
-
-static gboolean
-load_explosions (GameGame *game, GError **error)
-{
- int i;
- char *name, *file;
- GameGraphic *image;
-
- for (i = 0; i < 16; i++) {
- file = g_strdup_printf ("explosion%d.png", i);
- image = game_image_new_from_file (game, file, NULL, error);
- g_free (file);
- if (!image)
- return FALSE;
- name = g_strdup_printf ("explosion%d", i);
- g_object_set (image, "name", name, NULL);
- g_object_unref (image);
- }
- return TRUE;
-}
-
-static gboolean
-load_graphics (GameGame *game, GError **error)
-{
- static const struct {
- char *name;
- char *pattern;
- char *mask_pattern;
- guint duration;
- GameRectangle size;
- } animations[] = {
- { "left", "bomber-left?.png", "bomber-left?-overlay.png", 100, { -0.3, -0.9, 1.3, 0.9 } },
- { "right", "bomber-right?.png", "bomber-right?-overlay.png", 100, { -0.3, -0.9, 1.3, 0.9 } },
- { "up", "bomber-up?.png", "bomber-up?-overlay.png", 100, { -0.3, -0.9, 1.3, 0.9 } },
- { "down", "bomber-down?.png", "bomber-down?-overlay.png", 100, { -0.3, -0.9, 1.3, 0.9 } },
- { "bomb", "bomb??.png", NULL, BOMBER_BOMB_COUNTDOWN_TIME / 17 + 1, { - 1.0 / 6, 0.0, 7.0 / 6, 1.0 } },
- };
- guint i;
- GameGraphic *base, *mask;
- GameObject *object;
-
- if (!load_explosions (game, error) ||
- !load_images (game, error))
- return FALSE;
-
- for (i = 0; i < G_N_ELEMENTS (animations); i++) {
- base = game_animation_new_from_files (game, &animations[i].size,
- animations[i].pattern, error);
- if (!base)
- return FALSE;
- if (animations[i].mask_pattern) {
- mask = game_animation_new_from_files (game, &animations[i].size,
- animations[i].mask_pattern, error);
- if (!mask) {
- g_object_unref (base);
- return FALSE;
- }
- object = game_game_add_object (game, GAME_TYPE_COLORED,
- "x", animations[i].size.x1, "y", animations[i].size.y1,
- "width", animations[i].size.x2 - animations[i].size.x1,
- "height", animations[i].size.y2 - animations[i].size.y1,
- "name", animations[i].name, "base", base, "mask", mask, NULL);
- g_object_unref (mask);
- g_object_unref (object);
- } else {
- g_object_set (base, "name", animations[i].name, NULL);
- }
- g_object_unref (base);
- }
- return TRUE;
-}
-
G_MODULE_EXPORT GameGame *
new_game (GError **error)
{
GameGame *game;
- GameGraphic *grid, *port;
+ GameGraphic *grid, *port, *icon;
#ifdef ENABLE_NLS
/* initialize i18n */
@@ -157,21 +53,20 @@ new_game (GError **error)
#endif
game = game_game_new ("bomber", VERSION, keys, scores);
- if (!load_graphics (game, error)) {
- g_object_unref (game);
- return NULL;
- }
grid = GAME_GRAPHIC (bomber_grid_new (game));
port = game_viewport_new (grid, 32.0);
g_object_set (port, "permanent", TRUE, NULL);
g_object_unref (grid);
g_object_unref (port);
- g_object_set (game, "frame-rate", 25, "icon", game_game_get_object (game, "down"),
+ icon = GAME_GRAPHIC (game_game_spawn_object (game, "bomber-down"));
+ g_object_set (icon, "animate", FALSE, NULL);
+ g_object_set (game, "frame-rate", 25, "icon", icon,
"max-players", BOMBER_MAX_PLAYERS, "nick", N_("Bomber"),
"description", N_("Drop bombs and eradicate other bombers"),
"viewport", port,
"translation-domain", GETTEXT_PACKAGE, NULL);
+ g_object_unref (icon);
return game;
}