Polyspiral: Difference between revisions

Content added Content deleted
m (→‎SDL full animation: palette rotate)
m (→‎SDL full animation: Add pause function)
Line 1,475: Line 1,475:


===SDL full animation===
===SDL full animation===
Uses the same basic algorithm but fully animated. Use the up / down arrow keys to speed up / slow down the update speed. Use left / right arrow keys to reverse the "direction" of angle change.
Uses the same basic algorithm but fully animated. Use the up / down arrow keys to speed up / slow down the update speed. Use left / right arrow keys to reverse the "direction" of angle change. Press Space bar to toggle animation freeze / thaw.


<lang perl6>use SDL2::Raw;
<lang perl6>use SDL2::Raw;
Line 1,496: Line 1,496:
my $event = SDL_Event.new;
my $event = SDL_Event.new;


enum ARROW_KEYS (
enum KEY_CODES (
K_UP => 82,
K_UP => 82,
K_DOWN => 81,
K_DOWN => 81,
K_LEFT => 80,
K_LEFT => 80,
K_RIGHT => 79,
K_RIGHT => 79,
K_SPACE => 44,
);
);


Line 1,509: Line 1,510:
my $sleep = 0.03;
my $sleep = 0.03;
my $dir = 1;
my $dir = 1;
my $incr = .01/π;
my $step = $incr;


main: loop {
main: loop {
$angle = ($angle + $dir * .01/π) % τ;
$angle = ($angle + $dir * $step) % τ;
($x1, $y1) = $width div 2, $height div 2;
($x1, $y1) = $width div 2, $height div 2;


Line 1,519: Line 1,522:
when *.type == QUIT { last main }
when *.type == QUIT { last main }
when *.type == KEYDOWN {
when *.type == KEYDOWN {
if ARROW_KEYS(.scancode) -> $comm {
if KEY_CODES(.scancode) -> $comm {
given $comm {
given $comm {
when 'K_LEFT' { $dir = -1 }
when 'K_LEFT' { $dir = -1 }
Line 1,525: Line 1,528:
when 'K_UP' { $sleep -= .01; $sleep = 0 if $sleep < 0 }
when 'K_UP' { $sleep -= .01; $sleep = 0 if $sleep < 0 }
when 'K_DOWN' { $sleep += .01 }
when 'K_DOWN' { $sleep += .01 }
when 'K_SPACE' { $step = $step ?? 0 !! $incr }
}
}
}
}
Line 1,538: Line 1,542:
($x1, $y1) = $x2, $y2;
($x1, $y1) = $x2, $y2;
}
}

@rgb.=rotate;
@rgb.=rotate;
SDL_RenderPresent($render);
SDL_RenderPresent($render);