bygfoot/src/game_gui.c

126 lines
4.6 KiB
C
Raw Normal View History

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)));
}