Progress toward sprite flipping

This commit is contained in:
Ryan Shepherd 2018-10-01 17:07:07 -04:00
parent 61fb64c10a
commit d03c6d2093
2 changed files with 35 additions and 9 deletions

View File

@ -90,10 +90,8 @@ sub ShowSprite {
} elsif($name eq 'max_loops') {
$a->max_loops($val);
} elsif($o eq 'flip') {
# FIXME - This doesn't work
my $s=$a->surface();
$s->flip();
$a->surface($s);
$a->surface( FlipSurface($s) );
} else {
LogData(WARN, "Unknown option in ShowSprite '$o' - '$name'='$val'");
}
@ -155,4 +153,32 @@ sub RenderSprites {
}
}
# Fixme -- Still appears broken, but closer
sub FlipSurface {
my $src=shift(@_);
my $dst = SDLx::Surface->new( width => $src->width(),
height => $src->height(),
format => $src->format(),
flags => $src->flags(),
color => $src->get_pixel( 0, 0 ),
);
my $w = $src->width();
for(my $y = 0; $y < $src->height(); $y++) {
for(my $x = 0; $x < $w; $x++) {
my $pixel = $src->get_pixel( $y, $x );
$dst->set_pixel($y, $w-($x+1), $pixel);
}
}
return $dst;
}
1;

View File

@ -216,13 +216,13 @@ sub EvalString {
#LogData(DEBUG, "Inserting space before last character");
}
LogData(DEBUG, "Val is '$val'");
#LogData(DEBUG, "Val is '$val'");
# Tokenize
my @tokens = split(/\s+/,$val);
for(my $i=0;$i<@tokens-0;$i++) { LogData(DEBUG, "Pass 1 Token [%i], '%s'", $i, $tokens[$i]); }
#for(my $i=0;$i<@tokens-0;$i++) { LogData(DEBUG, "Pass 1 Token [%i], '%s'", $i, $tokens[$i]); }
for(my $i=0;$i<@tokens-0;$i++) {
my $t = $tokens[$i];
@ -237,17 +237,17 @@ sub EvalString {
}
}
for(my $i=0;$i<@tokens-0;$i++) { LogData(DEBUG, "Pass 2 Token [%i], '%s'", $i, $tokens[$i]); }
#for(my $i=0;$i<@tokens-0;$i++) { LogData(DEBUG, "Pass 2 Token [%i], '%s'", $i, $tokens[$i]); }
my $eval_str = '$eval_res = ' . join(' ', @tokens) . ';';
LogData(DEBUG, "About to eval '$eval_str'");
#LogData(DEBUG, "About to eval '$eval_str'");
my $eval_res;
eval $eval_str;
if($@) {
LogData(ERROR, "Error in eval: $@");
LogData(ERROR, "Error in eval '$eval_str': $@");
return 0;
}
LogData(DEBUG, "Got result of '$eval_res'");
#LogData(DEBUG, "Got result of '$eval_res'");
return $eval_res;
}