Commit before breaking everything
[matches/honours.git] / research / transmission_spectroscopy / simulator / pgu-0.18 / build / lib / pgu / timer.py
1 """A timer for games with set-rate FPS.
2 """
3
4 import pygame
5 import time
6
7
8 class Clock(object):
9     # The game time when one of the clock parameters was last changed
10     lastGameTime = None
11     # The real time corresponding to the last game time
12     lastRealTime = None
13     # The game time when 'tick' was last called
14     lastTickTime = None
15
16     # Whether the timer is paused or not
17     paused = False
18     # When this clock was created
19     startTime = None
20     # The speed which this clock moves at relative to the real clock
21     speed = 1
22
23     def __init__(self):
24         #self.startTime = time.time()
25         self.lastGameTime = 0
26         self.lastTickTime = 0
27         self.lastRealTime = time.time()
28         self.startTime = time.time()
29
30     # Set the rate at which this clock ticks relative to the real clock
31     def set_speed(self, n):
32         assert(n >= 0)
33         self.lastGameTime = self.get_time()
34         self.lastRealTime = time.time()
35         self.speed = n
36
37     # Pause the clock
38     def pause(self):
39         if (not self.paused):
40             self.lastGameTime = self.get_time()
41             self.lastRealTime = time.time()
42             self.paused = True
43
44     # Resume the clock
45     def resume(self):
46         if (self.paused):
47             self.paused = False
48             self.lastRealTime = time.time()
49
50     def tick(self, fps=0):
51         tm = self.get_time()
52         dt = tm - self.lastTickTime
53         if (fps > 0):
54             minTime = 1.0/fps
55             if (dt < minTime):
56                 pygame.time.wait(int((minTime-dt)*1000))
57                 dt = minTime
58         self.lastTickTime = tm
59         return dt
60
61     # Returns the amount of 'game time' that has passed since creating
62     # the clock (paused time does not count).
63     def get_time(self):
64         if (self.paused):
65             return self.lastGameTime
66         return self.speed*(time.time()-self.lastRealTime) + self.lastGameTime
67
68     def get_real_time(self):
69         return (time.time()-self.startTime)
70
71
72 class Timer:
73     """A timer for games with set-rate FPS."""
74     
75     def __init__(self,fps):
76         if fps == 0: 
77             self.tick = self._blank
78             return
79         self.wait = 1000/fps
80         self.nt = pygame.time.get_ticks()
81         pygame.time.wait(0)
82         
83     def _blank(self):
84         pass
85         
86     def tick(self):
87         """Wait correct amount of time each frame.  Call this once per frame."""
88         self.ct = pygame.time.get_ticks()
89         if self.ct < self.nt:
90             pygame.time.wait(self.nt-self.ct)
91             self.nt+=self.wait
92         else: 
93             self.nt = pygame.time.get_ticks()+self.wait
94
95
96 class Speedometer:
97     """A timer replacement that returns out FPS once a second.
98     
99     Attributes:
100         fps -- always set to the current FPS
101
102     """
103     def __init__(self):
104         self.frames = 0
105         self.st = pygame.time.get_ticks()
106         self.fps = 0
107         
108     def tick(self):
109         """ Call this once per frame."""
110         r = None
111         self.frames += 1
112         self.ct = pygame.time.get_ticks()
113         if (self.ct - self.st) >= 1000: 
114             r = self.fps = self.frames
115             #print "%s: %d fps"%(self.__class__.__name__,self.fps)
116             self.frames = 0
117             self.st += 1000
118         pygame.time.wait(0) #NOTE: not sure why, but you gotta call this now and again
119         return r
120
121             
122
123

UCC git Repository :: git.ucc.asn.au