--- kgsueme/kgsueme/game.pl 2004/06/01 10:11:14 1.113 +++ kgsueme/kgsueme/game.pl 2004/06/01 12:46:54 1.114 @@ -468,6 +468,7 @@ if (!$self->{board}) { $self->{left}->add ($self->{board} = new Gtk2::GoBoard size => $self->{size}); $self->{board}->signal_connect (button_release => sub { + return unless $self->{cur_board}; if ($_[1] == 1) { $self->{board_click}->($_[2], $_[3]) if $self->{board_click}; } @@ -496,6 +497,8 @@ } elsif ($self->{teacher_inlay}) { (delete $self->{teacher_inlay})->clear; } + + $self->update_cursor; } sub event_update_rules { @@ -547,10 +550,14 @@ sub update_cursor { my ($self) = @_; + return unless $self->{cur_board}; + my $running = $self->{showmove} == @{$self->{path}} && $self->is_active; delete $self->{board_click}; + $self->{colour} = COLOUR_BLACK;#d# + $self->{whosemove} = COLOUR_BLACK;#d# if ($self->{teacher} eq $self->{app}{conn}) { #TODO# # teaching mode not implemented $self->{button_pass}->set (label => "Pass", visible => 1, sensitive => 1); @@ -589,12 +596,16 @@ # normal move $self->{button_pass}->set (label => "Pass", visible => 1, sensitive => 1); $self->{board}->set (cursor => sub { - # if is_valid_move oder so#TODO# - $_[0] & (MARK_B | MARK_W) - ? $_[0] - : $_[0] | MARK_GRAYED | ($self->{colour} == COLOUR_WHITE ? MARK_W : MARK_B); + $self->{cur_board} + && $self->{cur_board}->is_valid_move ($self->{colour}, $_[1], $_[2], + $self->{rules}{ruleset} == RULESET_NEW_ZEALAND) + ? $_[0] | MARK_GRAYED | ($self->{colour} == COLOUR_WHITE ? MARK_W : MARK_B) + : $_[0]; }); $self->{board_click} = sub { + return unless + $self->{cur_board}->is_valid_move ($self->{colour}, $_[1], $_[2], + $self->{rules}{ruleset} == RULESET_NEW_ZEALAND); $self->send (game_move => channel => $self->{channel}, x => $_[0], y => $_[1]); $self->{board}->set (cursor => undef); delete $self->{board_click}; @@ -615,15 +626,8 @@ sub update_board { my ($self) = @_; - return unless $self->{path}; - $self->{board_label}->set_text ("Move " . ($self->{showmove} - 1)); - - $self->{cur_board} = new KGS::Game::Board $self->{size}; - $self->{cur_board}->interpret_path ([@{$self->{path}}[0 .. $self->{showmove} - 1]]); - - $self->{userpanel}[$_]->set_captures ($self->{cur_board}{captures}[$_]) - for COLOUR_WHITE, COLOUR_BLACK; + return unless $self->{path}; if ($self->{rules}{ruleset} == RULESET_JAPANESE) { if ($self->{curnode}{move} == 0) { @@ -642,6 +646,16 @@ } } + $self->{board_label}->set_text ("Move " . ($self->{showmove} - 1)); + + $self->{cur_board} = new KGS::Game::Board $self->{size}; + $self->{cur_board}->interpret_path ([@{$self->{path}}[0 .. $self->{showmove} - 1]]); + + $self->update_cursor; + + $self->{userpanel}[$_]->set_captures ($self->{cur_board}{captures}[$_]) + for COLOUR_WHITE, COLOUR_BLACK; + my $start_time = $self->{rules}{time}; if ($self->{showmove} == @{$self->{path}}) { @@ -670,8 +684,6 @@ } elsif ($self->{score_inlay}) { (delete $self->{score_inlay})->clear; } - - $self->update_cursor; } sub event_update_tree {