1 from cocos.actions.interval_actions import ScaleTo
2 from cocos.director import director
3 from cocos.layer.base_layers import Layer
4 from cocos.menu import CENTER, Menu, MenuItem, EntryMenuItem
5 from cocos.scene import Scene
6 from cocos.sprite import *
7 from cocos.text import RichLabel
8 from cocos.actions.interval_actions import MoveBy, Delay, FadeOut, FadeIn
9 from constants import BACKGROUND_Z
10 from imageLayer import ImageLayer
11 from pyglet.resource import media, image
12 from pyglet.window import *
13 from objects import Objects
14 from poem import POEM
15 from music import menu_player, intro_sound_player
16 from cocos.layer import Layer
17 from pyglet.gl.gl import glColor4ub, glPushMatrix, glPopMatrix
18 from cocos import collision_model
19 from game_layers import MessageInstruction
20 from instructionButtons import *
21 from cocos.actions.instant_actions import CallFunc
22 import os
23 import pyglet.font
24 import utils
25 import constants
26
27
28 pyglet.font.add_directory('fonts')
29
30
32 return ScaleTo(1.3, duration=0.2)
33
34
36 return ScaleTo(1.0, duration=0.2)
37
38
40 menu.font_title['font_name'] = 'ChalkDust'
41 menu.font_title['font_size'] = 64
42 menu.font_title['color'] = (255, 255, 255, 255)
43
44 menu.font_item['font_name'] = 'ChalkDust'
45 menu.font_item['font_size'] = 27
46 menu.font_item['color'] = (255, 255, 255, 255)
47
48 menu.font_item_selected['font_name'] = 'ChalkDust'
49 menu.font_item_selected['font_size'] = 27
50 menu.font_item_selected['color'] = (255, 255, 255, 255)
51
52 menu.menu_valign = CENTER
53 menu.menu_halign = CENTER
54
56 activate_sound = media(
57 os.path.join('sounds', "Menu.wav"), streaming=False)
58 select_sound = media(
59 os.path.join('sounds', "Menu.wav"), streaming=False)
60
63
64
66 activate_sound = media(
67 os.path.join('sounds', "Menu.wav"), streaming=False)
68 select_sound = media(
69 os.path.join('sounds', "Menu.wav"), streaming=False)
70
72 super(EndMenu, self).__init__("Game Over, You " + txt)
73
74 self.levelName = ""
75 self.level = curLevel
76
77 set_menu_theme(self)
78
79 self.ok = MenuItem("Back to Main Menu",director.pop)
80
81 if txt == "Lost":
82 self.retry = MenuItem("Retry Level", self.on_retry)
83 items = [(self.ok),(self.retry)]
84 self.levelName = "level"+str(curLevel)
85 elif curLevel <= 5:
86 self.win = MenuItem("Next Level", self.on_win)
87 items = [(self.ok),(self.win),]
88 self.levelName = "level"+str(curLevel+1)
89 else:
90 self.end_scene = MenuItem("You Fired Mr Winely!",director.pop)
91 items = [(self.ok),self.end_scene]
92
93 self.create_menu(items,ScaleTo(1.3, duration=0.2),ScaleTo(1.0, duration=0.2))
94
95
106
117
120
121
122 -class MainMenu(Menu):
123 activate_sound = media(
124 os.path.join('sounds', "Menu.wav"), streaming=False)
125 select_sound = media(
126 os.path.join('sounds', "Menu.wav"), streaming=False)
127
128 - def __init__(self):
129 super(MainMenu, self).__init__('Noteworks')
130
131 set_menu_theme(self)
132
133 self.levelName = constants.DEFAULT_MAP
134
135 self.instructions = MenuItem('Instructions', self.on_intro)
136 self.space1 = MenuItem('', self.on_intro)
137 self.single = MenuItem('Single-Player', self.on_single_player)
138 self.space2 = MenuItem('', self.on_intro)
139 self.mult = MenuItem("Multi-Player", self.on_multi)
140 self.space3 = MenuItem('', self.on_intro)
141 self.level = EntryMenuItem("Level Name:",self.on_level,self.levelName)
142 self.space4 = MenuItem('', self.on_intro)
143 self.exit = MenuItem('Exit', self.on_quit)
144
145 self.items = [
146 (self.instructions),
147
148 (self.single),
149
150 (self.mult),
151
152 (self.level),
153
154 (self.exit),
155 ]
156
157 self.create_menu(self.items, zoom_in(), zoom_out())
158 self.game_started = False
159
160 - def on_intro(self):
161 utils.play_sound("Enter.wav")
162 image = os.path.join("images", "backgrounds", "notebook-paper.png")
163 director.push(Scene(Intro(image)))
164
165 - def on_level(self,val):
166 self.levelName = str(val)
167
168 - def on_enter(self):
169 super(MainMenu, self).on_enter()
170 constants.MUSIC = True
171 menu_player.set_volume(2)
172 if self.game_started:
173 Objects.reset_game()
174 self.game_started = False
175
176
177
179 Objects.get_server(self.levelName)
180 server = Objects.get_controller()
181
182 utils.play_sound("Enter.wav")
183 game = Scene(server.map, server)
184 game.add(ImageLayer(
185 os.path.join("images", "backgrounds", "notebook-paper.png")), z=BACKGROUND_Z)
186
187
188 director.push(game)
189 menu_player.stop()
190 self.game_started = True
191
192
193
194
196 from twisted.internet import reactor
197 reactor.stop()
198 director.pop()
199
200 - def on_multi(self):
201 utils.play_sound("Enter.wav")
202 s = Scene(MultiplayerMenu(self.levelName))
203 s.add(ImageLayer(os.path.join("images", "backgrounds", "menu-chalkboard.png")))
204 director.push(s)
205
206
208
209 image_frames = []
210 for i in range(86):
211 if(i <= 9):
212 image_frames.append(os.path.join(
213 'images', 'intro_animation', 'intro_0000' + str(i) + '.png'))
214 else:
215 image_frames.append(os.path.join(
216 'images', 'intro_animation', 'intro_000' + str(i) + '.png'))
217
218 image_frames = tuple(image_frames)
219 images = map(lambda img: pyglet.image.load(img), image_frames)
220 animation = pyglet.image.Animation.from_image_sequence(
221 images, 0.05, False)
222 sprite_name = Sprite(animation)
223 sprite_name.position = 350, 350
224 scene.add(sprite_name)
225 return sprite_name
226
227
228 -class IntroText(Layer):
229 is_event_handler = True
230
231 - def __init__(self):
232 super(IntroText, self).__init__()
233 self.poem = RichLabel(text=POEM, position=(100, 300), multiline=True, width=300, font_name='ChalkDust', font_size=27)
234 self.introZora = Sprite(os.path.join("images","intro_images","zora.png"), position=(750, 400), scale=1, opacity=0)
235 self.introTownmap = Sprite(os.path.join("images","intro_images","town-map.png"), position=(830, 400), scale=.75,opacity=0)
236 self.introNetmap = Sprite(os.path.join("images","intro_images","network-map.png"), position=(800, 400), scale=.75,opacity=0)
237 self.introNotebook = Sprite(os.path.join("images","intro_images","notebook.png"), position=(780, 400), scale=.75,opacity=0)
238 self.background = ImageLayer(os.path.join("images","backgrounds","chalkboard_align_topleft.png"))
239 self.background.position=(0, 0)
240 self.background.scale=1
241 self.background.anchor=(0.0, 0.0)
242 self.background.z=1
243 self.add(self.poem)
244 self.add(self.introZora)
245 self.add(self.introTownmap)
246 self.add(self.introNetmap)
247 self.add(self.introNotebook)
248 self.add(self.poem)
249 self.add(self.background)
250 self.help = RichLabel(text="Help Zora take down the school's network!", halign='center',position=(100, 500), multiline=True, width=700, font_name='ChalkDust', font_size=40)
251 self.help.opacity = 1
252 self.add(self.help,z=1)
253
254 - def on_enter(self):
255 super(IntroText, self).on_enter()
256 menu_player.play()
257 menu_player.set_volume(1)
258 intro_sound_player.play()
259 intro_sound_player.set_volume(2)
260 intro_sound_player.player.eos_action = pyglet.media.Player.EOS_STOP
261
262 a = Delay(2)
263 a += MoveBy((0, 6300), 100)
264 a += Delay(3)
265 a += CallFunc(self.on_quit)
266 b = Delay(101)
267 b += FadeIn(1)
268
269 c = Delay(5)
270 c += FadeIn(1)
271 c += Delay(11)
272 c += FadeOut(1)
273 d = Delay(20)
274 d += FadeIn(1)
275 d += Delay(5)
276 d += FadeOut(1)
277 e = Delay(28)
278 e += FadeIn(1)
279 e += Delay(13)
280 e += FadeOut(1)
281 f = Delay(44)
282 f += FadeIn(1)
283 f += Delay(51)
284 f += FadeOut(3)
285
286
287 self.poem.do(a)
288 self.help.do(b)
289 self.introZora.do(c)
290 self.introTownmap.do(d)
291 self.introNetmap.do(e)
292 self.introNotebook.do(f)
293
294 - def on_key_press(self, k, m):
295 if k == pyglet.window.key.ENTER or k == pyglet.window.key.ESCAPE:
296 intro_sound_player.stop()
297 self.on_quit()
298 return True
299
301 intro_sound_player.stop()
302 self.poem.stop()
303 director.pop()
304 return True
305
306
307
309 is_event_handler = True
310
312 super(HelpZoraScene, self).__init__()
313 self.background = ImageLayer(os.path.join("images","backgrounds","chalkboard_align_topleft.png"))
314 self.background.position=(0, 0)
315 self.background.scale=1
316 self.background.anchor=(0.0, 0.0)
317 self.background.z=1
318 self.poem = RichLabel(text="Help Zora!", position=(500, 500), width=300, font_name='Rabiohead', font_size=27)
319 self.image = Sprite(os.path.join("images","maps","surrender.png"),position=(700, 500),scale=0.4)
320
321 self.add(self.background)
322 self.add(self.poem)
323 self.add(self.image)
324
333
334
336 if k == pyglet.window.key.ENTER or k == pyglet.window.key.ESCAPE:
337 self.on_quit()
338 return True
339
341 self.poem.stop()
342 director.pop()
343 return True
344
345
347
348 is_event_handler = True
349
351 super(Intro, self).__init__()
352 self.img = image(img)
353 self.collision_manager = collision_model.CollisionManagerBruteForce()
354 self.load_instructions()
355
357 MessageInstruction(self, "Press Esc: Home Menu", False, 300,550, 500,300,21)
358 MessageInstruction(self, "Instructions", False, 500,500, 500,300,90)
359
360 unit_detail_button = UnitDetailsButton(500,400)
361 unit_detail_button.scale = .7
362 unit_detail_button.postion = 100,100
363 self.add(unit_detail_button, z=1)
364 self.collision_manager.add(unit_detail_button)
365
366 controls_button = ControlsButton(500,300)
367 controls_button.postion = 100,100
368 controls_button.scale = .7
369 self.add(controls_button, z=1)
370 self.collision_manager.add(controls_button)
371
372 tt_button = TechTreeButton(500,200)
373 tt_button.postion = 100,100
374 tt_button.scale = .7
375 self.add(tt_button, z=1)
376 self.collision_manager.add(tt_button)
377
379 self.clear_panel(self.get_children())
380 resource_troops_panel = Sprite(os.path.join("images", "instructions", "controls_panel.png"))
381 resource_troops_panel.position = 580,400
382 self.add(resource_troops_panel, z=1)
383
384 back_button = BackButton(130,75)
385 self.add(back_button, z=1)
386 self.collision_manager.add(back_button)
387
389 self.clear_panel(self.get_children())
390 resource_troops_panel = Sprite(os.path.join("images", "instructions", "techtree_panel.png"))
391 resource_troops_panel.position = 500,400
392 self.add(resource_troops_panel, z=1)
393
394 back_button = BackButton(130,75)
395 self.add(back_button, z=1)
396 self.collision_manager.add(back_button)
397
399 overview_panel = Sprite(os.path.join("images", "instructions", "overview_text.png"))
400 overview_panel.position = 500,400
401 overview_panel.scale = .8
402 self.add(overview_panel, z=1)
403
404 back_button = BackButton(100,75)
405 back_button.scale = .8
406 self.add(back_button, z=1)
407 self.collision_manager.add(back_button)
408
409
410 building_button = BuildingsDetailsButton(180,225)
411 self.add(building_button, z=1)
412 self.collision_manager.add(building_button)
413
414 resource_button = ResourceDetailsButton(850,225)
415 self.add(resource_button, z=1)
416 self.collision_manager.add(resource_button)
417
418 utility_troop_button = UtilityTroopDetailsButton(390,120)
419 self.add(utility_troop_button, z=1)
420 self.collision_manager.add(utility_troop_button)
421
422 attack_troop_button = AttackTroopDetailsButton(650,120)
423 self.add(attack_troop_button, z=1)
424 self.collision_manager.add(attack_troop_button)
425
427 self.clear_panel(self.get_children())
428 building_panel = Sprite(os.path.join("images", "instructions", "building_panel.png"))
429 building_panel.position = 500,400
430 self.add(building_panel, z=1)
431
432 back_button = BackButtonUD(300,150)
433 self.add(back_button, z=1)
434 self.collision_manager.add(back_button)
435
437 self.clear_panel(self.get_children())
438 utility_troop_panel = Sprite(os.path.join("images", "instructions", "utility_troop_panel.png"))
439 utility_troop_panel.position = 500,380
440 self.add(utility_troop_panel, z=1)
441
442
443 back_button = BackButtonUD(300,80)
444 self.add(back_button, z=1)
445 self.collision_manager.add(back_button)
446
448 self.clear_panel(self.get_children())
449 attack_troop_panel = Sprite(os.path.join("images", "instructions", "attack_troop_panel.png"))
450 attack_troop_panel.position = 500,400
451 self.add(attack_troop_panel, z=1)
452
453
454 back_button = BackButtonUD(300,80)
455 back_button.postion = 390,50
456 self.add(back_button, z=1)
457 self.collision_manager.add(back_button)
458
460 self.clear_panel(self.get_children())
461 resource_troops_panel = Sprite(os.path.join("images", "instructions", "resource_panel.png"))
462 resource_troops_panel.position = 500,400
463 self.add(resource_troops_panel, z=1)
464
465 back_button = BackButtonUD(300,80)
466 self.add(back_button, z=1)
467 self.collision_manager.add(back_button)
468
470 glColor4ub(255, 255, 255, 255)
471 glPushMatrix()
472 self.transform()
473 self.img.blit(0, 0)
474 glPopMatrix()
475
488
529 activate_sound = media(
530 os.path.join('sounds', "Menu.wav"), streaming=False)
531 select_sound = media(
532 os.path.join('sounds', "Menu.wav"), streaming=False)
533
535 super(MultiplayerMenu, self).__init__('Multi-Player')
536 self.host = MenuItem("Start Server and Wait", self.new_game)
537 self.start = MenuItem("Finish Waiting, Start Game", self.start_game)
538 self.join = MenuItem("Join Game", self.join_game)
539 self.back = MenuItem("Back", self.on_quit)
540 self.levelName = levelName
541 items = [
542 (self.host),
543 (self.start),
544 (self.join),
545 (self.back),
546 ]
547
548 set_menu_theme(self)
549
550 self.create_menu(items, zoom_in(), zoom_out())
551
552 self.game_started = False
553
559
564
565
581
592
595
596 if __name__ == '__main__':
597 print "Please run python net-game.py instead, sorry for inconvenience!"
598