ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/kgsueme/kgsueme/game.pl
(Generate patch)

Comparing kgsueme/kgsueme/game.pl (file contents):
Revision 1.36 by pcg, Tue Jun 3 07:35:08 2003 UTC vs.
Revision 1.37 by pcg, Tue Jun 3 13:47:46 2003 UTC

1use utf8; 1use utf8;
2 2
3package game::goclock; 3package game::goclock;
4
5# Lo and Behold! I admit it! The rounding stuff etc.. in goclock
6# is completely borked.
4 7
5use Time::HiRes (); 8use Time::HiRes ();
6 9
7use KGS::Constants; 10use KGS::Constants;
8 11
18 $self->{format} = sub { "ERROR" }; 21 $self->{format} = sub { "ERROR" };
19 22
20 $self; 23 $self;
21} 24}
22 25
23sub format_time($) {
24 my ($time) = @_;
25
26 $time > 60*60
27 ? sprintf "%d:%02d:%02d", $time / (60 * 60), $time / 60 % 60, $time % 60
28 : sprintf "%d:%02d", $time / 60 % 60, $time % 60;
29}
30
31sub set_rules { 26sub set_rules {
32 my ($self, $timesys, $main, $interval, $count) = @_; 27 my ($self, $timesys, $main, $interval, $count) = @_;
33 28
34 if ($timesys == TIMESYS_ABSOLUTE) { 29 if ($timesys == TIMESYS_ABSOLUTE) {
35 $self->{set} = sub { $self->{time} = $_[0] }; 30 $self->{set} = sub { $self->{time} = $_[0] };
36 $self->{format} = sub { format_time $_[0] }; 31 $self->{format} = sub { util::format_time $_[0] };
37 32
38 } elsif ($timesys == TIMESYS_BYO_YOMI) { 33 } elsif ($timesys == TIMESYS_BYO_YOMI) {
39 my $low = $interval * $count; 34 my $low = $interval * $count;
40 35
41 $self->{set} = sub { $self->{time} = $_[0] }; 36 $self->{set} = sub { $self->{time} = $_[0] };
42 37
43 $self->{format} = sub { 38 $self->{format} = sub {
44 if ($_[0] > $low) { 39 if ($_[0] > $low) {
45 format_time $_[0] - $low; 40 util::format_time $_[0] - $low;
46 } else { 41 } else {
47 sprintf "%s (%d)", 42 sprintf "%s (%d)",
48 format_time int ($_[0] % $interval) || $interval, 43 util::format_time int (($_[0] - 1) % $interval + 1),
49 $_[0] / $interval; 44 $_[0] / $interval;
50 } 45 }
51 }; 46 };
52 47
53 } elsif ($timesys == TIMESYS_CANADIAN) { 48 } elsif ($timesys == TIMESYS_CANADIAN) {
54 $self->{set} = sub { $self->{time} = $_[0]; $self->{moves} = $_[1] }; 49 $self->{set} = sub { $self->{time} = $_[0]; $self->{moves} = $_[1] };
55 50
56 $self->{format} = sub { 51 $self->{format} = sub {
57 if (!$self->{moves}) { 52 if (!$self->{moves}) {
58 format_time $_[0] - $low; 53 util::format_time $_[0] - $low;
59 } else { 54 } else {
60 my $time = int($_[0] % $interval) || $interval; 55 my $time = util::format_time int (($_[0] - 1) % $interval + 1),
61 sprintf "%s/%d {%d}", 56 sprintf "%s/%d {%d}",
62 format_time $time, 57 util::format_time $time,
63 $self->{moves}, 58 $self->{moves},
64 int ($time / ($self->{moves} || 1)); 59 $time / ($self->{moves} || 1);
65 60
66 } 61 }
67 }; 62 };
68 63
69 } else { 64 } else {
147 $vbox->add ($self->{imagebox} = new Gtk2::VBox); 142 $vbox->add ($self->{imagebox} = new Gtk2::VBox);
148 143
149 $self; 144 $self;
150} 145}
151 146
152sub set_rules { 147sub configure {
153 my ($self, $rules) = @_; 148 my ($self, $name, $rules) = @_;
154 149
155 if ($self->{name}->get_text ne $rules->{player}[$self->{colour}]) { 150 if ($self->{name}->get_text ne $name) {
156 $self->{name}->set_text ($rules->{player}[$self->{colour}]); 151 $self->{name}->set_text ($name);
157 152
158 $self->{imagebox}->remove ($_) for $self->{imagebox}->get_children; 153 $self->{imagebox}->remove ($_) for $self->{imagebox}->get_children;
159 $self->{imagebox}->add (gtk::image_from_data undef); 154 $self->{imagebox}->add (gtk::image_from_data undef);
160 $self->{imagebox}->show_all; 155 $self->{imagebox}->show_all;
161 156
162 # the big picture... 157 # the big picture...
163 appwin::userpic ($rules->{player}[$self->{colour}], sub { 158 appwin::userpic ($name, sub {
164 return unless $self->{imagebox}; 159 return unless $self->{imagebox};
165 if ($_[0]) { 160 if ($_[0]) {
166 $self->{imagebox}->remove ($_) for $self->{imagebox}->get_children; 161 $self->{imagebox}->remove ($_) for $self->{imagebox}->get_children;
167 $self->{imagebox}->add (gtk::image_from_data $_[0]); 162 $self->{imagebox}->add (gtk::image_from_data $_[0]);
168 $self->{imagebox}->show_all; 163 $self->{imagebox}->show_all;
169 } 164 }
170 }); 165 });
171 } 166 }
172 167
173 $self->{clock}->set_rules (@{$rules->{rules}}{qw(timesys time interval count)}); 168 $self->{clock}->set_rules (@{$rules}{qw(timesys time interval count)});
174} 169}
175 170
176sub set_state { 171sub set_state {
177 my ($self, $captures, $timer, $when) = @_; 172 my ($self, $captures, $timer, $when) = @_;
178 173
678sub event_update_tree { 673sub event_update_tree {
679 my ($self) = @_; 674 my ($self) = @_;
680 675
681 $self->{path} = $self->get_path; 676 $self->{path} = $self->get_path;
682 677
683 $self->{userpanel}[WHITE]->set_rules ($self->{path}[0]); # should be onload only
684 $self->{userpanel}[BLACK]->set_rules ($self->{path}[0]); # should be onload only
685
686 if ($self->{moveadj}) { 678 if ($self->{moveadj}) {
687 my $upper = $self->{moveadj}->upper; 679 my $upper = $self->{moveadj}->upper;
688 my $pos = $self->{moveadj}->get_value; 680 my $pos = $self->{moveadj}->get_value;
689 681
690 $self->{moveadj}->upper (scalar @{$self->{path}}); 682 $self->{moveadj}->upper (scalar @{$self->{path}});
734} 726}
735 727
736sub event_update_game { 728sub event_update_game {
737 my ($self) = @_; 729 my ($self) = @_;
738 $self->SUPER::event_update_game; 730 $self->SUPER::event_update_game;
731
732 $self->{user}[BLACK] = $self->{user1};
733 $self->{user}[WHITE] = $self->{user2};
739 734
740 $text = "\n<header>Game Update</header>"; 735 $text = "\n<header>Game Update</header>";
741 736
742 $text .= "\nType: " . (util::toxml $gametype{$self->type}) 737 $text .= "\nType: " . (util::toxml $gametype{$self->type})
743 . " (" . (util::toxml $gameopt{$self->option}) . ")"; 738 . " (" . (util::toxml $gameopt{$self->option}) . ")";
745 $text .= " valid" if $self->is_valid; 740 $text .= " valid" if $self->is_valid;
746 $text .= " adjourned" if $self->is_adjourned; 741 $text .= " adjourned" if $self->is_adjourned;
747 $text .= " scored" if $self->is_scored; 742 $text .= " scored" if $self->is_scored;
748 $text .= " saved" if $self->is_saved; 743 $text .= " saved" if $self->is_saved;
749 744
750 $text .= "\nWhite: <user>" . (util::toxml $self->{user1}->as_string) . "</user>"; 745 $text .= "\nWhite: <user>" . (util::toxml $self->{user2}->as_string) . "</user>";
751 $text .= "\nBlack: <user>" . (util::toxml $self->{user2}->as_string) . "</user>"; 746 $text .= "\nBlack: <user>" . (util::toxml $self->{user1}->as_string) . "</user>";
752 $text .= "\nOwner: <user>" . (util::toxml $self->{user3}->as_string) . "</user>" if $self->{user3}->is_valid; 747 $text .= "\nOwner: <user>" . (util::toxml $self->{user3}->as_string) . "</user>" if $self->{user3}->is_valid;
753 748
754 if ($self->is_valid) { 749 if ($self->is_valid) {
755 $text .= "\nHandicap: " . $self->{handicap}; 750 $text .= "\nHandicap: " . $self->{handicap};
756 $text .= "\nKomi: " . $self->{komi}; 751 $text .= "\nKomi: " . $self->{komi};
767 $self->{left}->add ($self->{challenge}->widget); 762 $self->{left}->add ($self->{challenge}->widget);
768 } 763 }
769 $self->{left}->show_all; 764 $self->{left}->show_all;
770} 765}
771 766
767sub event_update_rules {
768 my ($self, $rules) = @_;
769
770 $self->{userpanel}[$_]->configure (
771 $self->{user}[$_]->as_string, # OMG.. better use self->user or something!!!
772 ) for BLACK, WHITE;
773
774 my $text = "\n<header>Game Rules</header>";
775
776 $text .= "\nRuleset: " . $ruleset{$rules->{ruleset}};
777
778 if ($rules->{timesys} != TIMESYS_NONE) {
779 # probably subtract interval * count..
780 $text .= "\nTime: "
781 . (util::format_time $rules->{time} - $rules->{interval} * $rules->{count})
782 . " + ";
783
784 $text .= sprintf "%d (%d)", $rules->{interval}, $rules->{count}
785 if $rules->{timesys} == TIMESYS_BYO_YOMI;
786 $text .= sprintf "%d/%d", $rules->{interval}, $rules->{count}
787 if $rules->{timesys} == TIMESYS_CANADIAN;
788
789 $text .= " " . $timesys{$rules->{timesys}};
790 }
791
792 $self->{text}->append_text ($text);
793}
794
772sub destroy { 795sub destroy {
773 my ($self) = @_; 796 my ($self) = @_;
774 (delete $self->{userpanel}[WHITE])->destroy if $self->{userpanel}[WHITE]; 797 $self->{userpanel}[$_] && (delete $self->{userpanel}[$_])->destroy
775 (delete $self->{userpanel}[BLACK])->destroy if $self->{userpanel}[BLACK]; 798 for BLACK, WHITE;
776 $self->SUPER::destroy; 799 $self->SUPER::destroy;
777 delete $appwin::gamelist->{game}{$self->{channel}}; 800 delete $appwin::gamelist->{game}{$self->{channel}};
778} 801}
779 802
7801; 8031;

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines