Support for left sided sprite for sayers, ticks_per_frame for sprites

This commit is contained in:
Ryan Shepherd 2018-10-04 13:54:22 -04:00
parent e41161a4b0
commit 39be8fdfd6
3 changed files with 52 additions and 13 deletions

View File

@ -25,9 +25,20 @@ sub DrawSpeech {
my $speech_border = 3; my $speech_border = 3;
my $sprite = GetAsset($sayer->{'Sprite'}); my $sprite = GetAsset($sayer->{'Sprite'});
my $sprite_x = $app->width() - $sprite->clip()->w(); my $sprite_x = 0;
my $sprite_y = $app->height() - $sprite->clip()->h(); my $speech_x = 0;
my $sprite_w = $sprite->clip()->w();
my $sprite_h = $sprite->clip()->h(); my $sprite_h = $sprite->clip()->h();
my $sprite_y = $app->height() - $sprite_h;
my $speech_y = $sprite_y;
if($sayer->{'DrawLeft'}) {
$speech_x = $sprite_w;
} else {
$sprite_x = $app->width() - $sprite_w;
}
$sprite = undef; # ShowSprite may unload this, we don't want to keep a handle to it $sprite = undef; # ShowSprite may unload this, we don't want to keep a handle to it
ShowSprite('_SayerSprite', $sayer->{'Sprite'}, $sprite_x, $sprite_y, 254, @{ $sayer->{'SpriteOpts'} }); ShowSprite('_SayerSprite', $sayer->{'Sprite'}, $sprite_x, $sprite_y, 254, @{ $sayer->{'SpriteOpts'} });
@ -35,7 +46,7 @@ sub DrawSpeech {
$text_obj->color( $sayer->{'TextColor'} ); $text_obj->color( $sayer->{'TextColor'} );
$text_obj->text( $text ); $text_obj->text( $text );
my $surface = SDLx::Surface->new( width => $sprite_x, my $surface = SDLx::Surface->new( width => $app->width() - $sprite_w,
height => $sprite_h, height => $sprite_h,
color => [0, 0, 0, 255], color => [0, 0, 0, 255],
); );
@ -50,12 +61,11 @@ sub DrawSpeech {
my $text_y = ($surface->height() - $text_obj->h())/2; my $text_y = ($surface->height() - $text_obj->h())/2;
$text_obj->write_xy( $surface, $text_x, $text_y ); $text_obj->write_xy( $surface, $text_x, $text_y );
$sprite = SDLx::Sprite->new( surface => $surface );
$VisibleSprites{'_SayerText'} = { $VisibleSprites{'_SayerText'} = {
'Depth' => 255, 'Depth' => 255,
'X' => 0, 'X' => $speech_x,
'Y' => $app->height() - $surface->height(), 'Y' => $speech_y,
'Sprite' => $sprite, 'Sprite' => SDLx::Sprite->new( surface => $surface ),
}; };
return 1; return 1;
@ -83,15 +93,25 @@ sub ShowSprite {
foreach my $o (@opt) { foreach my $o (@opt) {
my($name, $val)=$o=~/^\s*(\S+?)=(\S*)/; my($name, $val)=$o=~/^\s*(\S+?)=(\S*)/;
$name = $o unless($name); $name = $o unless($name);
if($o eq 'Reverse' || $o eq 'Circular') { $name = lc($name);
$a->type($o); if($name eq 'reverse') {
$a->type('Reverse');
} elsif($name eq 'circular') {
$a->type('Circular');
} elsif($name eq 'max_loops') { } elsif($name eq 'max_loops') {
$a->max_loops($val); $a->max_loops($val);
} elsif($o eq 'flip') { } elsif($name eq 'flip') {
# Don't want to flip back and forth every time # Don't want to flip back and forth every time
UnloadAsset($file); UnloadAsset($file);
my $s=$a->surface(); my $s=$a->surface();
$a->surface( FlipSurface($s) ); $a->surface( FlipSurface($s) );
} elsif($name eq 'ticks') {
$val = 1 unless($val);
if($val != 1) {
# Keep a personal copy to support sprites at different speeds from the same asset
UnloadAsset($file);
}
$a->ticks_per_frame($val);
} else { } else {
LogData(WARN, "Unknown option in ShowSprite '$o' - '$name'='$val'"); LogData(WARN, "Unknown option in ShowSprite '$o' - '$name'='$val'");
} }

View File

@ -186,12 +186,25 @@ sub AddSayer {
my @textcolor=($r, $g, $b, $a); my @textcolor=($r, $g, $b, $a);
$textcolor[3] = 255 unless(defined $a); $textcolor[3] = 255 unless(defined $a);
my $drawleft = 0;
my @sprite_opts;
foreach my $opt (@opts) {
if(lc($opt) eq 'left') {
$drawleft = 1;
} else {
push @sprite_opts, $opt;
}
}
$sayers{$name} = { $sayers{$name} = {
'Name' => $name, 'Name' => $name,
'DisplayName' => StringSubst($displayname), 'DisplayName' => StringSubst($displayname),
'Sprite' => $sprite, 'Sprite' => $sprite,
'TextColor' => \@textcolor, 'TextColor' => \@textcolor,
'SpriteOpts' => \@opts, 'DrawLeft' => $drawleft,
'SpriteOpts' => \@sprite_opts,
}; };
} }

View File

@ -2,6 +2,7 @@ __init__:
SetBackground 128 128 128 255 SetBackground 128 128 128 255
SetAssetOption spritesheet.png Animated SetAssetOption spritesheet.png Animated
AddSayer h "Hermione" aka01.png 200 200 200 255 AddSayer h "Hermione" aka01.png 200 200 200 255
AddSayer h2 "Hermione2" aka05.png 200 200 200 255 left flip
TargetFPS = 20 TargetFPS = 20
ResourceDir = "Resources" ResourceDir = "Resources"
@ -14,15 +15,20 @@ drawroom:
Show fireplace fireplace.png 600 150 11 Show fireplace fireplace.png 600 150 11
Show candler candle.png 400 100 11 flip Show candler candle.png 400 100 11 flip
Show candlel candle.png 240 100 11 Show candlel candle.png 240 100 11
Show desk 11_genie_00.png 230 220 13
Show fireplacea fireplace_fire.vs 575 147 12 Show fireplacea fireplace_fire.vs 575 147 12
Show candlera fire.vs 400 95 12 flip Show candlera fire.vs 400 95 12 flip
Show candlela fire.vs 240 95 12 Show candlela fire.vs 240 95 12
Show desk 11_genie_00.png 230 220 13
Show hermione spritesheet.png 450 310 14 reverse ticks=3
convo: convo:
Wait Wait
h "Continue..." h "Continue..."
Wait
h2 "Continue2..."
#RecompileScripts drawroom RecompileScripts drawroom
Jump convo Jump convo