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.86 by pcg, Fri May 21 03:18:15 2004 UTC vs.
Revision 1.91 by pcg, Sun May 23 02:23:54 2004 UTC

204 $self->listen ($self->{conn}); 204 $self->listen ($self->{conn});
205 205
206 gtk::state $self, "game::window", undef, window_size => [600, 500]; 206 gtk::state $self, "game::window", undef, window_size => [600, 500];
207 207
208 $self->signal_connect (delete_event => sub { $self->part; 1 }); 208 $self->signal_connect (delete_event => sub { $self->part; 1 });
209 $self->signal_connect (destroy => sub { %{$_[0]} = () }); 209 $self->signal_connect (destroy => sub {
210 $self->unlisten;
211 delete $self->{app}{game}{$self->{channel}};
212 %{$_[0]} = ();
213 });#d#
210 214
211 $self->add (my $hpane = new Gtk2::HPaned); 215 $self->add (my $hpane = new Gtk2::HPaned);
212 gtk::state $hpane, "game::hpane", undef, position => 500; 216 gtk::state $hpane, "game::hpane", undef, position => 500;
213 217
214 # LEFT PANE 218 # LEFT PANE
219 223
220 $hpane->pack1((my $vbox = new Gtk2::VBox), 1, 1); 224 $hpane->pack1((my $vbox = new Gtk2::VBox), 1, 1);
221 225
222 # board box (aspect/canvas) 226 # board box (aspect/canvas)
223 227
224 $self->{boardbox}->pack_start((my $frame = new Gtk2::Frame), 0, 1, 0); 228 #$self->{boardbox}->pack_start((my $frame = new Gtk2::Frame), 0, 1, 0);
229
230 # RIGHT PANE
231
232 $hpane->pack2 ((my $vbox = new Gtk2::VBox), 1, 1);
233 $hpane->set (position_set => 1);
234
235 $vbox->pack_start ((my $frame = new Gtk2::Frame), 0, 1, 0);
225 236
226 { 237 {
227 $frame->add (my $vbox = new Gtk2::VBox); 238 $frame->add (my $vbox = new Gtk2::VBox);
228 $vbox->add ($self->{title} = new Gtk2::Label $title); 239 $vbox->add ($self->{title} = new Gtk2::Label $title);
229 240
239 250
240 $self->{moveadj}->signal_connect (value_changed => sub { $self->update_board }); 251 $self->{moveadj}->signal_connect (value_changed => sub { $self->update_board });
241 } 252 }
242 253
243 $self->{boardbox}->add ($self->{board} = new Gtk2::GoBoard size => $self->{size}); 254 $self->{boardbox}->add ($self->{board} = new Gtk2::GoBoard size => $self->{size});
244
245 # RIGHT PANE
246
247 $hpane->pack2 (($self->{vpane} = new Gtk2::VPaned), 1, 1);
248 $hpane->set (position_set => 1);
249 gtk::state $self->{vpane}, "game::vpane", $self->{name}, position => 80;
250
251 $self->{vpane}->add (my $sw = new Gtk2::ScrolledWindow);
252 $sw->set_policy ("automatic", "always");
253
254 $sw->add ($self->{userlist} = new userlist);
255
256 $self->{vpane}->add (my $vbox = new Gtk2::VBox);
257 255
258 $vbox->pack_start ((my $hbox = new Gtk2::HBox 1), 0, 1, 0); 256 $vbox->pack_start ((my $hbox = new Gtk2::HBox 1), 0, 1, 0);
259 257
260 $hbox->add ($self->{userpanel}[$_] = new game::userpanel colour => $_) 258 $hbox->add ($self->{userpanel}[$_] = new game::userpanel colour => $_)
261 for COLOUR_WHITE, COLOUR_BLACK; 259 for COLOUR_WHITE, COLOUR_BLACK;
262 260
263 $vbox->pack_start (($self->{chat} = new superchat), 1, 1, 0); 261 $vbox->pack_start (($self->{chat} = new superchat), 1, 1, 0);
264 weaken $self->{chat};
265 262
266 $self->{rules_inlay} = $self->{chat}->new_switchable_inlay ("Game Rules", sub { $self->draw_rules (@_) }, 1); 263 $self->{rules_inlay} = $self->{chat}->new_switchable_inlay ("Game Rules", sub { $self->draw_rules (@_) }, 1);
264 $self->{users_inlay} = $self->{chat}->new_switchable_inlay ("Users:", sub { $self->draw_users (@_) }, 0);
267 265
268 $self->{chat}->signal_connect (command => sub { 266 $self->{chat}->signal_connect (command => sub {
269 my ($chat, $cmd, $arg) = @_; 267 my ($chat, $cmd, $arg) = @_;
270 if ($cmd eq "rsave") { 268 if ($cmd eq "rsave") {
271 Storable::nstore { tree => $self->{tree}, curnode => $self->{curnode}, move => $self->{move} }, $arg;#d# 269 Storable::nstore { tree => $self->{tree}, curnode => $self->{curnode}, move => $self->{move} }, $arg;#d#
278} 276}
279 277
280sub event_update_users { 278sub event_update_users {
281 my ($self, $add, $update, $remove) = @_; 279 my ($self, $add, $update, $remove) = @_;
282 280
283 return unless $self->{userlist};
284
285 $self->{userlist}->update ($add, $update, $remove); 281# $self->{userlist}->update ($add, $update, $remove);
282
283 $self->{users_inlay}->refresh;
286 284
287 my %important; 285 my %important;
288 $important{$self->{user1}{name}}++; 286 $important{$self->{user1}{name}}++;
289 $important{$self->{user2}{name}}++; 287 $important{$self->{user2}{name}}++;
290 $important{$self->{user3}{name}}++; 288 $important{$self->{user3}{name}}++;
303sub join { 301sub join {
304 my ($self) = @_; 302 my ($self) = @_;
305 return if $self->{joined}; 303 return if $self->{joined};
306 304
307 $self->SUPER::join; 305 $self->SUPER::join;
308
309 $self->show_all;
310} 306}
311 307
312sub update_board { 308sub update_board {
313 my ($self) = @_; 309 my ($self) = @_;
314 return unless $self->{path}; 310 return unless $self->{path};
394sub event_join { 390sub event_join {
395 my ($self) = @_; 391 my ($self) = @_;
396 392
397 $self->SUPER::event_join (@_); 393 $self->SUPER::event_join (@_);
398 $self->event_update_game; 394 $self->event_update_game;
395 $self->show_all;
399} 396}
400 397
401sub event_part { 398sub event_part {
402 my ($self) = @_; 399 my ($self) = @_;
403 400
500 } elsif ($rules->{timesys} == TIMESYS_CANADIAN) { 497 } elsif ($rules->{timesys} == TIMESYS_CANADIAN) {
501 $text .= util::format_time $rules->{time}; 498 $text .= util::format_time $rules->{time};
502 $text .= sprintf " + %s/%d CAN", util::format_time $rules->{interval}, $rules->{count}; 499 $text .= sprintf " + %s/%d CAN", util::format_time $rules->{interval}, $rules->{count};
503 } 500 }
504 501
505 $inlay->clear;
506 $inlay->append_text ("<infoblock>$text</infoblock>"); 502 $inlay->append_text ("<infoblock>$text</infoblock>");
507} 503}
508 504
509sub event_update_rules { 505sub event_update_rules {
510 my ($self, $rules) = @_; 506 my ($self, $rules) = @_;
516 for COLOUR_BLACK, COLOUR_WHITE; 512 for COLOUR_BLACK, COLOUR_WHITE;
517 } 513 }
518 514
519 sound::play 3, "gamestart"; 515 sound::play 3, "gamestart";
520 516
521 $self->draw_rules ($self->{rules_inlay}); 517 $self->{rules_inlay}->refresh;
522} 518}
523 519
524sub inject_resign_game { 520sub inject_resign_game {
525 my ($self, $msg) = @_; 521 my ($self, $msg) = @_;
526 522
550 my $rules = $challenge->{rules}; 546 my $rules = $challenge->{rules};
551 547
552 my $as_black = $challenge->{user1}{name} eq $self->{conn}{name}; 548 my $as_black = $challenge->{user1}{name} eq $self->{conn}{name};
553 my $opponent = $as_black ? $challenge->{user2} : $challenge->{user1}; 549 my $opponent = $as_black ? $challenge->{user2} : $challenge->{user1};
554 550
555 $inlay->clear;
556 $inlay->append_text ("\n<challenge>Challenge to <user>" . $opponent->as_string . "</user></challenge>"); 551 $inlay->append_text ("\n<challenge>Challenge to <user>" . $opponent->as_string . "</user></challenge>");
557 $inlay->append_text ("\nHandicap: $rules->{handicap}"); 552 $inlay->append_text ("\nHandicap: $rules->{handicap}");
558 553
559#bless( ( 554#bless( (
560# gametype => 3, 555# gametype => 3,
577# name => 'Nerdamus' 572# name => 'Nerdamus'
578# }, 'KGS::User' ) 573# }, 'KGS::User' )
579# ), 'KGS::Challenge' ) 574# ), 'KGS::Challenge' )
580} 575}
581 576
577sub draw_users {
578 my ($self, $inlay) = @_;
579
580 for (sort keys %{$self->{users}}) {
581 $inlay->append_text (" <user>" . $self->{users}{$_}->as_string . "</user>");
582 }
583}
584
582sub event_challenge { 585sub event_challenge {
583 my ($self, $challenge) = @_; 586 my ($self, $challenge) = @_;
584 587
585 my $as_black = $challenge->{user1}{name} eq $self->{conn}{name}; 588 my $as_black = $challenge->{user1}{name} eq $self->{conn}{name};
586 my $opponent = $as_black ? $challenge->{user2} : $challenge->{user1}; 589 my $opponent = $as_black ? $challenge->{user2} : $challenge->{user1};

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines