ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/kgsueme/kgsueme/game.pl
(Generate patch)

Comparing kgsueme/kgsueme/game.pl (file contents):
Revision 1.112 by root, Mon May 31 18:18:26 2004 UTC vs.
Revision 1.113 by root, Tue Jun 1 10:11:14 2004 UTC

34sub configure { 34sub configure {
35 my ($self, $timesys, $main, $interval, $count) = @_; 35 my ($self, $timesys, $main, $interval, $count) = @_;
36 36
37 if ($timesys == TIMESYS_ABSOLUTE) { 37 if ($timesys == TIMESYS_ABSOLUTE) {
38 $self->{format} = sub { 38 $self->{format} = sub {
39 if ($_[0] <= 0) { 39 if ($_[0] < 0) {
40 "TIMEOUT"; 40 "TIMEOUT";
41 } else { 41 } else {
42 util::format_time $_[0]; 42 util::format_time $_[0];
43 } 43 }
44 }; 44 };
45 45
46 } elsif ($timesys == TIMESYS_BYO_YOMI) { 46 } elsif ($timesys == TIMESYS_BYO_YOMI) {
47 my $low = $interval * $count; 47 my $low = $interval * $count;
48 48
49 $self->{format} = sub { 49 $self->{format} = sub {
50 if ($_[0] <= 0) { 50 if ($_[0] < 0) {
51 "TIMEOUT"; 51 "TIMEOUT";
52 } elsif ($_[0] > $low) { 52 } elsif ($_[0] > $low) {
53 util::format_time $_[0] - $low; 53 util::format_time $_[0] - $low;
54 } else { 54 } else {
55 sprintf "%s (%d)", 55 sprintf "%s (%d)",
58 } 58 }
59 }; 59 };
60 60
61 } elsif ($timesys == TIMESYS_CANADIAN) { 61 } elsif ($timesys == TIMESYS_CANADIAN) {
62 $self->{format} = sub { 62 $self->{format} = sub {
63 if ($_[0] <= 0) { 63 if ($_[0] < 0) {
64 "TIMEOUT"; 64 "TIMEOUT";
65 } elsif (!$self->{moves}) { 65 } elsif (!$self->{moves}) {
66 util::format_time $_[0] - $low; 66 util::format_time $_[0] - $low;
67 } else { 67 } else {
68 my $time = int (($_[0] - 1) % $interval + 1); 68 my $time = int (($_[0] - 1) % $interval + 1);
133 133
134### USER PANEL ############################################################## 134### USER PANEL ##############################################################
135 135
136package game::userpanel; 136package game::userpanel;
137 137
138use KGS::Constants;
139
138use Glib::Object::Subclass 140use Glib::Object::Subclass
139 Gtk2::HBox, 141 Gtk2::Frame,
140 properties => [ 142 properties => [
141 Glib::ParamSpec->IV ("colour", "colour", "User Colour", 0, 1, 0, [qw(construct-only writable)]), 143 Glib::ParamSpec->IV ("colour", "colour", "User Colour",
144 COLOUR_BLACK, COLOUR_WHITE, COLOUR_BLACK,
145 [qw(construct-only readable writable)]),
142 ]; 146 ];
143 147
144sub INIT_INSTANCE { 148sub INIT_INSTANCE {
145 my ($self) = @_; 149 my ($self) = @_;
146 150
147 $self->add (my $vbox = new Gtk2::VBox); 151 $self->add (my $vbox = new Gtk2::VBox);
148 152
149 $vbox->add ($self->{name} = new Gtk2::Label $self->{name}); 153 $vbox->pack_start (($self->{name} = new Gtk2::Label "-"), 1, 1, 0);
150 $vbox->add ($self->{info} = new Gtk2::Label ""); 154 $vbox->pack_start (($self->{info} = new Gtk2::Label "-"), 1, 1, 0);
151 $vbox->add ($self->{clock} = new game::goclock); Scalar::Util::weaken $self->{clock}; 155 $vbox->pack_start (($self->{clock} = new game::goclock), 1, 1, 0);
152 156
153 $vbox->add ($self->{imagebox} = new Gtk2::VBox); 157 $vbox->add ($self->{imagebox} = new Gtk2::VBox);
154 158
155 $self; 159 $self;
156} 160}
232 236
233 # LEFT PANE 237 # LEFT PANE
234 238
235 $hpane->pack1 (($self->{left} = new Gtk2::VBox), 1, 0); 239 $hpane->pack1 (($self->{left} = new Gtk2::VBox), 1, 0);
236 240
237 $self->{boardbox} = new Gtk2::VBox;
238
239 $hpane->pack1((my $vbox = new Gtk2::VBox), 1, 1); 241 $hpane->pack1((my $vbox = new Gtk2::VBox), 1, 1);
240 242
241 # board box (aspect/canvas) 243 # board box (aspect/canvas)
242 244
243 #$self->{boardbox}->pack_start((my $frame = new Gtk2::Frame), 0, 1, 0);
244
245 # RIGHT PANE 245 # RIGHT PANE
246 246
247 $hpane->pack2 ((my $vbox = new Gtk2::VBox), 1, 1); 247 $hpane->pack2 ((my $vbox = new Gtk2::VBox), 1, 1);
248 $hpane->set (position_set => 1); 248 $hpane->set (position_set => 1);
249 249
250 $vbox->pack_start ((my $frame = new Gtk2::Frame), 0, 1, 0); 250 $vbox->pack_start ((my $frame = new Gtk2::Frame), 0, 1, 0);
251 251
252 { 252 {
253 $frame->add (my $vbox = new Gtk2::VBox); 253 $frame->add (my $vbox = new Gtk2::VBox);
254 $vbox->add ($self->{title} = new Gtk2::Label $title); 254 $vbox->add ($self->{title} = new Gtk2::Label "-");
255 255
256 $vbox->add (my $hbox = new Gtk2::HBox); 256 $vbox->add (my $hbox = new Gtk2::HBox);
257 257
258 $hbox->pack_start (($self->{board_label} = new Gtk2::Label), 0, 1, 0); 258 $hbox->pack_start (($self->{board_label} = new Gtk2::Label), 0, 0, 0);
259 259
260 $self->{moveadj} = new Gtk2::Adjustment 1, 1, 1, 1, 5, 0; 260 $self->{moveadj} = new Gtk2::Adjustment 1, 1, 1, 1, 5, 0;
261 261
262 $hbox->pack_start ((my $scale = new Gtk2::HScale $self->{moveadj}), 1, 1, 0); 262 $hbox->pack_start ((my $scale = new Gtk2::HScale $self->{moveadj}), 1, 1, 0);
263 $scale->set_draw_value (0); 263 $scale->set_draw_value (0);
458 458
459 return unless $self->{joined}; 459 return unless $self->{joined};
460 460
461 $self->{colour} = $self->player_colour ($self->{conn}{name}); 461 $self->{colour} = $self->player_colour ($self->{conn}{name});
462 462
463 my $title = defined $self->{channel}
464 ? $self->owner->as_string . " " . $self->opponent_string
465 : "Game Window";
466 $self->set_title ("KGS Game $title");
467 $self->{title}->set_text ($title);
468
469 $self->{user}[COLOUR_BLACK] = $self->{black}; 463 $self->{user}[COLOUR_BLACK] = $self->{black};
470 $self->{user}[COLOUR_WHITE] = $self->{white}; 464 $self->{user}[COLOUR_WHITE] = $self->{white};
471 465
472 # show board 466 # show board
473 if ($self->is_inprogress) { 467 if ($self->is_inprogress) {
474 if (!$self->{boardbox}->parent) { 468 if (!$self->{board}) {
475 $self->{boardbox}->add ($self->{board} = new Gtk2::GoBoard size => $self->{size}); 469 $self->{left}->add ($self->{board} = new Gtk2::GoBoard size => $self->{size});
476 $self->{left}->add ($self->{boardbox});
477 $self->{board}->signal_connect (button_release => sub { 470 $self->{board}->signal_connect (button_release => sub {
478 if ($_[1] == 1) { 471 if ($_[1] == 1) {
479 $self->{board_click}->($_[2], $_[3]) if $self->{board_click}; 472 $self->{board_click}->($_[2], $_[3]) if $self->{board_click};
480 } 473 }
481 }); 474 });
475 $self->{board}->show_all;
482 } 476 }
483 if (my $ch = delete $self->{challenge}) { 477 if (my $ch = delete $self->{challenge}) {
484 $_->{inlay}->destroy for values %$ch; 478 $_->{inlay}->destroy for values %$ch;
485 } 479 }
486 $self->update_cursor; 480 $self->update_cursor;
487 } 481 }
488 482
489 $self->{left}->show_all; 483 my $title = defined $self->{channel}
484 ? $self->owner->as_string . " " . $self->opponent_string
485 : "Game Window";
486 $self->set_title ("KGS Game $title");
487 $self->{title}->set_text ($title); # title gets redrawn wrongly
490 488
491 $self->{rules_inlay}->refresh; 489 $self->{rules_inlay}->refresh;
490
491 if (exists $self->{teacher}) {
492 $self->{teacher_inlay} ||= $self->{chat}->new_inlay;
493 $self->{teacher_inlay}->clear;
494 $self->{teacher_inlay}->append_text ("\n<header>Teacher:</header> <user>"
495 . (util::toxml $self->{teacher}) . "</user>");
496 } elsif ($self->{teacher_inlay}) {
497 (delete $self->{teacher_inlay})->clear;
492 498 }
493} 499}
494 500
495sub event_update_rules { 501sub event_update_rules {
496 my ($self, $rules) = @_; 502 my ($self, $rules) = @_;
497 503
498 $self->{rules} = $rules; 504 $self->{rules} = $rules;
499 505
500 if ($self->{user}) { 506 if ($self->{user}) {
507 # todo. gets drawn wrongly
508
501 $self->{userpanel}[$_]->configure ($self->{app}, $self->{user}[$_], $rules) 509 $self->{userpanel}[$_]->configure ($self->{app}, $self->{user}[$_], $rules)
502 for COLOUR_BLACK, COLOUR_WHITE; 510 for COLOUR_BLACK, COLOUR_WHITE;
503 } 511 }
504 512
505 sound::play 3, "gamestart"; 513 sound::play 3, "gamestart";
518 $self->{userpanel}[$colour]->set_timer ( 526 $self->{userpanel}[$colour]->set_timer (
519 $running && $colour == $self->{whosemove} && $t->[0], 527 $running && $colour == $self->{whosemove} && $t->[0],
520 $t->[1] || $self->{rules}{time} 528 $t->[1] || $self->{rules}{time}
521 + ($self->{rules}{timesys} == TIMESYS_BYO_YOMI 529 + ($self->{rules}{timesys} == TIMESYS_BYO_YOMI
522 && $self->{rules}{interval} * $self->{rules}{count}), 530 && $self->{rules}{interval} * $self->{rules}{count}),
523 $t->[2] || $self->{rules}{count}); 531 $t->[2]);
524 } 532 }
525} 533}
526 534
527sub inject_set_gametime { 535sub inject_set_gametime {
528 my ($self, $msg) = @_; 536 my ($self, $msg) = @_;
739 747
740 sound::play 3, "resign"; 748 sound::play 3, "resign";
741 $self->{chat}->append_text ("\n<infoblock><header>Resign</header>" 749 $self->{chat}->append_text ("\n<infoblock><header>Resign</header>"
742 . "\n<user>" 750 . "\n<user>"
743 . (util::toxml $self->{user}[$msg->{player}]->as_string) 751 . (util::toxml $self->{user}[$msg->{player}]->as_string)
744 . "</user> resigned.</infoblock>"); 752 . "</user> resigned."
753 . "\n<user>"
754 . (util::toxml $self->{user}[1 - $msg->{player}]->as_string)
755 . "</user> wins the game."
756 . "</infoblock>");
745} 757}
746 758
747sub event_out_of_time { 759sub event_time_win {
748 my ($self, $player) = @_; 760 my ($self, $player) = @_;
749 761
750 sound::play 3, "timewin"; 762 sound::play 3, "timewin";
751 $self->{chat}->append_text ("\n<infoblock><header>Out of Time</header>" 763 $self->{chat}->append_text ("\n<infoblock><header>Out of Time</header>"
752 . "\n<user>" 764 . "\n<user>"
765 . (util::toxml $self->{user}[1 - $msg->{player}]->as_string)
766 . "</user> ran out of time and lost."
767 . "\n<user>"
753 . (util::toxml $self->{user}[$msg->{player}]->as_string) 768 . (util::toxml $self->{user}[$msg->{player}]->as_string)
769 . "</user> wins the game."
770 . "</infoblock>");
771}
772
773sub event_owner_left {
774 my ($self) = @_;
775
776 sound::play 2, "info";
777 $self->{chat}->append_text ("\n<infoblock><header>Owner left</header>"
754 . "</user> ran out of time and lost.</infoblock>"); 778 . "\nThe owner of this game left.</infoblock>");
779}
780
781sub event_teacher_left {
782 my ($self) = @_;
783
784 sound::play 2, "info";
785 $self->{chat}->append_text ("\n<infoblock><header>Teacher left</header>"
786 . "\nThe teacher left the game.</infoblock>");
755} 787}
756 788
757sub event_done { 789sub event_done {
758 my ($self) = @_; 790 my ($self) = @_;
759 791

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines