… | |
… | |
18 | my $self = shift; |
18 | my $self = shift; |
19 | |
19 | |
20 | $self->signal_connect (destroy => sub { $_[0]->stop }); |
20 | $self->signal_connect (destroy => sub { $_[0]->stop }); |
21 | |
21 | |
22 | $self->{set} = sub { }; |
22 | $self->{set} = sub { }; |
23 | $self->{format} = sub { "ERROR" }; |
23 | $self->{format} = sub { "???" }; |
24 | } |
24 | } |
25 | |
25 | |
26 | sub configure { |
26 | sub configure { |
27 | my ($self, $timesys, $main, $interval, $count) = @_; |
27 | my ($self, $timesys, $main, $interval, $count) = @_; |
28 | |
28 | |
… | |
… | |
217 | |
217 | |
218 | $self->{boardbox} = new Gtk2::VBox; |
218 | $self->{boardbox} = new Gtk2::VBox; |
219 | |
219 | |
220 | $hpane->pack1((my $vbox = new Gtk2::VBox), 1, 1); |
220 | $hpane->pack1((my $vbox = new Gtk2::VBox), 1, 1); |
221 | |
221 | |
222 | # challenge |
|
|
223 | |
|
|
224 | $self->{challenge} = new challenge channel => $self->{channel}; |
|
|
225 | |
|
|
226 | # board box (aspect/canvas) |
222 | # board box (aspect/canvas) |
227 | |
223 | |
228 | $self->{boardbox}->pack_start((my $frame = new Gtk2::Frame), 0, 1, 0); |
224 | $self->{boardbox}->pack_start((my $frame = new Gtk2::Frame), 0, 1, 0); |
229 | |
225 | |
230 | { |
226 | { |
… | |
… | |
262 | $vbox->pack_start ((my $hbox = new Gtk2::HBox 1), 0, 1, 0); |
258 | $vbox->pack_start ((my $hbox = new Gtk2::HBox 1), 0, 1, 0); |
263 | |
259 | |
264 | $hbox->add ($self->{userpanel}[$_] = new game::userpanel colour => $_) |
260 | $hbox->add ($self->{userpanel}[$_] = new game::userpanel colour => $_) |
265 | for COLOUR_WHITE, COLOUR_BLACK; |
261 | for COLOUR_WHITE, COLOUR_BLACK; |
266 | |
262 | |
267 | $vbox->pack_start (($self->{chat} = new chat), 1, 1, 0); |
263 | $vbox->pack_start (($self->{chat} = new superchat), 1, 1, 0); |
268 | weaken $self->{chat}; |
264 | weaken $self->{chat}; |
|
|
265 | |
|
|
266 | $self->{rules_inlay} = $self->{chat}->new_switchable_inlay ("Game Rules", sub { $self->draw_rules (@_) }, 1); |
269 | |
267 | |
270 | $self->{chat}->signal_connect (command => sub { |
268 | $self->{chat}->signal_connect (command => sub { |
271 | my ($chat, $cmd, $arg) = @_; |
269 | my ($chat, $cmd, $arg) = @_; |
272 | if ($cmd eq "rsave") { |
270 | if ($cmd eq "rsave") { |
273 | Storable::nstore { tree => $self->{tree}, curnode => $self->{curnode}, move => $self->{move} }, $arg;#d# |
271 | Storable::nstore { tree => $self->{tree}, curnode => $self->{curnode}, move => $self->{move} }, $arg;#d# |
… | |
… | |
426 | |
424 | |
427 | $self->{user}[COLOUR_BLACK] = $self->{user1}; |
425 | $self->{user}[COLOUR_BLACK] = $self->{user1}; |
428 | $self->{user}[COLOUR_WHITE] = $self->{user2}; |
426 | $self->{user}[COLOUR_WHITE] = $self->{user2}; |
429 | |
427 | |
430 | # show board |
428 | # show board |
431 | |
|
|
432 | if ($self->is_inprogress) { |
429 | if ($self->is_inprogress) { |
433 | $self->{left}->remove ($self->{challenge}->widget) if $self->{challenge} && $self->{boardbox}->parent; |
|
|
434 | $self->{left}->add ($self->{boardbox}) unless $self->{boardbox}->parent; |
430 | $self->{left}->add ($self->{boardbox}) unless $self->{boardbox}->parent; |
435 | } else { |
431 | if (my $ch = delete $self->{challenge}) { |
436 | $self->{left}->remove ($self->{boardbox}) if $self->{boardbox}->parent; |
432 | (delete $_->{inlay})->clear for values %$ch; |
437 | $self->{left}->add ($self->{challenge}->widget) unless $self->{challenge}->widget->parent; |
433 | } |
438 | } |
434 | } |
|
|
435 | |
439 | $self->{left}->show_all; |
436 | $self->{left}->show_all; |
440 | |
437 | |
441 | # view text |
438 | # view text |
442 | |
439 | |
443 | eval { #d# |
440 | eval { #d# |
… | |
… | |
479 | }; |
476 | }; |
480 | |
477 | |
481 | $self->{chat}->append_text ($text); |
478 | $self->{chat}->append_text ($text); |
482 | } |
479 | } |
483 | |
480 | |
484 | sub event_update_rules { |
481 | sub draw_rules { |
485 | my ($self, $rules) = @_; |
482 | my ($self, $inlay) = @_; |
486 | |
483 | |
487 | if ($self->{user}) { |
484 | my $rules = $self->{rules}; |
488 | $self->{userpanel}[$_]->configure ($self->{app}, $self->{user}[$_], $rules) |
|
|
489 | for COLOUR_BLACK, COLOUR_WHITE; |
|
|
490 | } |
|
|
491 | |
485 | |
492 | sound::play 3, "gamestart"; |
486 | my $text = ""; |
493 | |
|
|
494 | my $text = "\n<header>Game Rules</header>"; |
|
|
495 | |
487 | |
496 | $text .= "\nRuleset: " . $ruleset{$rules->{ruleset}}; |
488 | $text .= "\nRuleset: " . $ruleset{$rules->{ruleset}}; |
497 | |
489 | |
498 | $text .= "\nTime: "; |
490 | $text .= "\nTime: "; |
499 | |
491 | |
… | |
… | |
508 | } elsif ($rules->{timesys} == TIMESYS_CANADIAN) { |
500 | } elsif ($rules->{timesys} == TIMESYS_CANADIAN) { |
509 | $text .= util::format_time $rules->{time}; |
501 | $text .= util::format_time $rules->{time}; |
510 | $text .= sprintf " + %s/%d CAN", util::format_time $rules->{interval}, $rules->{count}; |
502 | $text .= sprintf " + %s/%d CAN", util::format_time $rules->{interval}, $rules->{count}; |
511 | } |
503 | } |
512 | |
504 | |
|
|
505 | $inlay->clear; |
513 | $self->{chat}->append_text ("<infoblock>$text</infoblock>"); |
506 | $inlay->append_text ("<infoblock>$text</infoblock>"); |
|
|
507 | } |
|
|
508 | |
|
|
509 | sub event_update_rules { |
|
|
510 | my ($self, $rules) = @_; |
|
|
511 | |
|
|
512 | $self->{rules} = $rules; |
|
|
513 | |
|
|
514 | if ($self->{user}) { |
|
|
515 | $self->{userpanel}[$_]->configure ($self->{app}, $self->{user}[$_], $rules) |
|
|
516 | for COLOUR_BLACK, COLOUR_WHITE; |
|
|
517 | } |
|
|
518 | |
|
|
519 | sound::play 3, "gamestart"; |
|
|
520 | |
|
|
521 | $self->draw_rules ($self->{rules_inlay}); |
514 | } |
522 | } |
515 | |
523 | |
516 | sub inject_resign_game { |
524 | sub inject_resign_game { |
517 | my ($self, $msg) = @_; |
525 | my ($self, $msg) = @_; |
518 | |
526 | |
… | |
… | |
532 | . "\nBlack Score " . (util::toxml $msg->{blackscore}->as_string) |
540 | . "\nBlack Score " . (util::toxml $msg->{blackscore}->as_string) |
533 | . "</infoblock>" |
541 | . "</infoblock>" |
534 | ); |
542 | ); |
535 | } |
543 | } |
536 | |
544 | |
|
|
545 | sub draw_challenge { |
|
|
546 | my ($self, $c) = @_; |
|
|
547 | |
|
|
548 | my $inlay = $c->{inlay}; |
|
|
549 | my $challenge = $c->{challenge}; |
|
|
550 | my $rules = $challenge->{rules}; |
|
|
551 | |
|
|
552 | my $as_black = $challenge->{user1}{name} eq $self->{conn}{name}; |
|
|
553 | my $opponent = $as_black ? $challenge->{user2} : $challenge->{user1}; |
|
|
554 | |
|
|
555 | $inlay->clear; |
|
|
556 | $inlay->append_text ("\n<challenge>Challenge to <user>" . $opponent->as_string . "</user></challenge>"); |
|
|
557 | $inlay->append_text ("\nHandicap: $rules->{handicap}"); |
|
|
558 | |
|
|
559 | #bless( ( |
|
|
560 | # gametype => 3, |
|
|
561 | # user1 => bless( { |
|
|
562 | # flags => 2633, |
|
|
563 | # name => 'dorkusx' |
|
|
564 | # }, 'KGS::User' ), |
|
|
565 | # rules => bless( { |
|
|
566 | # count => 5, |
|
|
567 | # time => 900, |
|
|
568 | # timesys => 2, |
|
|
569 | # interval => 30, |
|
|
570 | # komi => '6.5', |
|
|
571 | # size => 19, |
|
|
572 | # ruleset => 0, |
|
|
573 | # handicap => 0 |
|
|
574 | # }, 'KGS::Rules' ), |
|
|
575 | # user2 => bless( { |
|
|
576 | # flags => 436220808, |
|
|
577 | # name => 'Nerdamus' |
|
|
578 | # }, 'KGS::User' ) |
|
|
579 | # ), 'KGS::Challenge' ) |
|
|
580 | } |
|
|
581 | |
537 | sub event_challenge { |
582 | sub event_challenge { |
538 | my ($self, $challenge) = @_; |
583 | my ($self, $challenge) = @_; |
539 | |
584 | |
|
|
585 | my $as_black = $challenge->{user1}{name} eq $self->{conn}{name}; |
|
|
586 | my $opponent = $as_black ? $challenge->{user2} : $challenge->{user1}; |
|
|
587 | |
|
|
588 | my $c = $self->{challenge}{$opponent->{name}} ||= {}; |
|
|
589 | |
|
|
590 | $c->{inlay} ||= $self->{chat}->new_inlay; |
|
|
591 | $c->{challenge} = $challenge; |
|
|
592 | |
|
|
593 | $self->draw_challenge ($c); |
|
|
594 | |
540 | use KGS::Listener::Debug; |
595 | # require KGS::Listener::Debug; |
541 | $self->{chat}->append_text ("\n".KGS::Listener::Debug::dumpval($challenge)); |
596 | # $self->{chat}->append_text ("\n".KGS::Listener::Debug::dumpval($challenge)); |
542 | } |
597 | } |
543 | |
598 | |
544 | 1; |
599 | 1; |
545 | |
600 | |