2005-01-24 19:01:55 +01:00
|
|
|
#include <unistd.h>
|
|
|
|
|
|
|
|
#include "game_gui.h"
|
|
|
|
#include "treeview.h"
|
|
|
|
#include "support.h"
|
|
|
|
#include "window.h"
|
|
|
|
|
|
|
|
/** Constants determining the live game area scale
|
|
|
|
behaviour. */
|
|
|
|
#define CONSTANT_GAME_GUI_LIVE_GAME_SCALE_ATTACK 0.3
|
|
|
|
#define CONSTANT_GAME_GUI_LIVE_GAME_SCALE_CHANCE 0.45
|
|
|
|
#define CONSTANT_GAME_GUI_LIVE_GAME_SCALE_RANGE 10.0
|
2005-01-25 10:50:12 +01:00
|
|
|
#define CONSTANT_GAME_GUI_LIVE_GAME_SCALE_COLOR_DEFEND "lightblue"
|
|
|
|
#define CONSTANT_GAME_GUI_LIVE_GAME_SCALE_COLOR_MIDFIELD "khaki"
|
|
|
|
#define CONSTANT_GAME_GUI_LIVE_GAME_SCALE_COLOR_ATTACK "gold"
|
|
|
|
#define CONSTANT_GAME_GUI_LIVE_GAME_SCALE_COLOR_CHANCE "orange"
|
|
|
|
#define CONSTANT_GAME_GUI_LIVE_GAME_SCALE_COLOR_GOAL "red"
|
|
|
|
#define CONSTANT_GAME_GUI_LIVE_GAME_SCALE_COLOR_MISS "lightgreen"
|
2005-01-24 19:01:55 +01:00
|
|
|
|
|
|
|
/** Show the live game in the live game window.
|
|
|
|
@param unit The current unit we show. */
|
|
|
|
void
|
|
|
|
game_gui_live_game_show_unit(const LiveGameUnit *unit)
|
|
|
|
{
|
2005-01-24 22:49:14 +01:00
|
|
|
gchar buf[SMALL];
|
|
|
|
gfloat fraction = (gfloat)live_game_unit_get_minute(unit) / 90;
|
2005-01-24 19:01:55 +01:00
|
|
|
GtkProgressBar *progress_bar;
|
|
|
|
|
|
|
|
if(live_game.window == NULL)
|
|
|
|
{
|
|
|
|
live_game.window = window_create(WINDOW_LIVE);
|
|
|
|
treeview_live_game_show_initial_commentary(unit);
|
|
|
|
|
|
|
|
gtk_range_set_range(
|
|
|
|
GTK_RANGE(lookup_widget(live_game.window, "hscale_area")), 0,
|
|
|
|
CONSTANT_GAME_GUI_LIVE_GAME_SCALE_RANGE);
|
|
|
|
}
|
|
|
|
else
|
|
|
|
treeview_live_game_show_commentary(unit);
|
|
|
|
|
|
|
|
treeview_live_game_show_result(unit);
|
|
|
|
|
|
|
|
game_gui_live_game_set_hscale(unit,
|
|
|
|
GTK_HSCALE(lookup_widget(live_game.window, "hscale_area")));
|
|
|
|
|
2005-01-24 22:49:14 +01:00
|
|
|
sprintf(buf, "%d.", live_game_unit_get_minute(unit));
|
2005-01-24 19:01:55 +01:00
|
|
|
progress_bar = GTK_PROGRESS_BAR(lookup_widget(live_game.window, "progressbar_live"));
|
2005-01-24 22:49:14 +01:00
|
|
|
gtk_progress_bar_set_fraction(progress_bar, (fraction > 1) ? 1 : fraction);
|
|
|
|
gtk_progress_bar_set_text(progress_bar, buf);
|
2005-01-24 19:01:55 +01:00
|
|
|
usleep(500500 + options[OPT_LIVE_SPEED] * 50000);
|
|
|
|
while(gtk_events_pending())
|
|
|
|
gtk_main_iteration();
|
|
|
|
|
|
|
|
if(unit->event.type == LIVE_GAME_EVENT_END_MATCH)
|
|
|
|
gtk_widget_set_sensitive(lookup_widget(live_game.window, "button_live_close"), TRUE);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
/** Set the area scale position and color in the live game window.
|
|
|
|
@param unit The current unit.
|
|
|
|
@param hscale The scale widget. */
|
|
|
|
void
|
|
|
|
game_gui_live_game_set_hscale(const LiveGameUnit *unit, GtkHScale *hscale)
|
|
|
|
{
|
|
|
|
GdkColor color;
|
|
|
|
|
|
|
|
gtk_widget_modify_bg(GTK_WIDGET(hscale), GTK_STATE_NORMAL, NULL);
|
|
|
|
|
|
|
|
if(unit->area == LIVE_GAME_UNIT_AREA_MIDFIELD)
|
2005-01-25 10:50:12 +01:00
|
|
|
{
|
|
|
|
gdk_color_parse(CONSTANT_GAME_GUI_LIVE_GAME_SCALE_COLOR_MIDFIELD, &color);
|
2005-01-24 19:01:55 +01:00
|
|
|
gtk_range_set_value(GTK_RANGE(hscale),
|
|
|
|
CONSTANT_GAME_GUI_LIVE_GAME_SCALE_RANGE / 2);
|
2005-01-25 10:50:12 +01:00
|
|
|
}
|
|
|
|
else if(unit->event.type == LIVE_GAME_EVENT_GOAL ||
|
|
|
|
unit->event.type == LIVE_GAME_EVENT_OWN_GOAL)
|
2005-01-24 19:01:55 +01:00
|
|
|
{
|
2005-01-25 10:50:12 +01:00
|
|
|
gdk_color_parse(CONSTANT_GAME_GUI_LIVE_GAME_SCALE_COLOR_GOAL, &color);
|
2005-01-24 19:01:55 +01:00
|
|
|
|
|
|
|
gtk_range_set_value(GTK_RANGE(hscale),
|
|
|
|
CONSTANT_GAME_GUI_LIVE_GAME_SCALE_RANGE * (unit->possession == 0));
|
|
|
|
}
|
|
|
|
else if(unit->event.type == LIVE_GAME_EVENT_SCORING_CHANCE ||
|
|
|
|
unit->event.type == LIVE_GAME_EVENT_PENALTY ||
|
|
|
|
unit->event.type == LIVE_GAME_EVENT_FREE_KICK)
|
|
|
|
{
|
2005-01-25 10:50:12 +01:00
|
|
|
gdk_color_parse(CONSTANT_GAME_GUI_LIVE_GAME_SCALE_COLOR_CHANCE, &color);
|
2005-01-24 19:01:55 +01:00
|
|
|
|
|
|
|
gtk_range_set_value(GTK_RANGE(hscale),
|
|
|
|
CONSTANT_GAME_GUI_LIVE_GAME_SCALE_RANGE / 2 +
|
|
|
|
(CONSTANT_GAME_GUI_LIVE_GAME_SCALE_RANGE *
|
|
|
|
CONSTANT_GAME_GUI_LIVE_GAME_SCALE_CHANCE *
|
|
|
|
((unit->possession == 0) ? 1 : -1)));
|
|
|
|
}
|
|
|
|
else if(unit->event.type == LIVE_GAME_EVENT_POST ||
|
|
|
|
unit->event.type == LIVE_GAME_EVENT_MISSED ||
|
|
|
|
unit->event.type == LIVE_GAME_EVENT_SAVE ||
|
|
|
|
unit->event.type == LIVE_GAME_EVENT_CROSS_BAR)
|
2005-01-25 10:50:12 +01:00
|
|
|
gdk_color_parse(CONSTANT_GAME_GUI_LIVE_GAME_SCALE_COLOR_MISS, &color);
|
2005-01-24 19:01:55 +01:00
|
|
|
else if(unit->area == LIVE_GAME_UNIT_AREA_ATTACK)
|
2005-01-25 10:50:12 +01:00
|
|
|
{
|
|
|
|
gdk_color_parse(CONSTANT_GAME_GUI_LIVE_GAME_SCALE_COLOR_ATTACK, &color);
|
2005-01-24 19:01:55 +01:00
|
|
|
gtk_range_set_value(GTK_RANGE(hscale),
|
|
|
|
CONSTANT_GAME_GUI_LIVE_GAME_SCALE_RANGE / 2 +
|
|
|
|
(CONSTANT_GAME_GUI_LIVE_GAME_SCALE_RANGE *
|
|
|
|
CONSTANT_GAME_GUI_LIVE_GAME_SCALE_ATTACK *
|
|
|
|
((unit->possession == 0) ? 1 : -1)));
|
2005-01-25 10:50:12 +01:00
|
|
|
}
|
2005-01-24 19:01:55 +01:00
|
|
|
else if(unit->area == LIVE_GAME_UNIT_AREA_DEFEND)
|
2005-01-25 10:50:12 +01:00
|
|
|
{
|
|
|
|
gdk_color_parse(CONSTANT_GAME_GUI_LIVE_GAME_SCALE_COLOR_DEFEND, &color);
|
2005-01-24 19:01:55 +01:00
|
|
|
gtk_range_set_value(GTK_RANGE(hscale),
|
|
|
|
CONSTANT_GAME_GUI_LIVE_GAME_SCALE_RANGE / 2 +
|
|
|
|
(CONSTANT_GAME_GUI_LIVE_GAME_SCALE_RANGE *
|
|
|
|
CONSTANT_GAME_GUI_LIVE_GAME_SCALE_ATTACK *
|
|
|
|
((unit->possession == 0) ? -1 : 1)));
|
2005-01-25 10:50:12 +01:00
|
|
|
}
|
2005-01-24 19:01:55 +01:00
|
|
|
else
|
|
|
|
g_warning("game_gui_live_game_set_hscale: don't know what to do!\n");
|
|
|
|
|
2005-01-25 10:50:12 +01:00
|
|
|
gtk_widget_modify_bg(GTK_WIDGET(hscale), GTK_STATE_NORMAL, &color);
|
|
|
|
|
2005-01-24 19:01:55 +01:00
|
|
|
if(debug)
|
|
|
|
printf("***** area %d value %.1f\n", unit->area, gtk_range_get_value(GTK_RANGE(hscale)));
|
|
|
|
}
|