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