void gnibbles_worm_reduce_tail (GnibblesWorm *worm, gint erasesize) { gint i; gfloat x,y; ClutterActor *tmp = NULL; ClutterActor *group = clutter_group_new (); if (erasesize) { if (g_list_length (worm->list) <= erasesize) { gnibbles_worm_reset (worm); return; } for (i = 0; i < erasesize; i++) { tmp = gtk_clutter_texture_new_from_pixbuf ( worm_pixmaps[properties->wormprops[worm->number]->color - 12]); clutter_actor_get_position (CLUTTER_ACTOR (g_list_last (worm->list)->data), &x, &y); clutter_actor_set_position (CLUTTER_ACTOR (tmp), x, y); clutter_actor_set_size (CLUTTER_ACTOR (tmp), properties->tilesize, properties->tilesize); clutter_container_add_actor (CLUTTER_CONTAINER (group), tmp); gnibbles_worm_move_tail_pointer (worm); } worm->length -= erasesize; clutter_container_add_actor (CLUTTER_CONTAINER (stage), group); clutter_actor_animate (group, CLUTTER_EASE_OUT_ELASTIC, 850, "opacity", 0, NULL); } }
static void gnibbles_worm_add_actor (GnibblesWorm *worm) { ClutterActor *actor; actor = gtk_clutter_texture_new_from_pixbuf ( worm_pixmaps[properties->wormprops[worm->number]->color - 12]); clutter_actor_set_size (actor, properties->tilesize, properties->tilesize); clutter_actor_set_position (actor, worm->xhead * properties->tilesize, worm->yhead * properties->tilesize); clutter_container_add_actor (CLUTTER_CONTAINER (worm->actors), actor); worm->list = g_list_prepend (worm->list, actor); board->walls[worm->xhead][worm->yhead] = WORMCHAR + worm->number; }
static void gnibbles_worm_animate_death (GnibblesWorm *worm) { ClutterActor *group = clutter_group_new (); ClutterActor *tmp = NULL; int i; gfloat x,y; for (i = 0; i < g_list_length (worm->list); i++) { tmp = gtk_clutter_texture_new_from_pixbuf ( worm_pixmaps [properties->wormprops[worm->number]->color - 12]); clutter_actor_get_position (CLUTTER_ACTOR (g_list_nth_data (worm->list, i)), &x, &y); clutter_actor_set_position (CLUTTER_ACTOR (tmp), x, y); clutter_actor_set_size (CLUTTER_ACTOR (tmp), properties->tilesize, properties->tilesize); clutter_container_add_actor (CLUTTER_CONTAINER (group), tmp); } worm->length = g_list_length (worm->list); for (i = 0; i < worm->length ; i++) worm->list = g_list_remove (worm->list, g_list_nth_data (worm->list, i)); clutter_actor_set_opacity (CLUTTER_ACTOR (worm->actors), 0x00); clutter_group_remove_all (CLUTTER_GROUP (worm->actors)); g_list_free (worm->list); worm->list = NULL; clutter_container_add_actor (CLUTTER_CONTAINER (stage), group); clutter_actor_animate (group, CLUTTER_EASE_OUT_QUAD, 310, "opacity", 0, "scale-x", 2.0, "scale-y", 2.0, "fixed::scale-center-x", (gfloat) worm->xhead * properties->tilesize, "fixed::scale-center-y", (gfloat) worm->yhead * properties->tilesize, NULL); }
static void gnibbles_board_load_level (GnibblesBoard *board) { gint i,j; gint x_pos, y_pos; ClutterActor *tmp; gboolean is_wall = TRUE; if (board->level) { clutter_group_remove_all (CLUTTER_GROUP (board->level)); clutter_container_remove_actor (CLUTTER_CONTAINER (stage), board->level); } board->level = clutter_group_new (); /* Load wall_pixmaps onto the surface*/ for (i = 0; i < BOARDHEIGHT; i++) { y_pos = i * properties->tilesize; for (j = 0; j < BOARDWIDTH; j++) { is_wall = TRUE; switch (board->walls[j][i]) { case 'a': // empty space is_wall = FALSE; break; // break right away case 'b': // straight up tmp = gtk_clutter_texture_new_from_pixbuf (wall_pixmaps[0]); break; case 'c': // straight side tmp = gtk_clutter_texture_new_from_pixbuf (wall_pixmaps[1]); break; case 'd': // corner bottom left tmp = gtk_clutter_texture_new_from_pixbuf (wall_pixmaps[2]); break; case 'e': // corner bottom right tmp = gtk_clutter_texture_new_from_pixbuf (wall_pixmaps[3]); break; case 'f': // corner up left tmp = gtk_clutter_texture_new_from_pixbuf (wall_pixmaps[4]); break; case 'g': // corner up right tmp = gtk_clutter_texture_new_from_pixbuf (wall_pixmaps[5]); break; case 'h': // tee up tmp = gtk_clutter_texture_new_from_pixbuf (wall_pixmaps[6]); break; case 'i': // tee right tmp = gtk_clutter_texture_new_from_pixbuf (wall_pixmaps[7]); break; case 'j': // tee left tmp = gtk_clutter_texture_new_from_pixbuf (wall_pixmaps[8]); break; case 'k': // tee down tmp = gtk_clutter_texture_new_from_pixbuf (wall_pixmaps[9]); break; case 'l': // cross tmp = gtk_clutter_texture_new_from_pixbuf (wall_pixmaps[10]); break; default: is_wall = FALSE; break; } if (is_wall) { x_pos = j * properties->tilesize; clutter_actor_set_size (CLUTTER_ACTOR(tmp), properties->tilesize, properties->tilesize); clutter_actor_set_position (CLUTTER_ACTOR (tmp), x_pos, y_pos); clutter_actor_show (CLUTTER_ACTOR (tmp)); clutter_container_add_actor (CLUTTER_CONTAINER (board->level), CLUTTER_ACTOR (tmp)); } } } clutter_container_add_actor (CLUTTER_CONTAINER (stage), board->level); clutter_actor_raise (board->level, board->surface); clutter_actor_set_opacity (board->level, 0); clutter_actor_set_scale (CLUTTER_ACTOR (board->level), 0.2, 0.2); clutter_actor_animate (board->level, CLUTTER_EASE_OUT_BOUNCE, 1210, "opacity", 0xff, "fixed::scale-gravity", CLUTTER_GRAVITY_CENTER, "scale-x", 1.0, "scale-y", 1.0, NULL); }
static void render_logo (void) { ClutterActor *image; ClutterActor *text, *text_shadow; ClutterActor *desc, *desc_shadow; ClutterColor actor_color = {0xff,0xff,0xff,0xff}; ClutterColor shadow_color = {0x00, 0x00, 0x00, 0x88}; ClutterActor *text_group; static gint width, height; gint size; gfloat stage_w, stage_h; PangoFontDescription *pfd; PangoLayout *layout; PangoContext *context; gchar *nibbles = _("Nibbles"); /* Translators: This string will be included in the intro screen, so don't make sure it fits! */ gchar *description = _("A worm game for MATE."); logo = clutter_group_new (); text_group = clutter_group_new (); if (!logo_pixmap) gnibbles_load_logo (properties->tilesize); image = gtk_clutter_texture_new_from_pixbuf (logo_pixmap); stage_w = board->width * properties->tilesize; stage_h = board->height * properties->tilesize; clutter_actor_set_size (CLUTTER_ACTOR (image), stage_w, stage_h); clutter_actor_set_position (CLUTTER_ACTOR (image), 0, 0); clutter_actor_show (image); text = clutter_text_new (); clutter_text_set_color (CLUTTER_TEXT (text), &actor_color); context = gdk_pango_context_get (); layout = clutter_text_get_layout (CLUTTER_TEXT (text)); pfd = pango_context_get_font_description (context); size = pango_font_description_get_size (pfd); pango_font_description_set_size (pfd, (size * stage_w) / 100); pango_font_description_set_family (pfd, "Sans"); pango_font_description_set_weight(pfd, PANGO_WEIGHT_BOLD); pango_layout_set_font_description (layout, pfd); pango_layout_set_text (layout, nibbles, -1); pango_layout_get_pixel_size (layout, &width, &height); text_shadow = clutter_text_new (); clutter_text_set_color (CLUTTER_TEXT (text_shadow), &shadow_color); layout = clutter_text_get_layout (CLUTTER_TEXT (text_shadow)); pango_layout_set_font_description (layout, pfd); pango_layout_set_text (layout, nibbles, -1); clutter_actor_set_position (CLUTTER_ACTOR (text), (stage_w - width) * 0.5 , stage_h * .72); clutter_actor_set_position (CLUTTER_ACTOR (text_shadow), (stage_w - width) * 0.5 + 5, stage_h * .72 + 5); desc = clutter_text_new (); layout = clutter_text_get_layout (CLUTTER_TEXT (desc)); clutter_text_set_color (CLUTTER_TEXT (desc), &actor_color); pango_font_description_set_size (pfd, (size * stage_w) / 400); pango_layout_set_font_description (layout, pfd); pango_layout_set_text (layout, description, -1); pango_layout_get_pixel_size(layout, &width, &height); desc_shadow = clutter_text_new (); layout = clutter_text_get_layout (CLUTTER_TEXT (desc_shadow)); clutter_text_set_color (CLUTTER_TEXT (desc_shadow), &shadow_color); pango_font_description_set_size (pfd, (size * stage_w) / 400); pango_layout_set_font_description (layout, pfd); pango_layout_set_text (layout, description, -1); clutter_actor_set_position (CLUTTER_ACTOR (desc), (stage_w - width) * 0.5, stage_h* .93); clutter_actor_set_position (CLUTTER_ACTOR (desc_shadow), (stage_w - width) * 0.5 + 3, stage_h * .93 + 3); clutter_container_add (CLUTTER_CONTAINER (text_group), CLUTTER_ACTOR (text_shadow), CLUTTER_ACTOR (text), CLUTTER_ACTOR (desc_shadow), CLUTTER_ACTOR (desc), NULL); clutter_container_add (CLUTTER_CONTAINER (logo), CLUTTER_ACTOR (image), CLUTTER_ACTOR (text_group), NULL); clutter_actor_set_opacity (CLUTTER_ACTOR (text_group), 0); clutter_actor_set_scale (CLUTTER_ACTOR (text_group), 0.0, 0.0); clutter_actor_animate (text_group, CLUTTER_EASE_OUT_CIRC, 800, "opacity", 0xff, "scale-x", 1.0, "scale-y", 1.0, "fixed::scale-center-y", stage_w / 2, "fixed::scale-center-x", stage_h / 2, NULL); clutter_container_add_actor (CLUTTER_CONTAINER (stage), CLUTTER_ACTOR (logo)); }
void gnibbles_board_load_level (GnibblesBoard *board, GnibblesLevel *level) { gint i,j; gint x_pos, y_pos; ClutterActor *tmp; gboolean wall = TRUE; if (board->level) g_object_unref (board->level); board->level = clutter_group_new (); /* Load walls onto the surface*/ for (i = 0; i < BOARDHEIGHT; i++) { y_pos = i * properties->tilesize; for (j = 0; j < BOARDWIDTH; j++) { wall = TRUE; switch (level->walls[j][i]) { case 'a': // empty space wall = FALSE; break; // break right away case 'b': // straight up tmp = gtk_clutter_texture_new_from_pixbuf (wall_pixmaps[1]); break; case 'c': // straight side tmp = gtk_clutter_texture_new_from_pixbuf (wall_pixmaps[2]); break; case 'd': // corner bottom left tmp = gtk_clutter_texture_new_from_pixbuf (wall_pixmaps[3]); break; case 'e': // corner bottom right tmp = gtk_clutter_texture_new_from_pixbuf (wall_pixmaps[4]); break; case 'f': // corner up left tmp = gtk_clutter_texture_new_from_pixbuf (wall_pixmaps[5]); break; case 'g': // corner up right tmp = gtk_clutter_texture_new_from_pixbuf (wall_pixmaps[6]); break; case 'h': // tee up tmp = gtk_clutter_texture_new_from_pixbuf (wall_pixmaps[7]); break; case 'i': // tee right tmp = gtk_clutter_texture_new_from_pixbuf (wall_pixmaps[8]); break; case 'j': // tee left tmp = gtk_clutter_texture_new_from_pixbuf (wall_pixmaps[9]); break; case 'k': // tee down tmp = gtk_clutter_texture_new_from_pixbuf (wall_pixmaps[10]); break; case 'l': // cross tmp = gtk_clutter_texture_new_from_pixbuf (wall_pixmaps[11]); break; default: wall = FALSE; break; } if (wall == TRUE) { x_pos = j * properties->tilesize; clutter_actor_set_size (CLUTTER_ACTOR(tmp), properties->tilesize, properties->tilesize); clutter_actor_set_position (CLUTTER_ACTOR (tmp), x_pos, y_pos); clutter_actor_show (CLUTTER_ACTOR (tmp)); clutter_container_add_actor (CLUTTER_CONTAINER (board->level), tmp); } } } ClutterActor *stage = gnibbles_board_get_stage (board); clutter_container_add_actor (CLUTTER_CONTAINER (stage), board->level); //raise the level above the surface clutter_actor_raise (board->level,board->surface); }