/lib/pods/SDLx/Controller/Interface.pod
Unknown | 128 lines | 76 code | 52 blank | 0 comment | 0 complexity | 4d325555b25be060f1d6837ec526dcf4 MD5 | raw file
Possible License(s): AGPL-1.0, GPL-2.0
- =pod
- =head1 NAME
- SDLx::Controller::Interface - Interface Physics and Rendering with the Controller with callbacks
- =head1 CATEGORY
- Extension, Controller
- =head1 SYNOPSIS
- use SDL;
- use SDLx::App;
- use SDLx::Controller::Interface;
- #SDLx::App is a controller
- my $app = SDLx::App->new(width => 200, height => 200 );
- my $ball = SDLx::Controller::Interface->new( x=> 10, y => 50, v_x => 10, v_y=> 20 );
- #Set the initial state of the ball's physics, this is optional
- $ball->set_acceleration(
- sub {
- my ($time, $current_state) = @_;
- return( 0, -10, 0 ); # Return accelerations (x,y,rotation)
- }
- );
- my $ball_render = sub {
- my $state = shift;
-
- $app->draw_rect( undef, 0 );
- $app->draw_rect( [$state->x, $state->y, 10,10], [255,0,0,255] );
- $app->update();
- };
- $ball->attach( $app, $ball_render, @params );
- $app->run();
- $ball->detach(); #can be called at anytime (for example when ball 'dies')
- =head1 DESCRIPTION
- =head1 METHODS
- =head2 set_acceleration
- Allows you to set the acceleration callback for defining the interface's
- behaviour in terms of x,y and rotation.
- $interface->set_acceleration (
- sub {
- my ($time, $current_state) = @_;
-
- return ( $accel_x, $accel_y, $torque );
- }
- );
- These accelerations are arbitrary and can be set to any frame of reference.
- Your render callback will handle how to interpret it.
- The callback will receive the time and the current state as a
- C<SDLx::Controller::State> element.
- =head2 attach
- Attaches the interface to a controller with a render callback
- $interface->attach( $controller, $render, @params );
- Where $render is a callback that receives the interpolated
- C<SDLx::Controller::State>.
- my $render = sub {
- my ($state, @params) = @_;
- # draw the current $state.
- };
- The @params are any extra parameters you would like to pass to the $render
- callback.
- =head2 current
- my $current_state = $interface->current();
- Returns the current state of the interface as a C<SDLx::Controller::State>.
- =head2 previous
- my $previous_state = $interface->previous();
- Returns the previous state of the interface as a C<SDLx::Controller::State>.
- =head2 detach
- $interface->detach();
- If $interface has been C<attach()>'ed to any controller it will be detached now.
- =head1 OTHER METHODS
- Don't use these unless you really really want to.
- =head2 acceleration
- Call the acceleration callback once.
- =head2 interpolate
- Interpolate the current state
- =head2 evaluate
- Evaluate the new current and previous state.
- =head2 update
- Update the states by integrating with time.
- =head1 AUTHORS
- See L<SDL/AUTHORS>.
- =cut