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.93 by root, Sat Mar 3 19:38:06 2007 UTC

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 },
185 my ($class, $string) = @_; 186 my ($class, $string) = @_;
186 187
187 my $mask; 188 my $mask;
188 my $value; 189 my $value;
189 190
191 if ($string =~ /^\s*\d+\s*$/) {
192 $mask = MOVE_ALL;
193 $value = $string+0;
194 } else {
190 for (split /\s+/, lc $string) { 195 for (split /\s+/, lc $string) {
191 if (s/^-//) { 196 if (s/^-//) {
192 $mask |= $MOVE_TYPE{$_}; 197 $mask |= $MOVE_TYPE{$_};
193 $value &= ~$MOVE_TYPE{$_}; 198 $value &= ~$MOVE_TYPE{$_};
194 } else { 199 } else {
195 $mask |= $MOVE_TYPE{$_}; 200 $mask |= $MOVE_TYPE{$_};
196 $value |= $MOVE_TYPE{$_}; 201 $value |= $MOVE_TYPE{$_};
202 }
197 } 203 }
198 } 204 }
199 205
200 (bless [$mask, $value], $class)->normalise 206 (bless [$mask, $value], $class)->normalise
201} 207}

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines