clofresh / emergent
A humble attempt at creating emergent behavior
Clone this repository (size: 55.2 KB): HTTPS / SSH
$ hg clone http://bitbucket.org/clofresh/emergent/
| commit 12: | 574d96c23100 |
| parent 11: | ff1803aafd49 |
| branch: | default |
threaded paint step, removed old threading implementation
20 months ago
Changed (Δ1.7 KB):
raw changeset »
emergent/common.py (0 lines added, 2 lines removed)
emergent/states.py (10 lines added, 73 lines removed)
Up to file-list emergent/common.py:
| … | … | @@ -4,8 +4,6 @@ from random import randint |
4 |
4 |
RESOLUTION = (640, 480) |
5 |
5 |
FPS = 60 |
6 |
6 |
|
7 |
THREAD_LIMIT = 1 |
|
8 |
||
9 |
7 |
class SubclassShouldImplement(Exception): |
10 |
8 |
def __init__(self, msg="A method was called which should have been overridden"): |
11 |
9 |
Exception.__init__(self,msg) |
Up to file-list emergent/states.py:
| … | … | @@ -7,7 +7,7 @@ import pygame |
7 |
7 |
from pygame.locals import * |
8 |
8 |
|
9 |
9 |
import gui |
10 |
from common import SubclassShouldImplement, |
|
10 |
from common import SubclassShouldImplement, FPS |
|
11 |
11 |
|
12 |
12 |
class StateDriver: |
13 |
13 |
def __init__(self,screen): |
| … | … | @@ -103,8 +103,6 @@ class State(gui.Keyable,gui.Mouseable): |
103 |
103 |
pass |
104 |
104 |
|
105 |
105 |
class GuiState(State): |
106 |
jobQueue = Queue() |
|
107 |
||
108 |
106 |
def __init__(self): |
109 |
107 |
State.__init__(self) |
110 |
108 |
self.paintables = [] |
| … | … | @@ -151,78 +149,17 @@ class GuiState(State): |
151 |
149 |
|
152 |
150 |
|
153 |
151 |
def paint(self,screen): |
154 |
|
|
152 |
threads = [] |
|
153 |
for paintable in self.paintables: |
|
154 |
t = Thread(target=paintable.paint, args=[screen]) |
|
155 |
t.start() |
|
156 |
threads.append(t) |
|
155 |
157 |
|
156 |
if THREAD_LIMIT == 1: |
|
157 |
for paintable in self.paintables: |
|
158 |
paintable.paint(screen) |
|
159 |
# print 'Painted %s' % len(self.paintables) |
|
160 |
else: |
|
161 |
for paintable in self.paintables: |
|
162 |
GuiState.jobQueue.put(paintable) |
|
163 |
||
164 |
paintingThreads = [] |
|
165 |
for n in xrange(THREAD_LIMIT): |
|
166 |
pt = PaintingThread(screen) |
|
167 |
pt.start() |
|
168 |
paintingThreads.append(pt) |
|
169 |
||
170 |
||
171 |
for pt in paintingThreads: |
|
172 |
pt.join() |
|
173 |
||
174 |
endTime = clock() |
|
175 |
||
176 |
# print 'Painted in %s seconds' % (endTime - startTime) |
|
177 |
||
178 |
||
179 |
||
158 |
for t in threads: |
|
159 |
t.join() |
|
180 |
160 |
|
181 |
161 |
def update(self,delay): |
182 |
startTime = clock() |
|
183 |
||
184 |
if THREAD_LIMIT == 1: |
|
185 |
for updateable in self.updateables: |
|
186 |
updateable.update(delay) |
|
187 |
# print 'Updated %s' % len(self.updateables) |
|
188 |
else: |
|
189 |
for updateable in self.updateables: |
|
190 |
GuiState.jobQueue.put(updateable) |
|
191 |
||
192 |
updatingThreads = [] |
|
193 |
for n in xrange(THREAD_LIMIT): |
|
194 |
ut = UpdatingThread(delay) |
|
195 |
ut.start() |
|
196 |
updatingThreads.append(ut) |
|
197 |
||
198 |
||
199 |
for ut in updatingThreads: |
|
200 |
ut.join() |
|
201 |
||
202 |
endTime = clock() |
|
203 |
||
204 |
# print 'Updated in %s seconds' % (endTime - startTime) |
|
162 |
for updateable in self.updateables: |
|
163 |
updateable.update(delay) |
|
205 |
164 |
|
206 |
165 |
|
207 |
class PaintingThread(Thread): |
|
208 |
def __init__(self, screen): |
|
209 |
Thread.__init__(self) |
|
210 |
self.screen = screen |
|
211 |
||
212 |
def run(self): |
|
213 |
while GuiState.jobQueue.empty() == False: |
|
214 |
GuiState.jobQueue.get(False).paint(self.screen) |
|
215 |
||
216 |
||
217 |
class UpdatingThread(Thread): |
|
218 |
def __init__(self, delay): |
|
219 |
Thread.__init__(self) |
|
220 |
self.delay = delay |
|
221 |
||
222 |
def run(self): |
|
223 |
try: |
|
224 |
while GuiState.jobQueue.empty() == False: |
|
225 |
GuiState.jobQueue.get(False).update(self.delay) |
|
226 |
except Empty: |
|
227 |
pass |
|
228 |
