--- 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";
+ 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;