diff options
author | Benjamin Otte <otte@redhat.com> | 2011-10-16 19:15:20 -0700 |
---|---|---|
committer | Benjamin Otte <otte@redhat.com> | 2011-10-16 22:32:55 -0700 |
commit | 29daf412d442f98c64d3e26313f5f7c157691f81 (patch) | |
tree | bd82309632e4064604d449b5585c49efe6d4e0aa | |
parent | 329d4dd598133f7b133be108417ddba6db13825a (diff) |
bomber: Rewrite to make use of resources
-rw-r--r-- | games/bomber/Makefile.am | 1 | ||||
-rw-r--r-- | games/bomber/bomber-bomb.c | 3 | ||||
-rw-r--r-- | games/bomber/bomber-bomber.c | 27 | ||||
-rw-r--r-- | games/bomber/bomber-explosion.c | 3 | ||||
-rw-r--r-- | games/bomber/bomber-item.c | 3 | ||||
-rw-r--r-- | games/bomber/bomber.resources | 255 | ||||
-rw-r--r-- | games/bomber/main.c | 115 |
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; } |