Support for sprite sheets
This commit is contained in:
parent
8b8c142bdb
commit
4fc7cede49
|
|
@ -11,7 +11,7 @@ use PerlRPG::Game;
|
|||
|
||||
use vars qw/%files @ISA @EXPORT @EXPORT_OK/;
|
||||
@ISA = qw/Exporter/;
|
||||
@EXPORT = qw/ScanDirectory GetAsset GetAssetType LoadAssets UnloadAsset/;
|
||||
@EXPORT = qw/ScanDirectory GetAsset GetAssetType LoadAssets UnloadAsset SetAssetOption/;
|
||||
@EXPORT_OK = ();
|
||||
|
||||
# Check %files cache for file location, otherwise search in path
|
||||
|
|
@ -113,6 +113,22 @@ sub UnloadAsset {
|
|||
}
|
||||
}
|
||||
|
||||
sub SetAssetOption {
|
||||
my($file, $opt)=@_;
|
||||
if(!exists $files{$file}) {
|
||||
FindFile($file);
|
||||
if(!exists $files{$file}) {
|
||||
LogData(ERROR, "Unable to find asset '$file' for SetAssetOption");
|
||||
return undef;
|
||||
}
|
||||
}
|
||||
|
||||
if($files{$file}{'Loaded'}) {
|
||||
UnloadAsset($file);
|
||||
}
|
||||
$files{$file}{'Opt'} = $opt;
|
||||
return 1;
|
||||
}
|
||||
|
||||
sub LoadAsset {
|
||||
my($file, $filename)=@_;
|
||||
|
|
@ -137,15 +153,11 @@ sub LoadAsset {
|
|||
my($ext)=$file=~/.+\.(.+?)$/;
|
||||
$ext = lc($ext);
|
||||
if(grep { $_ eq $ext } (qw/png jpg jpeg bmp/)) {
|
||||
$files{$file}{'Type'} = 'Sprite';
|
||||
my $sprite = SDLx::Sprite->new(
|
||||
image => $files{$file}{'Location'},
|
||||
);
|
||||
if(!$sprite) {
|
||||
LogData(ERROR, "Unable to load sprite '$filename': $!");
|
||||
return undef;
|
||||
if($files{$file}{'Opt'} eq 'Animated') {
|
||||
LoadAnimatedSprite($file, $filename) || return;
|
||||
} else {
|
||||
LoadSprite($file, $filename) || return;
|
||||
}
|
||||
$files{$file}{'Sprite'} = $sprite;
|
||||
} elsif($ext eq 'vs') {
|
||||
unless(open(IN, $filename)) {
|
||||
LogData(ERROR, "Unable to load '$filename': $!");
|
||||
|
|
@ -174,6 +186,43 @@ sub LoadAsset {
|
|||
return $files{$file};
|
||||
}
|
||||
|
||||
sub LoadSprite {
|
||||
my($file, $filename)=@_;
|
||||
$files{$file}{'Type'} = 'Sprite';
|
||||
my $sprite = SDLx::Sprite->new(
|
||||
image => $filename,
|
||||
);
|
||||
if(!$sprite) {
|
||||
LogData(ERROR, "Unable to load sprite '$filename': $!");
|
||||
return undef;
|
||||
}
|
||||
$files{$file}{'Sprite'} = $sprite;
|
||||
return 1;
|
||||
}
|
||||
|
||||
sub LoadAnimatedSprite {
|
||||
my($file, $filename)=@_;
|
||||
$files{$file}{'Type'} = 'ASprite';
|
||||
my $s1 = SDLx::Sprite->new(
|
||||
image => $filename,
|
||||
);
|
||||
my $surface = $s1->surface();
|
||||
|
||||
my $sprite = SDLx::Sprite::Animated->new(
|
||||
surface => $surface,
|
||||
width => $surface->width(),
|
||||
height => $surface->width(),
|
||||
step_x => $surface->width(),
|
||||
step_y => $surface->width(),
|
||||
);
|
||||
if(!$sprite) {
|
||||
LogData(ERROR, "Unable to load ASprite '$filename': $!");
|
||||
return undef;
|
||||
}
|
||||
$files{$file}{'ASprite'} = $sprite;
|
||||
return 1;
|
||||
}
|
||||
|
||||
sub LoadVirtualSprite {
|
||||
my($name, @files)=@_;
|
||||
|
||||
|
|
|
|||
|
|
@ -1,8 +1,14 @@
|
|||
__init__:
|
||||
SetBackground 128 128 128 255
|
||||
Show aka aka.vs 0 0 1 type Reverse
|
||||
Show aka2 aka.vs 100 0 2
|
||||
SetAssetOption spritesheet.png Animated
|
||||
|
||||
drawimg:
|
||||
Show aka spritesheet.png 0 0 1 type Reverse
|
||||
|
||||
#Show aka aka.vs 0 0 1 type Reverse
|
||||
#Show aka2 aka.vs 100 0 2
|
||||
|
||||
Jump donothing
|
||||
|
||||
donothing:
|
||||
Wait
|
||||
Jump drawimg
|
||||
Jump donothing
|
||||
|
|
|
|||
6
main.pl
6
main.pl
|
|
@ -15,12 +15,6 @@ ScanDirectory($asset_directory);
|
|||
my $app = InitApp($screen_width, $screen_height);
|
||||
CompileScripts();
|
||||
RunScript('__init__');
|
||||
|
||||
|
||||
#SetBackgroundColor(128, 128, 128, 255);
|
||||
#ShowSprite('aka', 'aka.vs', 0, 0, 1);
|
||||
#ShowSprite('aka2', 'aka.vs', 100, 0, 2);
|
||||
|
||||
Run();
|
||||
|
||||
LogData(STATUS, "Tearing down");
|
||||
|
|
|
|||
Loading…
Reference in New Issue