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/;
|
use vars qw/%files @ISA @EXPORT @EXPORT_OK/;
|
||||||
@ISA = qw/Exporter/;
|
@ISA = qw/Exporter/;
|
||||||
@EXPORT = qw/ScanDirectory GetAsset GetAssetType LoadAssets UnloadAsset/;
|
@EXPORT = qw/ScanDirectory GetAsset GetAssetType LoadAssets UnloadAsset SetAssetOption/;
|
||||||
@EXPORT_OK = ();
|
@EXPORT_OK = ();
|
||||||
|
|
||||||
# Check %files cache for file location, otherwise search in path
|
# 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 {
|
sub LoadAsset {
|
||||||
my($file, $filename)=@_;
|
my($file, $filename)=@_;
|
||||||
|
|
@ -137,15 +153,11 @@ sub LoadAsset {
|
||||||
my($ext)=$file=~/.+\.(.+?)$/;
|
my($ext)=$file=~/.+\.(.+?)$/;
|
||||||
$ext = lc($ext);
|
$ext = lc($ext);
|
||||||
if(grep { $_ eq $ext } (qw/png jpg jpeg bmp/)) {
|
if(grep { $_ eq $ext } (qw/png jpg jpeg bmp/)) {
|
||||||
$files{$file}{'Type'} = 'Sprite';
|
if($files{$file}{'Opt'} eq 'Animated') {
|
||||||
my $sprite = SDLx::Sprite->new(
|
LoadAnimatedSprite($file, $filename) || return;
|
||||||
image => $files{$file}{'Location'},
|
} else {
|
||||||
);
|
LoadSprite($file, $filename) || return;
|
||||||
if(!$sprite) {
|
|
||||||
LogData(ERROR, "Unable to load sprite '$filename': $!");
|
|
||||||
return undef;
|
|
||||||
}
|
}
|
||||||
$files{$file}{'Sprite'} = $sprite;
|
|
||||||
} elsif($ext eq 'vs') {
|
} elsif($ext eq 'vs') {
|
||||||
unless(open(IN, $filename)) {
|
unless(open(IN, $filename)) {
|
||||||
LogData(ERROR, "Unable to load '$filename': $!");
|
LogData(ERROR, "Unable to load '$filename': $!");
|
||||||
|
|
@ -174,6 +186,43 @@ sub LoadAsset {
|
||||||
return $files{$file};
|
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 {
|
sub LoadVirtualSprite {
|
||||||
my($name, @files)=@_;
|
my($name, @files)=@_;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,8 +1,14 @@
|
||||||
__init__:
|
__init__:
|
||||||
SetBackground 128 128 128 255
|
SetBackground 128 128 128 255
|
||||||
Show aka aka.vs 0 0 1 type Reverse
|
SetAssetOption spritesheet.png Animated
|
||||||
Show aka2 aka.vs 100 0 2
|
|
||||||
|
|
||||||
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
|
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);
|
my $app = InitApp($screen_width, $screen_height);
|
||||||
CompileScripts();
|
CompileScripts();
|
||||||
RunScript('__init__');
|
RunScript('__init__');
|
||||||
|
|
||||||
|
|
||||||
#SetBackgroundColor(128, 128, 128, 255);
|
|
||||||
#ShowSprite('aka', 'aka.vs', 0, 0, 1);
|
|
||||||
#ShowSprite('aka2', 'aka.vs', 100, 0, 2);
|
|
||||||
|
|
||||||
Run();
|
Run();
|
||||||
|
|
||||||
LogData(STATUS, "Tearing down");
|
LogData(STATUS, "Tearing down");
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue