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.69 by pcg, Tue Jul 22 21:24:50 2003 UTC vs.
Revision 1.73 by pcg, Fri Jul 25 17:35:20 2003 UTC

263 263
264 $vbox->pack_start((my $hbox = new Gtk2::HBox 1), 0, 1, 0); 264 $vbox->pack_start((my $hbox = new Gtk2::HBox 1), 0, 1, 0);
265 $hbox->add (($self->{userpanel}[WHITE] = new game::userpanel colour => WHITE)->widget); 265 $hbox->add (($self->{userpanel}[WHITE] = new game::userpanel colour => WHITE)->widget);
266 $hbox->add (($self->{userpanel}[BLACK] = new game::userpanel colour => BLACK)->widget); 266 $hbox->add (($self->{userpanel}[BLACK] = new game::userpanel colour => BLACK)->widget);
267 267
268 $vbox->pack_start(($self->{text} = new gtk::text)->widget, 1, 1, 0); 268 $vbox->pack_start(($self->{chat} = new chat), 1, 1, 0);
269 269
270 $vbox->pack_start(($self->{entry} = new Gtk2::Entry), 0, 1, 0);
271 $self->{entry}->signal_connect(activate => sub { 270 $self->{chat}->signal_connect(command => sub {
272 my $text = $self->{entry}->get_text; 271 my ($chat, $cmd, $arg) = @_;
273 $self->say($text) if $text =~ /\S/; 272 if ($cmd eq "rsave") {
274 $self->{entry}->set_text(""); 273 Storable::nstore { tree => $self->{tree}, curnode => $self->{curnode}, move => $self->{move} }, $arg;#d#
274 } else {
275 $self->{app}->do_command ($chat, $cmd, $arg, userlist => $self->{userlist}, game => $self);
276 }
275 }); 277 });
276 278
277 $self->event_update_game; 279 $self->event_update_game;
278 $self; 280 $self;
279} 281}
280 282
281sub event_update_users { 283sub event_update_users {
282 my ($self, $add, $update, $remove) = @_; 284 my ($self, $add, $update, $remove) = @_;
285
286 return unless $self->{userlist};
283 287
284 $self->{userlist}->update ($add, $update, $remove); 288 $self->{userlist}->update ($add, $update, $remove);
285 289
286 my %important; 290 my %important;
287 $important{$self->{user1}{name}}++; 291 $important{$self->{user1}{name}}++;
288 $important{$self->{user2}{name}}++; 292 $important{$self->{user2}{name}}++;
289 $important{$self->{user3}{name}}++; 293 $important{$self->{user3}{name}}++;
290 294
291 if (my @users = grep $important{$_->{name}}, @$add) { 295 if (my @users = grep $important{$_->{name}}, @$add) {
292 $self->{text}->append_text ("\n<header>Joins:</header>"); 296 $self->{chat}->append_text ("\n<header>Joins:</header>");
293 $self->{text}->append_text (" <user>" . $_->as_string . "</user>") for @users; 297 $self->{chat}->append_text (" <user>" . $_->as_string . "</user>") for @users;
294 } 298 }
295 if (my @users = grep $important{$_->{name}}, @$remove) { 299 if (my @users = grep $important{$_->{name}}, @$remove) {
296 $self->{text}->append_text ("\n<header>Parts:</header>"); 300 $self->{chat}->append_text ("\n<header>Parts:</header>");
297 $self->{text}->append_text (" <user>" . $_->as_string . "</user>") for @users; 301 $self->{chat}->append_text (" <user>" . $_->as_string . "</user>") for @users;
298 } 302 }
299 303
300} 304}
301 305
302sub join { 306sub join {
392 }sgexi; 396 }sgexi;
393 397
394 $text .= $_; 398 $text .= $_;
395 } 399 }
396 400
397 $self->{text}->append_text ($text); 401 $self->{chat}->append_text ($text);
398} 402}
399 403
400sub event_join { 404sub event_join {
401 my ($self) = @_; 405 my ($self) = @_;
402 $self->SUPER::event_join; 406 $self->SUPER::event_join;
414} 418}
415 419
416sub event_update_game { 420sub event_update_game {
417 my ($self) = @_; 421 my ($self) = @_;
418 $self->SUPER::event_update_game; 422 $self->SUPER::event_update_game;
423
424 return unless $self->{window};
419 425
420 my $title = defined $self->{channel} 426 my $title = defined $self->{channel}
421 ? $self->owner->as_string . " " . $self->opponent_string 427 ? $self->owner->as_string . " " . $self->opponent_string
422 : "Game Window"; 428 : "Game Window";
423 $self->{window}->set_title("KGS Game $title"); 429 $self->{window}->set_title("KGS Game $title");
474 $text .= "</infoblock>"; 480 $text .= "</infoblock>";
475 481
476 $self->{gatext} = \@ga; 482 $self->{gatext} = \@ga;
477 }; 483 };
478 484
479 $self->{text}->append_text ($text); 485 $self->{chat}->append_text ($text);
480} 486}
481 487
482sub event_update_rules { 488sub event_update_rules {
483 my ($self, $rules) = @_; 489 my ($self, $rules) = @_;
484 490
504 } elsif ($rules->{timesys} == TIMESYS_CANADIAN) { 510 } elsif ($rules->{timesys} == TIMESYS_CANADIAN) {
505 $text .= util::format_time $rules->{time}; 511 $text .= util::format_time $rules->{time};
506 $text .= sprintf " + %s/%d CAN", util::format_time $rules->{interval}, $rules->{count}; 512 $text .= sprintf " + %s/%d CAN", util::format_time $rules->{interval}, $rules->{count};
507 } 513 }
508 514
509 $self->{text}->append_text ("<infoblock>$text</infoblock>"); 515 $self->{chat}->append_text ("<infoblock>$text</infoblock>");
510} 516}
511 517
512sub inject_resign_game { 518sub inject_resign_game {
513 my ($self, $msg) = @_; 519 my ($self, $msg) = @_;
514 520
515 sound::play 3, "resign"; 521 sound::play 3, "resign";
516 522
517 $self->{text}->append_text ("\n<infoblock><header>Resign</header>" 523 $self->{chat}->append_text ("\n<infoblock><header>Resign</header>"
518 . "\n<user>" 524 . "\n<user>"
519 . (util::toxml $self->{user}[$msg->{player}]->as_string) 525 . (util::toxml $self->{user}[$msg->{player}]->as_string)
520 . "</user> resigned.</infoblock>"); 526 . "</user> resigned.</infoblock>");
521} 527}
522 528
523sub inject_final_result { 529sub inject_final_result {
524 my ($self, $msg) = @_; 530 my ($self, $msg) = @_;
525 531
526 $self->{text}->append_text ("<infoblock>\n<header>Game Over</header>" 532 $self->{chat}->append_text ("<infoblock>\n<header>Game Over</header>"
527 . "\nWhite Score " . (util::toxml $msg->{whitescore}->as_string) 533 . "\nWhite Score " . (util::toxml $msg->{whitescore}->as_string)
528 . "\nBlack Score " . (util::toxml $msg->{blackscore}->as_string) 534 . "\nBlack Score " . (util::toxml $msg->{blackscore}->as_string)
529 . "</infoblock>" 535 . "</infoblock>"
530 ); 536 );
531} 537}
532 538
533sub event_challenge { 539sub event_challenge {
534 my ($self, $challenge) = @_; 540 my ($self, $challenge) = @_;
535 541
536 use KGS::Listener::Debug; 542 use KGS::Listener::Debug;
537 $self->{text}->append_text ("\n".KGS::Listener::Debug::dumpval($challenge)); 543 $self->{chat}->append_text ("\n".KGS::Listener::Debug::dumpval($challenge));
538} 544}
539 545
540sub destroy { 546sub destroy {
541 my ($self) = @_; 547 my ($self) = @_;
548
549 delete $self->{app}{gamelist}{game}{$self->{channel}};
542 $self->{userpanel}[$_] && (delete $self->{userpanel}[$_])->destroy 550 $self->{userpanel}[$_] && (delete $self->{userpanel}[$_])->destroy
543 for BLACK, WHITE; 551 for BLACK, WHITE;
544 $self->SUPER::destroy; 552 $self->SUPER::destroy;
545 delete $self->{app}{gamelist}{game}{$self->{channel}};
546} 553}
547 554
5481; 5551;
549 556

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines