/lib/SDLx/Controller/Timer.pm

http://github.com/PerlGameDev/SDL · Perl · 79 lines · 61 code · 16 blank · 2 comment · 6 complexity · 1ace04604cbdcee54e1e33692e68c818 MD5 · raw file

  1. package SDLx::Controller::Timer;
  2. # Implementation of lesson 13 and 14 from http://lazyfoo.net/SDL_tutorials/index.php
  3. #
  4. use strict;
  5. use warnings;
  6. use SDL;
  7. our $VERSION = 2.548;
  8. sub new {
  9. my $class = shift;
  10. my $self = bless {@_}, $class;
  11. $self->{started_ticks} = 0;
  12. $self->{paused_ticks} = 0;
  13. $self->{started} = 0;
  14. $self->{paused} = 0;
  15. return $self;
  16. }
  17. sub start {
  18. my $self = shift;
  19. $self->{started} = 1;
  20. $self->{started_ticks} = SDL::get_ticks();
  21. }
  22. sub stop {
  23. my $self = shift;
  24. $self->{started} = 0;
  25. $self->{paused} = 0;
  26. }
  27. sub pause {
  28. my $self = shift;
  29. if ( $self->{started} && !$self->{paused} ) {
  30. $self->{paused} = 1;
  31. $self->{paused_ticks} = SDL::get_ticks() - $self->{started_ticks};
  32. }
  33. }
  34. sub unpause {
  35. my $self = shift;
  36. if ( $self->{paused} ) {
  37. $self->{paused} = 0;
  38. $self->{started_ticks} = SDL::get_ticks() - $self->{started_ticks};
  39. $self->{paused_ticks} = 0;
  40. }
  41. }
  42. sub get_ticks {
  43. my $self = shift;
  44. if ( $self->{started} ) {
  45. if ( $self->{paused} ) {
  46. return $self->{paused_ticks};
  47. } else {
  48. my $update = SDL::get_ticks();
  49. my $diff = $update - $self->{started_ticks};
  50. return $diff;
  51. }
  52. }
  53. return 0;
  54. }
  55. sub is_started {
  56. my $self = shift;
  57. return $self->{started};
  58. }
  59. sub is_paused {
  60. my $self = shift;
  61. return $self->{paused};
  62. }
  63. 1;