… | |
… | |
466 | # show board |
466 | # show board |
467 | if ($self->is_inprogress) { |
467 | if ($self->is_inprogress) { |
468 | if (!$self->{board}) { |
468 | if (!$self->{board}) { |
469 | $self->{left}->add ($self->{board} = new Gtk2::GoBoard size => $self->{size}); |
469 | $self->{left}->add ($self->{board} = new Gtk2::GoBoard size => $self->{size}); |
470 | $self->{board}->signal_connect (button_release => sub { |
470 | $self->{board}->signal_connect (button_release => sub { |
|
|
471 | return unless $self->{cur_board}; |
471 | if ($_[1] == 1) { |
472 | if ($_[1] == 1) { |
472 | $self->{board_click}->($_[2], $_[3]) if $self->{board_click}; |
473 | $self->{board_click}->($_[2], $_[3]) if $self->{board_click}; |
473 | } |
474 | } |
474 | }); |
475 | }); |
475 | $self->{board}->show_all; |
476 | $self->{board}->show_all; |
… | |
… | |
494 | $self->{teacher_inlay}->append_text ("\n<header>Teacher:</header> <user>" |
495 | $self->{teacher_inlay}->append_text ("\n<header>Teacher:</header> <user>" |
495 | . (util::toxml $self->{teacher}) . "</user>"); |
496 | . (util::toxml $self->{teacher}) . "</user>"); |
496 | } elsif ($self->{teacher_inlay}) { |
497 | } elsif ($self->{teacher_inlay}) { |
497 | (delete $self->{teacher_inlay})->clear; |
498 | (delete $self->{teacher_inlay})->clear; |
498 | } |
499 | } |
|
|
500 | |
|
|
501 | $self->update_cursor; |
499 | } |
502 | } |
500 | |
503 | |
501 | sub event_update_rules { |
504 | sub event_update_rules { |
502 | my ($self, $rules) = @_; |
505 | my ($self, $rules) = @_; |
503 | |
506 | |
… | |
… | |
545 | } |
548 | } |
546 | |
549 | |
547 | sub update_cursor { |
550 | sub update_cursor { |
548 | my ($self) = @_; |
551 | my ($self) = @_; |
549 | |
552 | |
|
|
553 | return unless $self->{cur_board}; |
|
|
554 | |
550 | my $running = $self->{showmove} == @{$self->{path}} && $self->is_active; |
555 | my $running = $self->{showmove} == @{$self->{path}} && $self->is_active; |
551 | |
556 | |
552 | delete $self->{board_click}; |
557 | delete $self->{board_click}; |
553 | |
558 | |
|
|
559 | $self->{colour} = COLOUR_BLACK;#d# |
|
|
560 | $self->{whosemove} = COLOUR_BLACK;#d# |
554 | if ($self->{teacher} eq $self->{app}{conn}) { |
561 | if ($self->{teacher} eq $self->{app}{conn}) { |
555 | #TODO# # teaching mode not implemented |
562 | #TODO# # teaching mode not implemented |
556 | $self->{button_pass}->set (label => "Pass", visible => 1, sensitive => 1); |
563 | $self->{button_pass}->set (label => "Pass", visible => 1, sensitive => 1); |
557 | $self->{button_undo}->hide; |
564 | $self->{button_undo}->hide; |
558 | $self->{button_resign}->hide; |
565 | $self->{button_resign}->hide; |
… | |
… | |
587 | |
594 | |
588 | } elsif ($self->{colour} == $self->{whosemove}) { |
595 | } elsif ($self->{colour} == $self->{whosemove}) { |
589 | # normal move |
596 | # normal move |
590 | $self->{button_pass}->set (label => "Pass", visible => 1, sensitive => 1); |
597 | $self->{button_pass}->set (label => "Pass", visible => 1, sensitive => 1); |
591 | $self->{board}->set (cursor => sub { |
598 | $self->{board}->set (cursor => sub { |
592 | # if is_valid_move oder so#TODO# |
599 | $self->{cur_board} |
593 | $_[0] & (MARK_B | MARK_W) |
600 | && $self->{cur_board}->is_valid_move ($self->{colour}, $_[1], $_[2], |
594 | ? $_[0] |
601 | $self->{rules}{ruleset} == RULESET_NEW_ZEALAND) |
595 | : $_[0] | MARK_GRAYED | ($self->{colour} == COLOUR_WHITE ? MARK_W : MARK_B); |
602 | ? $_[0] | MARK_GRAYED | ($self->{colour} == COLOUR_WHITE ? MARK_W : MARK_B) |
|
|
603 | : $_[0]; |
596 | }); |
604 | }); |
597 | $self->{board_click} = sub { |
605 | $self->{board_click} = sub { |
|
|
606 | return unless |
|
|
607 | $self->{cur_board}->is_valid_move ($self->{colour}, $_[1], $_[2], |
|
|
608 | $self->{rules}{ruleset} == RULESET_NEW_ZEALAND); |
598 | $self->send (game_move => channel => $self->{channel}, x => $_[0], y => $_[1]); |
609 | $self->send (game_move => channel => $self->{channel}, x => $_[0], y => $_[1]); |
599 | $self->{board}->set (cursor => undef); |
610 | $self->{board}->set (cursor => undef); |
600 | delete $self->{board_click}; |
611 | delete $self->{board_click}; |
601 | $self->{button_pass}->sensitive (0); |
612 | $self->{button_pass}->sensitive (0); |
602 | }; |
613 | }; |
… | |
… | |
613 | } |
624 | } |
614 | } |
625 | } |
615 | |
626 | |
616 | sub update_board { |
627 | sub update_board { |
617 | my ($self) = @_; |
628 | my ($self) = @_; |
|
|
629 | |
618 | return unless $self->{path}; |
630 | return unless $self->{path}; |
619 | |
|
|
620 | $self->{board_label}->set_text ("Move " . ($self->{showmove} - 1)); |
|
|
621 | |
|
|
622 | $self->{cur_board} = new KGS::Game::Board $self->{size}; |
|
|
623 | $self->{cur_board}->interpret_path ([@{$self->{path}}[0 .. $self->{showmove} - 1]]); |
|
|
624 | |
|
|
625 | $self->{userpanel}[$_]->set_captures ($self->{cur_board}{captures}[$_]) |
|
|
626 | for COLOUR_WHITE, COLOUR_BLACK; |
|
|
627 | |
631 | |
628 | if ($self->{rules}{ruleset} == RULESET_JAPANESE) { |
632 | if ($self->{rules}{ruleset} == RULESET_JAPANESE) { |
629 | if ($self->{curnode}{move} == 0) { |
633 | if ($self->{curnode}{move} == 0) { |
630 | $self->{whosemove} = $self->{handicap} ? COLOUR_WHITE : COLOUR_BLACK; |
634 | $self->{whosemove} = $self->{handicap} ? COLOUR_WHITE : COLOUR_BLACK; |
631 | } else { |
635 | } else { |
… | |
… | |
640 | } else { |
644 | } else { |
641 | $self->{whosemove} = 1 - $self->{cur_board}{last}; |
645 | $self->{whosemove} = 1 - $self->{cur_board}{last}; |
642 | } |
646 | } |
643 | } |
647 | } |
644 | |
648 | |
|
|
649 | $self->{board_label}->set_text ("Move " . ($self->{showmove} - 1)); |
|
|
650 | |
|
|
651 | $self->{cur_board} = new KGS::Game::Board $self->{size}; |
|
|
652 | $self->{cur_board}->interpret_path ([@{$self->{path}}[0 .. $self->{showmove} - 1]]); |
|
|
653 | |
|
|
654 | $self->update_cursor; |
|
|
655 | |
|
|
656 | $self->{userpanel}[$_]->set_captures ($self->{cur_board}{captures}[$_]) |
|
|
657 | for COLOUR_WHITE, COLOUR_BLACK; |
|
|
658 | |
645 | my $start_time = $self->{rules}{time}; |
659 | my $start_time = $self->{rules}{time}; |
646 | |
660 | |
647 | if ($self->{showmove} == @{$self->{path}}) { |
661 | if ($self->{showmove} == @{$self->{path}}) { |
648 | $self->{timers} = [ |
662 | $self->{timers} = [ |
649 | [$self->{lastmove_time}, @{$self->{cur_board}{timer}[0]}], |
663 | [$self->{lastmove_time}, @{$self->{cur_board}{timer}[0]}], |
… | |
… | |
668 | . "Black: $self->{cur_board}{score}[COLOUR_BLACK]" |
682 | . "Black: $self->{cur_board}{score}[COLOUR_BLACK]" |
669 | . "</score>"); |
683 | . "</score>"); |
670 | } elsif ($self->{score_inlay}) { |
684 | } elsif ($self->{score_inlay}) { |
671 | (delete $self->{score_inlay})->clear; |
685 | (delete $self->{score_inlay})->clear; |
672 | } |
686 | } |
673 | |
|
|
674 | $self->update_cursor; |
|
|
675 | } |
687 | } |
676 | |
688 | |
677 | sub event_update_tree { |
689 | sub event_update_tree { |
678 | my ($self) = @_; |
690 | my ($self) = @_; |
679 | |
691 | |