--- kgsueme/kgsueme/game.pl 2004/05/20 23:17:25 1.85 +++ kgsueme/kgsueme/game.pl 2004/05/21 03:18:15 1.86 @@ -20,7 +20,7 @@ $self->signal_connect (destroy => sub { $_[0]->stop }); $self->{set} = sub { }; - $self->{format} = sub { "ERROR" }; + $self->{format} = sub { "???" }; } sub configure { @@ -219,10 +219,6 @@ $hpane->pack1((my $vbox = new Gtk2::VBox), 1, 1); - # challenge - - $self->{challenge} = new challenge channel => $self->{channel}; - # board box (aspect/canvas) $self->{boardbox}->pack_start((my $frame = new Gtk2::Frame), 0, 1, 0); @@ -264,9 +260,11 @@ $hbox->add ($self->{userpanel}[$_] = new game::userpanel colour => $_) for COLOUR_WHITE, COLOUR_BLACK; - $vbox->pack_start (($self->{chat} = new chat), 1, 1, 0); + $vbox->pack_start (($self->{chat} = new superchat), 1, 1, 0); weaken $self->{chat}; + $self->{rules_inlay} = $self->{chat}->new_switchable_inlay ("Game Rules", sub { $self->draw_rules (@_) }, 1); + $self->{chat}->signal_connect (command => sub { my ($chat, $cmd, $arg) = @_; if ($cmd eq "rsave") { @@ -428,14 +426,13 @@ $self->{user}[COLOUR_WHITE] = $self->{user2}; # show board - if ($self->is_inprogress) { - $self->{left}->remove ($self->{challenge}->widget) if $self->{challenge} && $self->{boardbox}->parent; $self->{left}->add ($self->{boardbox}) unless $self->{boardbox}->parent; - } else { - $self->{left}->remove ($self->{boardbox}) if $self->{boardbox}->parent; - $self->{left}->add ($self->{challenge}->widget) unless $self->{challenge}->widget->parent; + if (my $ch = delete $self->{challenge}) { + (delete $_->{inlay})->clear for values %$ch; + } } + $self->{left}->show_all; # view text @@ -481,17 +478,12 @@ $self->{chat}->append_text ($text); } -sub event_update_rules { - my ($self, $rules) = @_; - - if ($self->{user}) { - $self->{userpanel}[$_]->configure ($self->{app}, $self->{user}[$_], $rules) - for COLOUR_BLACK, COLOUR_WHITE; - } +sub draw_rules { + my ($self, $inlay) = @_; - sound::play 3, "gamestart"; + my $rules = $self->{rules}; - my $text = "\n
Game Rules
"; + my $text = ""; $text .= "\nRuleset: " . $ruleset{$rules->{ruleset}}; @@ -510,7 +502,23 @@ $text .= sprintf " + %s/%d CAN", util::format_time $rules->{interval}, $rules->{count}; } - $self->{chat}->append_text ("$text"); + $inlay->clear; + $inlay->append_text ("$text"); +} + +sub event_update_rules { + my ($self, $rules) = @_; + + $self->{rules} = $rules; + + if ($self->{user}) { + $self->{userpanel}[$_]->configure ($self->{app}, $self->{user}[$_], $rules) + for COLOUR_BLACK, COLOUR_WHITE; + } + + sound::play 3, "gamestart"; + + $self->draw_rules ($self->{rules_inlay}); } sub inject_resign_game { @@ -534,11 +542,58 @@ ); } +sub draw_challenge { + my ($self, $c) = @_; + + my $inlay = $c->{inlay}; + my $challenge = $c->{challenge}; + my $rules = $challenge->{rules}; + + my $as_black = $challenge->{user1}{name} eq $self->{conn}{name}; + my $opponent = $as_black ? $challenge->{user2} : $challenge->{user1}; + + $inlay->clear; + $inlay->append_text ("\nChallenge to " . $opponent->as_string . ""); + $inlay->append_text ("\nHandicap: $rules->{handicap}"); + +#bless( ( +# gametype => 3, +# user1 => bless( { +# flags => 2633, +# name => 'dorkusx' +# }, 'KGS::User' ), +# rules => bless( { +# count => 5, +# time => 900, +# timesys => 2, +# interval => 30, +# komi => '6.5', +# size => 19, +# ruleset => 0, +# handicap => 0 +# }, 'KGS::Rules' ), +# user2 => bless( { +# flags => 436220808, +# name => 'Nerdamus' +# }, 'KGS::User' ) +# ), 'KGS::Challenge' ) +} + sub event_challenge { my ($self, $challenge) = @_; - use KGS::Listener::Debug; - $self->{chat}->append_text ("\n".KGS::Listener::Debug::dumpval($challenge)); + my $as_black = $challenge->{user1}{name} eq $self->{conn}{name}; + my $opponent = $as_black ? $challenge->{user2} : $challenge->{user1}; + + my $c = $self->{challenge}{$opponent->{name}} ||= {}; + + $c->{inlay} ||= $self->{chat}->new_inlay; + $c->{challenge} = $challenge; + + $self->draw_challenge ($c); + +# require KGS::Listener::Debug; +# $self->{chat}->append_text ("\n".KGS::Listener::Debug::dumpval($challenge)); } 1;