Mercurial > sypikslang
annotate gamelib/mainmenu.py @ 143:821ecb98e888
some icons and toggle button
author | Rizmari Versfeld <rizziepit@gmail.com> |
---|---|
date | Fri, 11 May 2012 03:13:22 +0200 |
parents | 3e02a8ccd72b |
children | 53277724645b |
rev | line source |
---|---|
53
655a6912e0ae
Split gui stuff out of main.py
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
1 # -*- coding: utf-8 -*- |
655a6912e0ae
Split gui stuff out of main.py
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
2 # vim:fileencoding=utf-8 ai ts=4 sts=4 et sw=4 |
655a6912e0ae
Split gui stuff out of main.py
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
3 |
655a6912e0ae
Split gui stuff out of main.py
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
4 """The main menu""" |
655a6912e0ae
Split gui stuff out of main.py
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
5 |
655a6912e0ae
Split gui stuff out of main.py
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
6 import pygame |
88 | 7 import os |
74
22b65c943712
prettified main menu - temp background
Rizmari Versfeld <rizziepit@gmail.com>
parents:
63
diff
changeset
|
8 from pygame import image |
53
655a6912e0ae
Split gui stuff out of main.py
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
9 |
88 | 10 try: |
11 import simplejson | |
12 json = simplejson | |
13 except ImportError: | |
14 import json | |
15 | |
74
22b65c943712
prettified main menu - temp background
Rizmari Versfeld <rizziepit@gmail.com>
parents:
63
diff
changeset
|
16 from gamelib import data |
53
655a6912e0ae
Split gui stuff out of main.py
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
17 from gamelib.gui_base import Window |
143
821ecb98e888
some icons and toggle button
Rizmari Versfeld <rizziepit@gmail.com>
parents:
142
diff
changeset
|
18 from gamelib.gui import BigButton, RadioButton |
53
655a6912e0ae
Split gui stuff out of main.py
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
19 from gamelib.engine import AddWindow |
63
364ff3479ef2
Remove duplicate point tracking. Rename classes for future refactoring
Neil Muller <drnlmuller@gmail.com>
parents:
53
diff
changeset
|
20 from gamelib.gamegui import LabWindow |
53
655a6912e0ae
Split gui stuff out of main.py
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
21 |
655a6912e0ae
Split gui stuff out of main.py
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
22 from gamelib.constants import WIDTH, HEIGHT |
88 | 23 from gamelib.game_base import get_save_filename |
53
655a6912e0ae
Split gui stuff out of main.py
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
24 |
655a6912e0ae
Split gui stuff out of main.py
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
25 |
74
22b65c943712
prettified main menu - temp background
Rizmari Versfeld <rizziepit@gmail.com>
parents:
63
diff
changeset
|
26 class MainMenuButton(BigButton): |
22b65c943712
prettified main menu - temp background
Rizmari Versfeld <rizziepit@gmail.com>
parents:
63
diff
changeset
|
27 WIDTH = 276 |
22b65c943712
prettified main menu - temp background
Rizmari Versfeld <rizziepit@gmail.com>
parents:
63
diff
changeset
|
28 HEIGHT = 75 |
76 | 29 BG_IMAGE_NORMAL = image.load(data.filepath('images/main_normal.png')) |
30 BG_IMAGE_DOWN = image.load(data.filepath('images/main_down.png')) | |
74
22b65c943712
prettified main menu - temp background
Rizmari Versfeld <rizziepit@gmail.com>
parents:
63
diff
changeset
|
31 |
22b65c943712
prettified main menu - temp background
Rizmari Versfeld <rizziepit@gmail.com>
parents:
63
diff
changeset
|
32 |
22b65c943712
prettified main menu - temp background
Rizmari Versfeld <rizziepit@gmail.com>
parents:
63
diff
changeset
|
33 class NewGameButton(MainMenuButton): |
53
655a6912e0ae
Split gui stuff out of main.py
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
34 |
655a6912e0ae
Split gui stuff out of main.py
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
35 def __init__(self, parent): |
79 | 36 super(NewGameButton, self).__init__(((WIDTH - self.WIDTH) / 2, |
37 (HEIGHT - self.HEIGHT) / 2 - self.HEIGHT), | |
53
655a6912e0ae
Split gui stuff out of main.py
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
38 'Start New Game') |
655a6912e0ae
Split gui stuff out of main.py
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
39 self.parent = parent |
655a6912e0ae
Split gui stuff out of main.py
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
40 |
655a6912e0ae
Split gui stuff out of main.py
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
41 def on_click(self): |
655a6912e0ae
Split gui stuff out of main.py
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
42 self.parent.start_new_game() |
655a6912e0ae
Split gui stuff out of main.py
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
43 |
655a6912e0ae
Split gui stuff out of main.py
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
44 |
74
22b65c943712
prettified main menu - temp background
Rizmari Versfeld <rizziepit@gmail.com>
parents:
63
diff
changeset
|
45 class ResumeGameButton(MainMenuButton): |
53
655a6912e0ae
Split gui stuff out of main.py
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
46 |
655a6912e0ae
Split gui stuff out of main.py
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
47 def __init__(self, parent): |
74
22b65c943712
prettified main menu - temp background
Rizmari Versfeld <rizziepit@gmail.com>
parents:
63
diff
changeset
|
48 super(ResumeGameButton, self).__init__(((WIDTH - self.WIDTH) / 2, |
79 | 49 (HEIGHT - self.HEIGHT) / 2), 'Resume Game') |
53
655a6912e0ae
Split gui stuff out of main.py
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
50 self.parent = parent |
655a6912e0ae
Split gui stuff out of main.py
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
51 |
655a6912e0ae
Split gui stuff out of main.py
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
52 def on_click(self): |
655a6912e0ae
Split gui stuff out of main.py
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
53 self.parent.resume_game() |
655a6912e0ae
Split gui stuff out of main.py
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
54 |
655a6912e0ae
Split gui stuff out of main.py
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
55 |
74
22b65c943712
prettified main menu - temp background
Rizmari Versfeld <rizziepit@gmail.com>
parents:
63
diff
changeset
|
56 class QuitButton(MainMenuButton): |
53
655a6912e0ae
Split gui stuff out of main.py
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
57 |
655a6912e0ae
Split gui stuff out of main.py
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
58 def __init__(self): |
74
22b65c943712
prettified main menu - temp background
Rizmari Versfeld <rizziepit@gmail.com>
parents:
63
diff
changeset
|
59 super(QuitButton, self).__init__(((WIDTH - self.WIDTH) / 2, |
79 | 60 (HEIGHT - self.HEIGHT) / 2 + self.HEIGHT), 'Quit') |
53
655a6912e0ae
Split gui stuff out of main.py
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
61 |
655a6912e0ae
Split gui stuff out of main.py
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
62 def on_click(self): |
655a6912e0ae
Split gui stuff out of main.py
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
63 pygame.event.post(pygame.event.Event(pygame.QUIT)) |
655a6912e0ae
Split gui stuff out of main.py
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
64 |
655a6912e0ae
Split gui stuff out of main.py
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
65 |
655a6912e0ae
Split gui stuff out of main.py
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
66 class MainMenu(Window): |
655a6912e0ae
Split gui stuff out of main.py
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
67 |
88 | 68 def __init__(self, screen, savefile): |
53
655a6912e0ae
Split gui stuff out of main.py
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
69 super(MainMenu, self).__init__(screen) |
655a6912e0ae
Split gui stuff out of main.py
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
70 self.game_window = None |
655a6912e0ae
Split gui stuff out of main.py
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
71 self.resume = None |
655a6912e0ae
Split gui stuff out of main.py
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
72 self.screen = screen |
655a6912e0ae
Split gui stuff out of main.py
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
73 self.background_colour = (0, 0, 0) |
75 | 74 self.background_image = image.load(data.filepath('images/temp.jpg')) |
143
821ecb98e888
some icons and toggle button
Rizmari Versfeld <rizziepit@gmail.com>
parents:
142
diff
changeset
|
75 self.add_child(RadioButton((0, 0), 'rocketry')) |
821ecb98e888
some icons and toggle button
Rizmari Versfeld <rizziepit@gmail.com>
parents:
142
diff
changeset
|
76 self.add_child(RadioButton((64, 0), 'marinebiology')) |
821ecb98e888
some icons and toggle button
Rizmari Versfeld <rizziepit@gmail.com>
parents:
142
diff
changeset
|
77 self.add_child(RadioButton((128, 0), 'robotics')) |
821ecb98e888
some icons and toggle button
Rizmari Versfeld <rizziepit@gmail.com>
parents:
142
diff
changeset
|
78 self.add_child(RadioButton((192, 0), 'artificialintelligence')) |
821ecb98e888
some icons and toggle button
Rizmari Versfeld <rizziepit@gmail.com>
parents:
142
diff
changeset
|
79 self.add_child(RadioButton((256, 0), 'space')) |
821ecb98e888
some icons and toggle button
Rizmari Versfeld <rizziepit@gmail.com>
parents:
142
diff
changeset
|
80 self.add_child(RadioButton((320, 0), 'fusion')) |
821ecb98e888
some icons and toggle button
Rizmari Versfeld <rizziepit@gmail.com>
parents:
142
diff
changeset
|
81 self.add_child(RadioButton((384, 0), 'electrickery')) |
821ecb98e888
some icons and toggle button
Rizmari Versfeld <rizziepit@gmail.com>
parents:
142
diff
changeset
|
82 self.add_child(RadioButton((448, 0), 'lasers')) |
821ecb98e888
some icons and toggle button
Rizmari Versfeld <rizziepit@gmail.com>
parents:
142
diff
changeset
|
83 self.add_child(RadioButton((512, 0), 'meteorology')) |
821ecb98e888
some icons and toggle button
Rizmari Versfeld <rizziepit@gmail.com>
parents:
142
diff
changeset
|
84 self.add_child(RadioButton((576, 0), 'meteorology2')) |
821ecb98e888
some icons and toggle button
Rizmari Versfeld <rizziepit@gmail.com>
parents:
142
diff
changeset
|
85 self.add_child(RadioButton((640, 0), 'physics')) |
821ecb98e888
some icons and toggle button
Rizmari Versfeld <rizziepit@gmail.com>
parents:
142
diff
changeset
|
86 self.add_child(RadioButton((704, 0), 'biogenetics')) |
821ecb98e888
some icons and toggle button
Rizmari Versfeld <rizziepit@gmail.com>
parents:
142
diff
changeset
|
87 self.add_child(RadioButton((768, 0), 'medicalexperiments')) |
53
655a6912e0ae
Split gui stuff out of main.py
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
88 button1 = NewGameButton(self) |
655a6912e0ae
Split gui stuff out of main.py
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
89 self.add_child(button1) |
655a6912e0ae
Split gui stuff out of main.py
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
90 button2 = QuitButton() |
655a6912e0ae
Split gui stuff out of main.py
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
91 self.add_child(button2) |
88 | 92 if savefile: |
93 self.load_game(savefile) | |
94 else: | |
95 # See if we have an autosave file | |
96 savefile = get_save_filename() | |
97 if os.path.exists(savefile): | |
98 self.load_game(savefile) | |
53
655a6912e0ae
Split gui stuff out of main.py
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
99 |
655a6912e0ae
Split gui stuff out of main.py
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
100 def start_new_game(self): |
88 | 101 self.game_window = LabWindow(self.screen, None) |
102 self.add_resume() | |
103 AddWindow.post(self.game_window) | |
104 | |
105 def load_game(self, savefile): | |
106 if os.access(savefile, os.R_OK): | |
107 f = open(savefile, 'r') | |
90
0823e2529c23
Add robustness around the savefile stuff
Neil Muller <drnlmuller@gmail.com>
parents:
88
diff
changeset
|
108 try: |
0823e2529c23
Add robustness around the savefile stuff
Neil Muller <drnlmuller@gmail.com>
parents:
88
diff
changeset
|
109 game_data = json.load(f) |
0823e2529c23
Add robustness around the savefile stuff
Neil Muller <drnlmuller@gmail.com>
parents:
88
diff
changeset
|
110 except json.JSONDecodeError: |
0823e2529c23
Add robustness around the savefile stuff
Neil Muller <drnlmuller@gmail.com>
parents:
88
diff
changeset
|
111 print 'Unable to load the autosave file - skipping' |
0823e2529c23
Add robustness around the savefile stuff
Neil Muller <drnlmuller@gmail.com>
parents:
88
diff
changeset
|
112 game_data = None |
88 | 113 f.close() |
136
1a648d07d67e
Handle broken (but valid JSON) autosave more gracefully.
Jeremy Thurgood <firxen@gmail.com>
parents:
98
diff
changeset
|
114 try: |
1a648d07d67e
Handle broken (but valid JSON) autosave more gracefully.
Jeremy Thurgood <firxen@gmail.com>
parents:
98
diff
changeset
|
115 self.game_window = LabWindow(self.screen, game_data) |
1a648d07d67e
Handle broken (but valid JSON) autosave more gracefully.
Jeremy Thurgood <firxen@gmail.com>
parents:
98
diff
changeset
|
116 if game_data: |
1a648d07d67e
Handle broken (but valid JSON) autosave more gracefully.
Jeremy Thurgood <firxen@gmail.com>
parents:
98
diff
changeset
|
117 self.add_resume() |
1a648d07d67e
Handle broken (but valid JSON) autosave more gracefully.
Jeremy Thurgood <firxen@gmail.com>
parents:
98
diff
changeset
|
118 except Exception, e: |
1a648d07d67e
Handle broken (but valid JSON) autosave more gracefully.
Jeremy Thurgood <firxen@gmail.com>
parents:
98
diff
changeset
|
119 print 'Error loading autosave (%r) - ignoring' % (e,) |
88 | 120 # We stay at the main menu, so the user can can to continue or not |
121 | |
122 def add_resume(self): | |
53
655a6912e0ae
Split gui stuff out of main.py
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
123 if not self.resume: |
655a6912e0ae
Split gui stuff out of main.py
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
124 # Add the resume button |
655a6912e0ae
Split gui stuff out of main.py
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
125 self.resume = ResumeGameButton(self) |
655a6912e0ae
Split gui stuff out of main.py
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
126 self.add_child(self.resume) |
655a6912e0ae
Split gui stuff out of main.py
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
127 |
98 | 128 def game_over(self): |
129 if self.resume: | |
130 self.remove_child(self.resume) | |
131 self.resume = None | |
132 | |
53
655a6912e0ae
Split gui stuff out of main.py
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
133 def resume_game(self): |
655a6912e0ae
Split gui stuff out of main.py
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
134 AddWindow.post(self.game_window) |