ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/deliantra/Deliantra/Deliantra.pm
(Generate patch)

Comparing deliantra/Deliantra/Deliantra.pm (file contents):
Revision 1.91 by root, Sat Mar 3 19:06:03 2007 UTC vs.
Revision 1.95 by root, Mon Mar 5 01:10:30 2007 UTC

4 4
5=cut 5=cut
6 6
7package Crossfire; 7package Crossfire;
8 8
9our $VERSION = '0.96'; 9our $VERSION = '0.97';
10 10
11use strict; 11use strict;
12 12
13use base 'Exporter'; 13use base 'Exporter';
14 14
157 157
158{ 158{
159 package Crossfire::MoveType; 159 package Crossfire::MoveType;
160 160
161 use overload 161 use overload
162 '=' => sub { bless [@{$_[0]}], ref $_[0] },
162 '""' => \&as_string, 163 '""' => \&as_string,
163 '>=' => sub { $_[0][0] & $MOVE_TYPE{$_[1]} ? $_[0][1] & $MOVE_TYPE{$_[1]} : undef }, 164 '>=' => sub { $_[0][0] & $MOVE_TYPE{$_[1]} ? $_[0][1] & $MOVE_TYPE{$_[1]} : undef },
164 '+=' => sub { $_[0][0] |= $MOVE_TYPE{$_[1]}; $_[0][1] |= $MOVE_TYPE{$_[1]}; &normalise }, 165 '+=' => sub { $_[0][0] |= $MOVE_TYPE{$_[1]}; $_[0][1] |= $MOVE_TYPE{$_[1]}; &normalise },
165 '-=' => sub { $_[0][0] |= $MOVE_TYPE{$_[1]}; $_[0][1] &= ~$MOVE_TYPE{$_[1]}; &normalise }, 166 '-=' => sub { $_[0][0] |= $MOVE_TYPE{$_[1]}; $_[0][1] &= ~$MOVE_TYPE{$_[1]}; &normalise },
166 '/=' => sub { $_[0][0] &= ~$MOVE_TYPE{$_[1]}; &normalise }, 167 '/=' => sub { $_[0][0] &= ~$MOVE_TYPE{$_[1]}; &normalise },
167 'x=' => sub { 168 'x=' => sub {
168 my $cur = $_[0] >= $_[1]; 169 my $cur = $_[0] >= $_[1];
169 if (!defined $cur) { 170 if (!defined $cur) {
171 if ($_[0] >= "all") {
172 $_[0] -= $_[1];
173 } else {
170 $_[0] += $_[1]; 174 $_[0] += $_[1];
175 }
171 } elsif ($cur) { 176 } elsif ($cur) {
172 $_[0] -= $_[1]; 177 $_[0] -= $_[1];
173 } else { 178 } else {
174 $_[0] /= $_[1]; 179 $_[0] /= $_[1];
175 } 180 }
185 my ($class, $string) = @_; 190 my ($class, $string) = @_;
186 191
187 my $mask; 192 my $mask;
188 my $value; 193 my $value;
189 194
195 if ($string =~ /^\s*\d+\s*$/) {
196 $mask = MOVE_ALL;
197 $value = $string+0;
198 } else {
190 for (split /\s+/, lc $string) { 199 for (split /\s+/, lc $string) {
191 if (s/^-//) { 200 if (s/^-//) {
192 $mask |= $MOVE_TYPE{$_}; 201 $mask |= $MOVE_TYPE{$_};
193 $value &= ~$MOVE_TYPE{$_}; 202 $value &= ~$MOVE_TYPE{$_};
194 } else { 203 } else {
195 $mask |= $MOVE_TYPE{$_}; 204 $mask |= $MOVE_TYPE{$_};
196 $value |= $MOVE_TYPE{$_}; 205 $value |= $MOVE_TYPE{$_};
206 }
197 } 207 }
198 } 208 }
199 209
200 (bless [$mask, $value], $class)->normalise 210 (bless [$mask, $value], $class)->normalise
201} 211}

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines