gcompris r3528 - in branches/gcomprixogoo/src: canal_lock-activity gcompris
- From: bcoudoin svn gnome org
- To: svn-commits-list gnome org
- Subject: gcompris r3528 - in branches/gcomprixogoo/src: canal_lock-activity gcompris
- Date: Fri, 5 Sep 2008 23:00:38 +0000 (UTC)
Author: bcoudoin
Date: Fri Sep 5 23:00:38 2008
New Revision: 3528
URL: http://svn.gnome.org/viewvc/gcompris?rev=3528&view=rev
Log:
fixed a bug in gc_item_focus_remove, the old hightlight item was
not set to NULL.
Improved canal_lock. Now it has a bonus while reaching the end and the start
of the boat location.
Added again the highliths on all items.
Modified:
branches/gcomprixogoo/src/canal_lock-activity/canal_lock.c
branches/gcomprixogoo/src/gcompris/gameutil.c
Modified: branches/gcomprixogoo/src/canal_lock-activity/canal_lock.c
==============================================================================
--- branches/gcomprixogoo/src/canal_lock-activity/canal_lock.c (original)
+++ branches/gcomprixogoo/src/canal_lock-activity/canal_lock.c Fri Sep 5 23:00:38 2008
@@ -56,7 +56,7 @@
static gboolean is_our_board (GcomprisBoard *gcomprisBoard);
static void set_level (guint level);
static int gamewon;
-static void game_won(void);
+static int from;
static gint timer_id;
static gboolean animation;
@@ -99,6 +99,10 @@
GooCanvasItem *target,
GdkEventButton *event,
gpointer data);
+static gboolean hightlight(GooCanvasItem *item,
+ GooCanvasItem *target,
+ GdkEventButton *event,
+ gpointer status);
static gboolean animate_step();
static void update_water();
static void toggle_lock(GooCanvasItem *item);
@@ -145,11 +149,6 @@
if(gcomprisBoard==NULL)
return;
- if(gamewon == TRUE && pause == FALSE) /* the game is won */
- {
- game_won();
- }
-
board_paused = pause;
}
@@ -172,7 +171,6 @@
animation = FALSE;
- gamewon = FALSE;
pause_board(FALSE);
}
}
@@ -234,6 +232,7 @@
canal_lock_destroy_all_items();
gamewon = FALSE;
+ from = 0;
/* Original state of the lock */
boat_position = BOAT_POS_LEFT;
@@ -275,8 +274,8 @@
BASE_LINE - LEFT_CANAL_HEIGHT - gdk_pixbuf_get_height(pixmap)*0.9,
NULL);
g_signal_connect(tuxboat_item, "button-press-event",
- (GtkSignalFunc) item_event,
- NULL);
+ (GtkSignalFunc) item_event,
+ NULL);
gc_item_focus_init(tuxboat_item, NULL);
tuxboat_width = gdk_pixbuf_get_width(pixmap);
@@ -334,6 +333,12 @@
g_signal_connect(lock_left_item, "button-press-event",
(GtkSignalFunc) item_event,
NULL);
+ g_signal_connect(lock_left_item, "enter_notify_event",
+ (GtkSignalFunc) hightlight,
+ GINT_TO_POINTER(TRUE));
+ g_signal_connect(lock_left_item, "leave_notify_event",
+ (GtkSignalFunc) hightlight,
+ GINT_TO_POINTER(FALSE));
/* This is the right lock */
lock_right_item = goo_canvas_rect_new (boardRootItem,
@@ -347,6 +352,12 @@
g_signal_connect(lock_right_item, "button-press-event",
(GtkSignalFunc) item_event,
NULL);
+ g_signal_connect(lock_right_item, "enter_notify_event",
+ (GtkSignalFunc) hightlight,
+ GINT_TO_POINTER(TRUE));
+ g_signal_connect(lock_right_item, "leave_notify_event",
+ (GtkSignalFunc) hightlight,
+ GINT_TO_POINTER(FALSE));
/* This is the water conduit under the canal */
goo_canvas_rect_new (boardRootItem,
@@ -401,6 +412,12 @@
g_signal_connect(canallock_left_item, "button-press-event",
(GtkSignalFunc) item_event,
NULL);
+ g_signal_connect(canallock_left_item, "enter_notify_event",
+ (GtkSignalFunc) hightlight,
+ GINT_TO_POINTER(TRUE));
+ g_signal_connect(canallock_left_item, "leave_notify_event",
+ (GtkSignalFunc) hightlight,
+ GINT_TO_POINTER(FALSE));
canallock_right_item =
goo_canvas_rect_new (boardRootItem,
@@ -411,32 +428,21 @@
"fill_color_rgba", CANALLOCK_COLOR,
"line-width", (double) 0,
NULL);
- g_signal_connect(canallock_right_item, "button-press-event",
- (GtkSignalFunc) item_event,
- NULL);
+ g_signal_connect(canallock_right_item, "button-press-event",
+ (GtkSignalFunc) item_event,
+ NULL);
+ g_signal_connect(canallock_right_item, "enter_notify_event",
+ (GtkSignalFunc) hightlight,
+ GINT_TO_POINTER(TRUE));
+ g_signal_connect(canallock_right_item, "leave_notify_event",
+ (GtkSignalFunc) hightlight,
+ GINT_TO_POINTER(FALSE));
return NULL;
}
/* ==================================== */
-static void game_won()
-{
- gcomprisBoard->sublevel++;
-
- if(gcomprisBoard->sublevel>gcomprisBoard->number_of_sublevel) {
- /* Try the next level */
- gcomprisBoard->sublevel=1;
- gcomprisBoard->level++;
- if(gcomprisBoard->level>gcomprisBoard->maxlevel)
- gcomprisBoard->level = gcomprisBoard->maxlevel;
-
- gc_sound_play_ogg ("sounds/bonus.wav", NULL);
- }
- canal_lock_next_level();
-}
-
-/* ==================================== */
/* Move the boat to the next possible position */
static void
move_boat()
@@ -458,12 +464,22 @@
boat_position = BOAT_POS_LEFT;
timer_item_limit_x = (LEFT_CANAL_WIDTH - tuxboat_width)/2;
timer_step_x1 = -2;
+ if (from == 1)
+ {
+ gamewon = TRUE;
+ from = 0;
+ }
}
else if(boat_position == BOAT_POS_MIDDLE && !lock_right_up)
{
boat_position = BOAT_POS_RIGHT;
timer_item_limit_x = LEFT_CANAL_WIDTH + MIDDLE_CANAL_WIDTH + (RIGHT_CANAL_WIDTH - tuxboat_width)/2;
timer_step_x1 = 2;
+ if (from == 0)
+ {
+ gamewon = TRUE;
+ from = 1;
+ }
}
else if(boat_position == BOAT_POS_RIGHT && !lock_right_up)
{
@@ -479,6 +495,8 @@
return;
}
+ gc_item_focus_remove(tuxboat_item, NULL);
+
gc_sound_play_ogg ("sounds/eraser2.wav", NULL);
timer_item = tuxboat_item;
@@ -628,6 +646,8 @@
timer_id = 0;
animation = FALSE;
update_water();
+ if (timer_item == tuxboat_item)
+ gc_item_focus_init(tuxboat_item, NULL);
}
else if((bounds.x1 >= timer_item_limit_x && timer_step_x1 > 0) ||
(bounds.x1 <= timer_item_limit_x && timer_step_x1 < 0))
@@ -636,6 +656,13 @@
timer_id = 0;
animation = FALSE;
update_water();
+ if (gamewon)
+ {
+ gc_bonus_display(TRUE, GC_BONUS_FLOWER);
+ gamewon = FALSE;
+ }
+ if (timer_item == tuxboat_item)
+ gc_item_focus_init(tuxboat_item, NULL);
}
return TRUE;
@@ -643,13 +670,18 @@
/* ==================================== */
/* Highlight the given item */
-static void hightlight(GooCanvasItem *item, gboolean status)
+static gboolean
+hightlight(GooCanvasItem *item,
+ GooCanvasItem *target,
+ GdkEventButton *event,
+ gpointer status_)
{
guint color = 0;
+ gboolean status = GPOINTER_TO_INT(status_);
/* This is an image, not a rectangle */
if(item == tuxboat_item)
- return;
+ return FALSE;
if(item == lock_left_item ||
item == lock_right_item)
@@ -663,10 +695,11 @@
}
- g_object_set(item,
- "fill_color_rgba", color,
- NULL);
+ g_object_set(item,
+ "fill_color_rgba", color,
+ NULL);
+ return TRUE;
}
/* ==================================== */
@@ -679,60 +712,46 @@
if(board_paused)
return FALSE;
- switch (event->type)
- {
- case GDK_ENTER_NOTIFY:
- hightlight(item, TRUE);
- break;
- case GDK_LEAVE_NOTIFY:
- hightlight(item, FALSE);
- break;
- case GDK_BUTTON_PRESS:
-
- /* If there is already an animation do nothing */
- if(animation)
- return FALSE;
+ /* If there is already an animation do nothing */
+ if(animation)
+ return FALSE;
- if(item == lock_left_item)
- {
- if(lock_water_low && canallock_right_up)
- toggle_lock(item);
- else
- gc_sound_play_ogg ("sounds/crash.ogg", NULL);
+ if(item == lock_left_item)
+ {
+ if(lock_water_low && canallock_right_up)
+ toggle_lock(item);
+ else
+ gc_sound_play_ogg ("sounds/crash.ogg", NULL);
- }
- else if(item == lock_right_item)
- {
- if(!lock_water_low && canallock_left_up)
- toggle_lock(item);
- else
- gc_sound_play_ogg ("sounds/crash.ogg", NULL);
- }
- else if(item == canallock_left_item && canallock_right_up)
- {
- if(lock_right_up)
- toggle_lock(item);
- else
- gc_sound_play_ogg ("sounds/crash.ogg", NULL);
- }
- else if(item == canallock_right_item && canallock_left_up)
- {
- if(lock_left_up)
- toggle_lock(item);
- else
- gc_sound_play_ogg ("sounds/crash.ogg", NULL);
- }
- else if(item == tuxboat_item)
- {
- move_boat();
- }
+ }
+ else if(item == lock_right_item)
+ {
+ if(!lock_water_low && canallock_left_up)
+ toggle_lock(item);
else
- {
- gc_sound_play_ogg ("sounds/crash.ogg", NULL);
- }
- break;
- default:
- break;
+ gc_sound_play_ogg ("sounds/crash.ogg", NULL);
+ }
+ else if(item == canallock_left_item && canallock_right_up)
+ {
+ if(lock_right_up)
+ toggle_lock(item);
+ else
+ gc_sound_play_ogg ("sounds/crash.ogg", NULL);
+ }
+ else if(item == canallock_right_item && canallock_left_up)
+ {
+ if(lock_left_up)
+ toggle_lock(item);
+ else
+ gc_sound_play_ogg ("sounds/crash.ogg", NULL);
+ }
+ else if(item == tuxboat_item)
+ {
+ move_boat();
+ }
+ else
+ {
+ gc_sound_play_ogg ("sounds/crash.ogg", NULL);
}
return FALSE;
}
Modified: branches/gcomprixogoo/src/gcompris/gameutil.c
==============================================================================
--- branches/gcomprixogoo/src/gcompris/gameutil.c (original)
+++ branches/gcomprixogoo/src/gcompris/gameutil.c Fri Sep 5 23:00:38 2008
@@ -331,6 +331,9 @@
if(highlight_item)
goo_canvas_item_remove(highlight_item);
+
+ g_object_set_data (G_OBJECT(target_item), "highlight_item",
+ NULL);
}
/*
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]