Mercurial > rinkhals
annotate gamelib/gameboard.py @ 569:3ec614e6fd4a
Replace monolithic sell equipment tool with a tool for each type of equipment.
author | Simon Cross <hodgestar@gmail.com> |
---|---|
date | Sat, 28 Nov 2009 19:59:46 +0000 |
parents | 37f7454518d5 |
children | be47830a56b1 |
rev | line source |
---|---|
69
18db99fda6bd
Move spawing code from engine to gameboard - seems more natural.
Neil Muller <drnlmuller@gmail.com>
parents:
68
diff
changeset
|
1 import random |
18db99fda6bd
Move spawing code from engine to gameboard - seems more natural.
Neil Muller <drnlmuller@gmail.com>
parents:
68
diff
changeset
|
2 |
35 | 3 import pygame |
262
d508248041ff
avoid passing events in twice
Neil Muller <drnlmuller@gmail.com>
parents:
258
diff
changeset
|
4 from pygame.locals import MOUSEBUTTONDOWN, MOUSEMOTION, KEYDOWN, K_UP, K_DOWN, \ |
489 | 5 K_LEFT, K_RIGHT, KMOD_SHIFT, K_0, K_1, K_2, K_3, K_4, K_5, K_6, K_7, \ |
548
27c09c58d89d
Remove gameboard and dialog event flow hacks.
Simon Cross <hodgestar@gmail.com>
parents:
544
diff
changeset
|
6 K_8, K_9, K_ESCAPE, K_n, K_d, KMOD_CTRL, KMOD_ALT, KEYUP |
35 | 7 from pgu import gui |
9 | 8 |
24
7584453f4944
Add support for PNG tiles.
Simon Cross <hodgestar@gmail.com>
parents:
17
diff
changeset
|
9 import tiles |
79 | 10 import icons |
40
678421bd58ee
Money counter with very ugly display hack.
Jeremy Thurgood <firxen@gmail.com>
parents:
39
diff
changeset
|
11 import constants |
57
08665fa60345
Implement henhouses and henhouse adding.
Simon Cross <hodgestar@gmail.com>
parents:
54
diff
changeset
|
12 import buildings |
69
18db99fda6bd
Move spawing code from engine to gameboard - seems more natural.
Neil Muller <drnlmuller@gmail.com>
parents:
68
diff
changeset
|
13 import animal |
84 | 14 import equipment |
94 | 15 import sound |
162 | 16 import cursors |
186
f06010d34cd3
Add sprite cursors for building placement.
Simon Cross <hodgestar@gmail.com>
parents:
183
diff
changeset
|
17 import sprite_cursor |
241
1a7000c8211c
Demolition foxes, including better fox selection.
Jeremy Thurgood <firxen@gmail.com>
parents:
239
diff
changeset
|
18 import misc |
433
8643893635e7
Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
428
diff
changeset
|
19 import toolbar |
444
feb9b7a23ef2
Support for saving and loading games (toolbar entries commented out for lack of space).
Simon Cross <hodgestar@gmail.com>
parents:
434
diff
changeset
|
20 import serializer |
566
a8dde729000a
Add 'Save and Quit' option to quit dialog. Move game events from engine to constants to ease 'import engine' fun
Neil Muller <drnlmuller@gmail.com>
parents:
565
diff
changeset
|
21 import savegame |
152
702bc0eb2ac3
Fix Toolbar width to TOOLBAR_WIDTH by not allowing it to resize.
Simon Cross <hodgestar@gmail.com>
parents:
151
diff
changeset
|
22 |
35 | 23 class VidWidget(gui.Widget): |
24 def __init__(self, gameboard, vid, **params): | |
25 gui.Widget.__init__(self, **params) | |
26 self.gameboard = gameboard | |
27 self.vid = vid | |
151
082868bea873
Refactor UI so that only a single gui.App is used. Pass all UI events via main_app. Change Toolbar table to use .td() everywhere. Move toolbar to top.
Simon Cross <hodgestar@gmail.com>
parents:
148
diff
changeset
|
28 self.vid.bounds = pygame.Rect((0, 0), vid.tile_to_view(vid.size)) |
35 | 29 |
30 def paint(self, surface): | |
31 self.vid.paint(surface) | |
32 | |
33 def update(self, surface): | |
380
1586eccdefe4
Ripped out legacy animation infrastructure in favour of layered sprites.
Jeremy Thurgood <firxen@gmail.com>
parents:
379
diff
changeset
|
34 return self.vid.update(surface) |
35 | 35 |
39
ec79aabe2bf1
Scroll game window with arrow keys.
Jeremy Thurgood <firxen@gmail.com>
parents:
37
diff
changeset
|
36 def move_view(self, x, y): |
ec79aabe2bf1
Scroll game window with arrow keys.
Jeremy Thurgood <firxen@gmail.com>
parents:
37
diff
changeset
|
37 self.vid.view.move_ip((x, y)) |
ec79aabe2bf1
Scroll game window with arrow keys.
Jeremy Thurgood <firxen@gmail.com>
parents:
37
diff
changeset
|
38 |
35 | 39 def event(self, e): |
40 if e.type == MOUSEBUTTONDOWN: | |
41 self.gameboard.use_tool(e) | |
186
f06010d34cd3
Add sprite cursors for building placement.
Simon Cross <hodgestar@gmail.com>
parents:
183
diff
changeset
|
42 elif e.type == MOUSEMOTION and self.gameboard.sprite_cursor: |
f06010d34cd3
Add sprite cursors for building placement.
Simon Cross <hodgestar@gmail.com>
parents:
183
diff
changeset
|
43 self.gameboard.update_sprite_cursor(e) |
565 | 44 elif e.type == gui.ENTER: |
45 self.gameboard.set_tool_cursor() | |
46 elif e.type == gui.EXIT: | |
47 self.gameboard.set_menu_cursor() | |
541
450de9dfa106
Move gameboard event prodding into the widgets - better matches pgu internals
Neil Muller <drnlmuller@gmail.com>
parents:
539
diff
changeset
|
48 else: |
548
27c09c58d89d
Remove gameboard and dialog event flow hacks.
Simon Cross <hodgestar@gmail.com>
parents:
544
diff
changeset
|
49 return False |
35 | 50 |
456
96dbf2c8506e
Factor position cache out into its own class, make Position more useful.
Jeremy Thurgood <firxen@gmail.com>
parents:
453
diff
changeset
|
51 |
96dbf2c8506e
Factor position cache out into its own class, make Position more useful.
Jeremy Thurgood <firxen@gmail.com>
parents:
453
diff
changeset
|
52 class AnimalPositionCache(object): |
96dbf2c8506e
Factor position cache out into its own class, make Position more useful.
Jeremy Thurgood <firxen@gmail.com>
parents:
453
diff
changeset
|
53 def __init__(self, gameboard): |
96dbf2c8506e
Factor position cache out into its own class, make Position more useful.
Jeremy Thurgood <firxen@gmail.com>
parents:
453
diff
changeset
|
54 self.gameboard = gameboard |
96dbf2c8506e
Factor position cache out into its own class, make Position more useful.
Jeremy Thurgood <firxen@gmail.com>
parents:
453
diff
changeset
|
55 self.clear() |
96dbf2c8506e
Factor position cache out into its own class, make Position more useful.
Jeremy Thurgood <firxen@gmail.com>
parents:
453
diff
changeset
|
56 |
96dbf2c8506e
Factor position cache out into its own class, make Position more useful.
Jeremy Thurgood <firxen@gmail.com>
parents:
453
diff
changeset
|
57 def clear(self): |
96dbf2c8506e
Factor position cache out into its own class, make Position more useful.
Jeremy Thurgood <firxen@gmail.com>
parents:
453
diff
changeset
|
58 self._cache = {'chicken': {}, 'fox': {}} |
96dbf2c8506e
Factor position cache out into its own class, make Position more useful.
Jeremy Thurgood <firxen@gmail.com>
parents:
453
diff
changeset
|
59 |
96dbf2c8506e
Factor position cache out into its own class, make Position more useful.
Jeremy Thurgood <firxen@gmail.com>
parents:
453
diff
changeset
|
60 def _in_bounds(self, pos): |
96dbf2c8506e
Factor position cache out into its own class, make Position more useful.
Jeremy Thurgood <firxen@gmail.com>
parents:
453
diff
changeset
|
61 return self.gameboard.in_bounds(pos) |
96dbf2c8506e
Factor position cache out into its own class, make Position more useful.
Jeremy Thurgood <firxen@gmail.com>
parents:
453
diff
changeset
|
62 |
96dbf2c8506e
Factor position cache out into its own class, make Position more useful.
Jeremy Thurgood <firxen@gmail.com>
parents:
453
diff
changeset
|
63 def add(self, animal, animal_type): |
96dbf2c8506e
Factor position cache out into its own class, make Position more useful.
Jeremy Thurgood <firxen@gmail.com>
parents:
453
diff
changeset
|
64 if animal and self._in_bounds(animal.pos): |
96dbf2c8506e
Factor position cache out into its own class, make Position more useful.
Jeremy Thurgood <firxen@gmail.com>
parents:
453
diff
changeset
|
65 self._cache[animal_type][animal.pos] = animal |
96dbf2c8506e
Factor position cache out into its own class, make Position more useful.
Jeremy Thurgood <firxen@gmail.com>
parents:
453
diff
changeset
|
66 |
96dbf2c8506e
Factor position cache out into its own class, make Position more useful.
Jeremy Thurgood <firxen@gmail.com>
parents:
453
diff
changeset
|
67 def remove(self, pos, animal_type): |
457
fc648da2334c
Fix position cache removal, slightly optimise chicken range check.
Jeremy Thurgood <firxen@gmail.com>
parents:
456
diff
changeset
|
68 if pos in self._cache[animal_type]: |
456
96dbf2c8506e
Factor position cache out into its own class, make Position more useful.
Jeremy Thurgood <firxen@gmail.com>
parents:
453
diff
changeset
|
69 del self._cache[animal_type][pos] |
96dbf2c8506e
Factor position cache out into its own class, make Position more useful.
Jeremy Thurgood <firxen@gmail.com>
parents:
453
diff
changeset
|
70 |
96dbf2c8506e
Factor position cache out into its own class, make Position more useful.
Jeremy Thurgood <firxen@gmail.com>
parents:
453
diff
changeset
|
71 def update(self, old_pos, animal, animal_type): |
96dbf2c8506e
Factor position cache out into its own class, make Position more useful.
Jeremy Thurgood <firxen@gmail.com>
parents:
453
diff
changeset
|
72 self.remove(old_pos, animal_type) |
96dbf2c8506e
Factor position cache out into its own class, make Position more useful.
Jeremy Thurgood <firxen@gmail.com>
parents:
453
diff
changeset
|
73 self.add(animal, animal_type) |
96dbf2c8506e
Factor position cache out into its own class, make Position more useful.
Jeremy Thurgood <firxen@gmail.com>
parents:
453
diff
changeset
|
74 |
96dbf2c8506e
Factor position cache out into its own class, make Position more useful.
Jeremy Thurgood <firxen@gmail.com>
parents:
453
diff
changeset
|
75 def get(self, pos, animal_type): |
96dbf2c8506e
Factor position cache out into its own class, make Position more useful.
Jeremy Thurgood <firxen@gmail.com>
parents:
453
diff
changeset
|
76 return self._cache[animal_type].get(pos, None) |
96dbf2c8506e
Factor position cache out into its own class, make Position more useful.
Jeremy Thurgood <firxen@gmail.com>
parents:
453
diff
changeset
|
77 |
96dbf2c8506e
Factor position cache out into its own class, make Position more useful.
Jeremy Thurgood <firxen@gmail.com>
parents:
453
diff
changeset
|
78 |
444
feb9b7a23ef2
Support for saving and loading games (toolbar entries commented out for lack of space).
Simon Cross <hodgestar@gmail.com>
parents:
434
diff
changeset
|
79 class GameBoard(serializer.Simplifiable): |
9 | 80 |
66
edc15ce8fa30
Implement fence selling (a bit hackish, but fine for now).
Simon Cross <hodgestar@gmail.com>
parents:
65
diff
changeset
|
81 GRASSLAND = tiles.REVERSE_TILE_MAP['grassland'] |
edc15ce8fa30
Implement fence selling (a bit hackish, but fine for now).
Simon Cross <hodgestar@gmail.com>
parents:
65
diff
changeset
|
82 FENCE = tiles.REVERSE_TILE_MAP['fence'] |
69
18db99fda6bd
Move spawing code from engine to gameboard - seems more natural.
Neil Muller <drnlmuller@gmail.com>
parents:
68
diff
changeset
|
83 BROKEN_FENCE = tiles.REVERSE_TILE_MAP['broken fence'] |
66
edc15ce8fa30
Implement fence selling (a bit hackish, but fine for now).
Simon Cross <hodgestar@gmail.com>
parents:
65
diff
changeset
|
84 |
444
feb9b7a23ef2
Support for saving and loading games (toolbar entries commented out for lack of space).
Simon Cross <hodgestar@gmail.com>
parents:
434
diff
changeset
|
85 SIMPLIFY = [ |
468
d5e4959cfe7a
Start of support for restoring level information.
Simon Cross <hodgestar@gmail.com>
parents:
463
diff
changeset
|
86 'level', |
463
e3408c803b12
Save and restore tilevid when loading / saving games.
Simon Cross <hodgestar@gmail.com>
parents:
462
diff
changeset
|
87 'tv', |
468
d5e4959cfe7a
Start of support for restoring level information.
Simon Cross <hodgestar@gmail.com>
parents:
463
diff
changeset
|
88 'max_foxes', |
504
393e30ea0165
Save game loading working again.
Simon Cross <hodgestar@gmail.com>
parents:
500
diff
changeset
|
89 #'selected_tool', |
393e30ea0165
Save game loading working again.
Simon Cross <hodgestar@gmail.com>
parents:
500
diff
changeset
|
90 #'sprite_cursor', |
393e30ea0165
Save game loading working again.
Simon Cross <hodgestar@gmail.com>
parents:
500
diff
changeset
|
91 'selected_chickens', |
393e30ea0165
Save game loading working again.
Simon Cross <hodgestar@gmail.com>
parents:
500
diff
changeset
|
92 'stored_selections', |
444
feb9b7a23ef2
Support for saving and loading games (toolbar entries commented out for lack of space).
Simon Cross <hodgestar@gmail.com>
parents:
434
diff
changeset
|
93 'chickens', |
504
393e30ea0165
Save game loading working again.
Simon Cross <hodgestar@gmail.com>
parents:
500
diff
changeset
|
94 'foxes', |
444
feb9b7a23ef2
Support for saving and loading games (toolbar entries commented out for lack of space).
Simon Cross <hodgestar@gmail.com>
parents:
434
diff
changeset
|
95 'buildings', |
504
393e30ea0165
Save game loading working again.
Simon Cross <hodgestar@gmail.com>
parents:
500
diff
changeset
|
96 #'_pos_cache', |
444
feb9b7a23ef2
Support for saving and loading games (toolbar entries commented out for lack of space).
Simon Cross <hodgestar@gmail.com>
parents:
434
diff
changeset
|
97 'cash', |
feb9b7a23ef2
Support for saving and loading games (toolbar entries commented out for lack of space).
Simon Cross <hodgestar@gmail.com>
parents:
434
diff
changeset
|
98 'wood', |
feb9b7a23ef2
Support for saving and loading games (toolbar entries commented out for lack of space).
Simon Cross <hodgestar@gmail.com>
parents:
434
diff
changeset
|
99 'eggs', |
feb9b7a23ef2
Support for saving and loading games (toolbar entries commented out for lack of space).
Simon Cross <hodgestar@gmail.com>
parents:
434
diff
changeset
|
100 'days', |
feb9b7a23ef2
Support for saving and loading games (toolbar entries commented out for lack of space).
Simon Cross <hodgestar@gmail.com>
parents:
434
diff
changeset
|
101 'killed_foxes', |
feb9b7a23ef2
Support for saving and loading games (toolbar entries commented out for lack of space).
Simon Cross <hodgestar@gmail.com>
parents:
434
diff
changeset
|
102 'day', 'night', |
feb9b7a23ef2
Support for saving and loading games (toolbar entries commented out for lack of space).
Simon Cross <hodgestar@gmail.com>
parents:
434
diff
changeset
|
103 ] |
feb9b7a23ef2
Support for saving and loading games (toolbar entries commented out for lack of space).
Simon Cross <hodgestar@gmail.com>
parents:
434
diff
changeset
|
104 |
389
463802281182
Add basic level support (level choosing needs work)
Neil Muller <drnlmuller@gmail.com>
parents:
382
diff
changeset
|
105 def __init__(self, main_app, level): |
151
082868bea873
Refactor UI so that only a single gui.App is used. Pass all UI events via main_app. Change Toolbar table to use .td() everywhere. Move toolbar to top.
Simon Cross <hodgestar@gmail.com>
parents:
148
diff
changeset
|
106 self.disp = main_app |
389
463802281182
Add basic level support (level choosing needs work)
Neil Muller <drnlmuller@gmail.com>
parents:
382
diff
changeset
|
107 self.level = level |
24
7584453f4944
Add support for PNG tiles.
Simon Cross <hodgestar@gmail.com>
parents:
17
diff
changeset
|
108 self.tv = tiles.FarmVid() |
303
e12d99215b74
Fix up data module unix-to-local path fixing. Fix similar problems in tile importing.
Simon Cross <hodgestar@gmail.com>
parents:
302
diff
changeset
|
109 self.tv.png_folder_load_tiles('tiles') |
389
463802281182
Add basic level support (level choosing needs work)
Neil Muller <drnlmuller@gmail.com>
parents:
382
diff
changeset
|
110 self.tv.tga_load_level(level.map) |
382
e89e6ad011ac
Use code layer to place chickens
Neil Muller <drnlmuller@gmail.com>
parents:
381
diff
changeset
|
111 width, height = self.tv.size |
323
978efd39a099
Limit maximum numbe of foxes generated
Neil Muller <drnlmuller@gmail.com>
parents:
320
diff
changeset
|
112 # Ensure we don't every try to create more foxes then is sane |
403
c7cfa230f5d4
Remove board size restriction on number of foxes
Neil Muller <drnlmuller@gmail.com>
parents:
401
diff
changeset
|
113 self.max_foxes = level.max_foxes |
460 | 114 self.calculate_wood_groat_exchange_rate() |
40
678421bd58ee
Money counter with very ugly display hack.
Jeremy Thurgood <firxen@gmail.com>
parents:
39
diff
changeset
|
115 |
35 | 116 self.selected_tool = None |
186
f06010d34cd3
Add sprite cursors for building placement.
Simon Cross <hodgestar@gmail.com>
parents:
183
diff
changeset
|
117 self.sprite_cursor = None |
487
a5dc09881aa1
rationalised when tools are reset; e.g. you can trade wood without losing selection / move tool. Default toolbar shows correct tool when reloaded (select/move only; other tools reset)
Adrianna Pińska <adrianna.pinska@gmail.com>
parents:
485
diff
changeset
|
118 self.selected_chickens = [] |
489 | 119 self.stored_selections = {} |
116
d539ef5a3333
Add basic chicken->egg cycle
Neil Muller <drnlmuller@gmail.com>
parents:
115
diff
changeset
|
120 self.chickens = set() |
d539ef5a3333
Add basic chicken->egg cycle
Neil Muller <drnlmuller@gmail.com>
parents:
115
diff
changeset
|
121 self.foxes = set() |
444
feb9b7a23ef2
Support for saving and loading games (toolbar entries commented out for lack of space).
Simon Cross <hodgestar@gmail.com>
parents:
434
diff
changeset
|
122 self.buildings = set() |
456
96dbf2c8506e
Factor position cache out into its own class, make Position more useful.
Jeremy Thurgood <firxen@gmail.com>
parents:
453
diff
changeset
|
123 self._pos_cache = AnimalPositionCache(self) |
40
678421bd58ee
Money counter with very ugly display hack.
Jeremy Thurgood <firxen@gmail.com>
parents:
39
diff
changeset
|
124 self.cash = 0 |
422
ab4fc3fe0f96
chickens scatter; chop wood
Adrianna Pińska <adrianna.pinska@gmail.com>
parents:
421
diff
changeset
|
125 self.wood = 0 |
118
2c76ed47fc44
Remove chicken respawn at day start. Handle eaten chickens in henhouses better
Neil Muller <drnlmuller@gmail.com>
parents:
116
diff
changeset
|
126 self.eggs = 0 |
139
1d73de63bd71
Add basic game over screen
Neil Muller <drnlmuller@gmail.com>
parents:
135
diff
changeset
|
127 self.days = 0 |
79 | 128 self.killed_foxes = 0 |
223 | 129 self.day, self.night = True, False |
424
fbef17cab632
Use fully rendered map in gameboard choosing screen
Neil Muller <drnlmuller@gmail.com>
parents:
422
diff
changeset
|
130 # For the level loading case |
fbef17cab632
Use fully rendered map in gameboard choosing screen
Neil Muller <drnlmuller@gmail.com>
parents:
422
diff
changeset
|
131 if self.disp: |
447
f04a2490c35f
The sub-toolbar rewrite, the finally not crashing version
Neil Muller <drnlmuller@gmail.com>
parents:
444
diff
changeset
|
132 self.toolbar = None |
424
fbef17cab632
Use fully rendered map in gameboard choosing screen
Neil Muller <drnlmuller@gmail.com>
parents:
422
diff
changeset
|
133 self.create_display() |
fbef17cab632
Use fully rendered map in gameboard choosing screen
Neil Muller <drnlmuller@gmail.com>
parents:
422
diff
changeset
|
134 self.add_cash(level.starting_cash) |
428
a356e57529ea
buildings cost wood
Adrianna Pińska <adrianna.pinska@gmail.com>
parents:
425
diff
changeset
|
135 self.add_wood(level.starting_wood) |
17
cbbc5da7708a
Interaction with the game board.
Jeremy Thurgood <firxen@gmail.com>
parents:
14
diff
changeset
|
136 |
67
9171d9b9ab35
Sanity check and fix up buildings on map after loading.
Simon Cross <hodgestar@gmail.com>
parents:
66
diff
changeset
|
137 self.fix_buildings() |
9171d9b9ab35
Sanity check and fix up buildings on map after loading.
Simon Cross <hodgestar@gmail.com>
parents:
66
diff
changeset
|
138 |
408
02a6de5629d6
Levels can include starting equipment
Neil Muller <drnlmuller@gmail.com>
parents:
405
diff
changeset
|
139 cdata = {} |
02a6de5629d6
Levels can include starting equipment
Neil Muller <drnlmuller@gmail.com>
parents:
405
diff
changeset
|
140 for tn in equipment.EQUIP_MAP: |
02a6de5629d6
Levels can include starting equipment
Neil Muller <drnlmuller@gmail.com>
parents:
405
diff
changeset
|
141 cdata[tn] = (self.add_start_chickens, tn) |
382
e89e6ad011ac
Use code layer to place chickens
Neil Muller <drnlmuller@gmail.com>
parents:
381
diff
changeset
|
142 |
e89e6ad011ac
Use code layer to place chickens
Neil Muller <drnlmuller@gmail.com>
parents:
381
diff
changeset
|
143 self.tv.run_codes(cdata, (0,0,width,height)) |
118
2c76ed47fc44
Remove chicken respawn at day start. Handle eaten chickens in henhouses better
Neil Muller <drnlmuller@gmail.com>
parents:
116
diff
changeset
|
144 |
504
393e30ea0165
Save game loading working again.
Simon Cross <hodgestar@gmail.com>
parents:
500
diff
changeset
|
145 @classmethod |
393e30ea0165
Save game loading working again.
Simon Cross <hodgestar@gmail.com>
parents:
500
diff
changeset
|
146 def unsimplify(cls, *args, **kwargs): |
393e30ea0165
Save game loading working again.
Simon Cross <hodgestar@gmail.com>
parents:
500
diff
changeset
|
147 """Override default Simplifiable unsimplification.""" |
393e30ea0165
Save game loading working again.
Simon Cross <hodgestar@gmail.com>
parents:
500
diff
changeset
|
148 obj = super(GameBoard, cls).unsimplify(*args, **kwargs) |
393e30ea0165
Save game loading working again.
Simon Cross <hodgestar@gmail.com>
parents:
500
diff
changeset
|
149 |
393e30ea0165
Save game loading working again.
Simon Cross <hodgestar@gmail.com>
parents:
500
diff
changeset
|
150 obj.tv.png_folder_load_tiles('tiles') |
393e30ea0165
Save game loading working again.
Simon Cross <hodgestar@gmail.com>
parents:
500
diff
changeset
|
151 obj.calculate_wood_groat_exchange_rate() |
393e30ea0165
Save game loading working again.
Simon Cross <hodgestar@gmail.com>
parents:
500
diff
changeset
|
152 |
393e30ea0165
Save game loading working again.
Simon Cross <hodgestar@gmail.com>
parents:
500
diff
changeset
|
153 obj._pos_cache = AnimalPositionCache(obj) |
393e30ea0165
Save game loading working again.
Simon Cross <hodgestar@gmail.com>
parents:
500
diff
changeset
|
154 obj._cache_animal_positions() |
393e30ea0165
Save game loading working again.
Simon Cross <hodgestar@gmail.com>
parents:
500
diff
changeset
|
155 |
393e30ea0165
Save game loading working again.
Simon Cross <hodgestar@gmail.com>
parents:
500
diff
changeset
|
156 obj.sprite_cursor = None |
393e30ea0165
Save game loading working again.
Simon Cross <hodgestar@gmail.com>
parents:
500
diff
changeset
|
157 obj.set_selected_tool(None, None) |
393e30ea0165
Save game loading working again.
Simon Cross <hodgestar@gmail.com>
parents:
500
diff
changeset
|
158 |
393e30ea0165
Save game loading working again.
Simon Cross <hodgestar@gmail.com>
parents:
500
diff
changeset
|
159 obj.disp = None |
393e30ea0165
Save game loading working again.
Simon Cross <hodgestar@gmail.com>
parents:
500
diff
changeset
|
160 |
393e30ea0165
Save game loading working again.
Simon Cross <hodgestar@gmail.com>
parents:
500
diff
changeset
|
161 # put chickens, foxes and buildings into sprite list |
393e30ea0165
Save game loading working again.
Simon Cross <hodgestar@gmail.com>
parents:
500
diff
changeset
|
162 |
393e30ea0165
Save game loading working again.
Simon Cross <hodgestar@gmail.com>
parents:
500
diff
changeset
|
163 existing_chickens = obj.chickens |
393e30ea0165
Save game loading working again.
Simon Cross <hodgestar@gmail.com>
parents:
500
diff
changeset
|
164 obj.chickens = set() |
393e30ea0165
Save game loading working again.
Simon Cross <hodgestar@gmail.com>
parents:
500
diff
changeset
|
165 for chicken in existing_chickens: |
393e30ea0165
Save game loading working again.
Simon Cross <hodgestar@gmail.com>
parents:
500
diff
changeset
|
166 obj.add_chicken(chicken) |
393e30ea0165
Save game loading working again.
Simon Cross <hodgestar@gmail.com>
parents:
500
diff
changeset
|
167 |
393e30ea0165
Save game loading working again.
Simon Cross <hodgestar@gmail.com>
parents:
500
diff
changeset
|
168 existing_foxes = obj.foxes |
393e30ea0165
Save game loading working again.
Simon Cross <hodgestar@gmail.com>
parents:
500
diff
changeset
|
169 obj.foxes = set() |
393e30ea0165
Save game loading working again.
Simon Cross <hodgestar@gmail.com>
parents:
500
diff
changeset
|
170 for fox in existing_foxes: |
393e30ea0165
Save game loading working again.
Simon Cross <hodgestar@gmail.com>
parents:
500
diff
changeset
|
171 obj.add_fox(fox) |
393e30ea0165
Save game loading working again.
Simon Cross <hodgestar@gmail.com>
parents:
500
diff
changeset
|
172 |
393e30ea0165
Save game loading working again.
Simon Cross <hodgestar@gmail.com>
parents:
500
diff
changeset
|
173 existing_buildings = obj.buildings |
393e30ea0165
Save game loading working again.
Simon Cross <hodgestar@gmail.com>
parents:
500
diff
changeset
|
174 obj.buildings = set() |
393e30ea0165
Save game loading working again.
Simon Cross <hodgestar@gmail.com>
parents:
500
diff
changeset
|
175 for building in existing_buildings: |
393e30ea0165
Save game loading working again.
Simon Cross <hodgestar@gmail.com>
parents:
500
diff
changeset
|
176 obj.add_building(building) |
393e30ea0165
Save game loading working again.
Simon Cross <hodgestar@gmail.com>
parents:
500
diff
changeset
|
177 |
393e30ea0165
Save game loading working again.
Simon Cross <hodgestar@gmail.com>
parents:
500
diff
changeset
|
178 # self.disp is not set properly here |
393e30ea0165
Save game loading working again.
Simon Cross <hodgestar@gmail.com>
parents:
500
diff
changeset
|
179 # whoever unsimplifies the gameboard needs to arrange for it to be |
393e30ea0165
Save game loading working again.
Simon Cross <hodgestar@gmail.com>
parents:
500
diff
changeset
|
180 # set and then call .create_display() and so create: |
393e30ea0165
Save game loading working again.
Simon Cross <hodgestar@gmail.com>
parents:
500
diff
changeset
|
181 # - .toolbar |
393e30ea0165
Save game loading working again.
Simon Cross <hodgestar@gmail.com>
parents:
500
diff
changeset
|
182 # - .tvw |
393e30ea0165
Save game loading working again.
Simon Cross <hodgestar@gmail.com>
parents:
500
diff
changeset
|
183 # - .top_widget |
393e30ea0165
Save game loading working again.
Simon Cross <hodgestar@gmail.com>
parents:
500
diff
changeset
|
184 |
393e30ea0165
Save game loading working again.
Simon Cross <hodgestar@gmail.com>
parents:
500
diff
changeset
|
185 return obj |
393e30ea0165
Save game loading working again.
Simon Cross <hodgestar@gmail.com>
parents:
500
diff
changeset
|
186 |
151
082868bea873
Refactor UI so that only a single gui.App is used. Pass all UI events via main_app. Change Toolbar table to use .td() everywhere. Move toolbar to top.
Simon Cross <hodgestar@gmail.com>
parents:
148
diff
changeset
|
187 def get_top_widget(self): |
082868bea873
Refactor UI so that only a single gui.App is used. Pass all UI events via main_app. Change Toolbar table to use .td() everywhere. Move toolbar to top.
Simon Cross <hodgestar@gmail.com>
parents:
148
diff
changeset
|
188 return self.top_widget |
082868bea873
Refactor UI so that only a single gui.App is used. Pass all UI events via main_app. Change Toolbar table to use .td() everywhere. Move toolbar to top.
Simon Cross <hodgestar@gmail.com>
parents:
148
diff
changeset
|
189 |
082868bea873
Refactor UI so that only a single gui.App is used. Pass all UI events via main_app. Change Toolbar table to use .td() everywhere. Move toolbar to top.
Simon Cross <hodgestar@gmail.com>
parents:
148
diff
changeset
|
190 def create_display(self): |
082868bea873
Refactor UI so that only a single gui.App is used. Pass all UI events via main_app. Change Toolbar table to use .td() everywhere. Move toolbar to top.
Simon Cross <hodgestar@gmail.com>
parents:
148
diff
changeset
|
191 width, height = self.disp.rect.w, self.disp.rect.h |
36
5569430fd82e
Display cleanup and rationalisation.
Jeremy Thurgood <firxen@gmail.com>
parents:
35
diff
changeset
|
192 tbl = gui.Table() |
5569430fd82e
Display cleanup and rationalisation.
Jeremy Thurgood <firxen@gmail.com>
parents:
35
diff
changeset
|
193 tbl.tr() |
447
f04a2490c35f
The sub-toolbar rewrite, the finally not crashing version
Neil Muller <drnlmuller@gmail.com>
parents:
444
diff
changeset
|
194 self.toolbar = toolbar.DefaultToolBar(self, width=constants.TOOLBAR_WIDTH) |
151
082868bea873
Refactor UI so that only a single gui.App is used. Pass all UI events via main_app. Change Toolbar table to use .td() everywhere. Move toolbar to top.
Simon Cross <hodgestar@gmail.com>
parents:
148
diff
changeset
|
195 tbl.td(self.toolbar, valign=-1) |
433
8643893635e7
Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
428
diff
changeset
|
196 self.tvw = VidWidget(self, self.tv, width=width-constants.TOOLBAR_WIDTH, height=height) |
37
497b53b69280
Always update the vidwidget.
Jeremy Thurgood <firxen@gmail.com>
parents:
36
diff
changeset
|
197 tbl.td(self.tvw) |
548
27c09c58d89d
Remove gameboard and dialog event flow hacks.
Simon Cross <hodgestar@gmail.com>
parents:
544
diff
changeset
|
198 |
27c09c58d89d
Remove gameboard and dialog event flow hacks.
Simon Cross <hodgestar@gmail.com>
parents:
544
diff
changeset
|
199 # we should probably create a custom widget to be the top widget |
27c09c58d89d
Remove gameboard and dialog event flow hacks.
Simon Cross <hodgestar@gmail.com>
parents:
544
diff
changeset
|
200 # if we want to flow some events to the gameboard |
27c09c58d89d
Remove gameboard and dialog event flow hacks.
Simon Cross <hodgestar@gmail.com>
parents:
544
diff
changeset
|
201 def event(e): |
27c09c58d89d
Remove gameboard and dialog event flow hacks.
Simon Cross <hodgestar@gmail.com>
parents:
544
diff
changeset
|
202 if gui.Table.event(tbl, e): |
27c09c58d89d
Remove gameboard and dialog event flow hacks.
Simon Cross <hodgestar@gmail.com>
parents:
544
diff
changeset
|
203 return True |
27c09c58d89d
Remove gameboard and dialog event flow hacks.
Simon Cross <hodgestar@gmail.com>
parents:
544
diff
changeset
|
204 return self.event(e) |
27c09c58d89d
Remove gameboard and dialog event flow hacks.
Simon Cross <hodgestar@gmail.com>
parents:
544
diff
changeset
|
205 tbl.event = event |
27c09c58d89d
Remove gameboard and dialog event flow hacks.
Simon Cross <hodgestar@gmail.com>
parents:
544
diff
changeset
|
206 |
151
082868bea873
Refactor UI so that only a single gui.App is used. Pass all UI events via main_app. Change Toolbar table to use .td() everywhere. Move toolbar to top.
Simon Cross <hodgestar@gmail.com>
parents:
148
diff
changeset
|
207 self.top_widget = tbl |
504
393e30ea0165
Save game loading working again.
Simon Cross <hodgestar@gmail.com>
parents:
500
diff
changeset
|
208 self.redraw_counters() |
14 | 209 |
447
f04a2490c35f
The sub-toolbar rewrite, the finally not crashing version
Neil Muller <drnlmuller@gmail.com>
parents:
444
diff
changeset
|
210 def change_toolbar(self, new_toolbar): |
f04a2490c35f
The sub-toolbar rewrite, the finally not crashing version
Neil Muller <drnlmuller@gmail.com>
parents:
444
diff
changeset
|
211 """Replace the toolbar""" |
f04a2490c35f
The sub-toolbar rewrite, the finally not crashing version
Neil Muller <drnlmuller@gmail.com>
parents:
444
diff
changeset
|
212 td = self.toolbar.container |
f04a2490c35f
The sub-toolbar rewrite, the finally not crashing version
Neil Muller <drnlmuller@gmail.com>
parents:
444
diff
changeset
|
213 td.remove(self.toolbar) |
f04a2490c35f
The sub-toolbar rewrite, the finally not crashing version
Neil Muller <drnlmuller@gmail.com>
parents:
444
diff
changeset
|
214 td.add(new_toolbar, 0, 0) |
f04a2490c35f
The sub-toolbar rewrite, the finally not crashing version
Neil Muller <drnlmuller@gmail.com>
parents:
444
diff
changeset
|
215 self.toolbar = new_toolbar |
449 | 216 self.toolbar.rect.size = self.toolbar.resize() |
452
17e07b4cdeb4
Seperate counter redrawing as seperate method
Neil Muller <drnlmuller@gmail.com>
parents:
451
diff
changeset
|
217 self.redraw_counters() |
17e07b4cdeb4
Seperate counter redrawing as seperate method
Neil Muller <drnlmuller@gmail.com>
parents:
451
diff
changeset
|
218 td.repaint() |
17e07b4cdeb4
Seperate counter redrawing as seperate method
Neil Muller <drnlmuller@gmail.com>
parents:
451
diff
changeset
|
219 |
493
ee883d390ff0
cleaned up tool reset / preservation on toolbar change so that it all happens in one place
Adrianna Pińska <adrianna.pinska@gmail.com>
parents:
492
diff
changeset
|
220 if new_toolbar.MOVE_SELECT_PERMITTED: |
ee883d390ff0
cleaned up tool reset / preservation on toolbar change so that it all happens in one place
Adrianna Pińska <adrianna.pinska@gmail.com>
parents:
492
diff
changeset
|
221 if self.selected_tool not in [constants.TOOL_SELECT_CHICKENS, constants.TOOL_PLACE_ANIMALS]: |
ee883d390ff0
cleaned up tool reset / preservation on toolbar change so that it all happens in one place
Adrianna Pińska <adrianna.pinska@gmail.com>
parents:
492
diff
changeset
|
222 self.set_selected_tool(None, None) |
ee883d390ff0
cleaned up tool reset / preservation on toolbar change so that it all happens in one place
Adrianna Pińska <adrianna.pinska@gmail.com>
parents:
492
diff
changeset
|
223 else: |
ee883d390ff0
cleaned up tool reset / preservation on toolbar change so that it all happens in one place
Adrianna Pińska <adrianna.pinska@gmail.com>
parents:
492
diff
changeset
|
224 self.set_selected_tool(None, None) |
ee883d390ff0
cleaned up tool reset / preservation on toolbar change so that it all happens in one place
Adrianna Pińska <adrianna.pinska@gmail.com>
parents:
492
diff
changeset
|
225 self.unselect_all() |
ee883d390ff0
cleaned up tool reset / preservation on toolbar change so that it all happens in one place
Adrianna Pińska <adrianna.pinska@gmail.com>
parents:
492
diff
changeset
|
226 |
452
17e07b4cdeb4
Seperate counter redrawing as seperate method
Neil Muller <drnlmuller@gmail.com>
parents:
451
diff
changeset
|
227 def redraw_counters(self): |
451
d0f586647dfa
Redraw counters when changing toolbars
Neil Muller <drnlmuller@gmail.com>
parents:
449
diff
changeset
|
228 self.toolbar.update_egg_counter(self.eggs) |
470
fbbd39cfc975
Alter day counter logic a bit to cater for the case when it stops being the last day.
Simon Cross <hodgestar@gmail.com>
parents:
468
diff
changeset
|
229 if self.level.is_last_day(self.days): |
fbbd39cfc975
Alter day counter logic a bit to cater for the case when it stops being the last day.
Simon Cross <hodgestar@gmail.com>
parents:
468
diff
changeset
|
230 self.toolbar.day_counter.style.color = (255, 0, 0) |
fbbd39cfc975
Alter day counter logic a bit to cater for the case when it stops being the last day.
Simon Cross <hodgestar@gmail.com>
parents:
468
diff
changeset
|
231 else: |
fbbd39cfc975
Alter day counter logic a bit to cater for the case when it stops being the last day.
Simon Cross <hodgestar@gmail.com>
parents:
468
diff
changeset
|
232 # can come back from last day when restoring a saved game |
fbbd39cfc975
Alter day counter logic a bit to cater for the case when it stops being the last day.
Simon Cross <hodgestar@gmail.com>
parents:
468
diff
changeset
|
233 self.toolbar.day_counter.style.color = (255, 255, 255) |
451
d0f586647dfa
Redraw counters when changing toolbars
Neil Muller <drnlmuller@gmail.com>
parents:
449
diff
changeset
|
234 self.toolbar.update_day_counter("%s/%s" % (self.days, |
d0f586647dfa
Redraw counters when changing toolbars
Neil Muller <drnlmuller@gmail.com>
parents:
449
diff
changeset
|
235 self.level.get_max_turns())) |
d0f586647dfa
Redraw counters when changing toolbars
Neil Muller <drnlmuller@gmail.com>
parents:
449
diff
changeset
|
236 self.toolbar.update_chicken_counter(len(self.chickens)) |
d0f586647dfa
Redraw counters when changing toolbars
Neil Muller <drnlmuller@gmail.com>
parents:
449
diff
changeset
|
237 self.toolbar.update_cash_counter(self.cash) |
d0f586647dfa
Redraw counters when changing toolbars
Neil Muller <drnlmuller@gmail.com>
parents:
449
diff
changeset
|
238 self.toolbar.update_wood_counter(self.wood) |
544
84964077626a
Counter display more compact, although not as pretty as it should be.
Jeremy Thurgood <firxen@gmail.com>
parents:
542
diff
changeset
|
239 self.toolbar.update_fox_counter(self.killed_foxes) |
447
f04a2490c35f
The sub-toolbar rewrite, the finally not crashing version
Neil Muller <drnlmuller@gmail.com>
parents:
444
diff
changeset
|
240 |
151
082868bea873
Refactor UI so that only a single gui.App is used. Pass all UI events via main_app. Change Toolbar table to use .td() everywhere. Move toolbar to top.
Simon Cross <hodgestar@gmail.com>
parents:
148
diff
changeset
|
241 def update(self): |
37
497b53b69280
Always update the vidwidget.
Jeremy Thurgood <firxen@gmail.com>
parents:
36
diff
changeset
|
242 self.tvw.reupdate() |
9 | 243 |
244 def loop(self): | |
25
6d6ab0c1479d
Add placing some chickens and foxes
Neil Muller <drnlmuller@gmail.com>
parents:
24
diff
changeset
|
245 self.tv.loop() |
9 | 246 |
162 | 247 def set_selected_tool(self, tool, cursor): |
223 | 248 if not self.day: |
472
67574723427e
Partially working (but much less crashy) multiple select support
Neil Muller <drnlmuller@gmail.com>
parents:
470
diff
changeset
|
249 return False |
67574723427e
Partially working (but much less crashy) multiple select support
Neil Muller <drnlmuller@gmail.com>
parents:
470
diff
changeset
|
250 if self.apply_tool_to_selected(tool): |
67574723427e
Partially working (but much less crashy) multiple select support
Neil Muller <drnlmuller@gmail.com>
parents:
470
diff
changeset
|
251 return False # Using the tool on selected chickens is immediate |
35 | 252 self.selected_tool = tool |
203
653da96db572
Fixed dangling cursor sprite and did some TODO list maintenance.
Jeremy Thurgood <firxen@gmail.com>
parents:
202
diff
changeset
|
253 sprite_curs = None |
653da96db572
Fixed dangling cursor sprite and did some TODO list maintenance.
Jeremy Thurgood <firxen@gmail.com>
parents:
202
diff
changeset
|
254 if buildings.is_building(tool): |
232
0bd214cf9018
Overlay cost on building sprite cursors.
Simon Cross <hodgestar@gmail.com>
parents:
228
diff
changeset
|
255 sprite_curs = sprite_cursor.SpriteCursor(tool.IMAGE, self.tv, tool.BUY_PRICE) |
247
5b9cd693fe7c
Add sprite cursors for equipment buying.
Simon Cross <hodgestar@gmail.com>
parents:
245
diff
changeset
|
256 elif equipment.is_equipment(tool): |
5b9cd693fe7c
Add sprite cursors for equipment buying.
Simon Cross <hodgestar@gmail.com>
parents:
245
diff
changeset
|
257 sprite_curs = sprite_cursor.SpriteCursor(tool.CHICKEN_IMAGE_FILE, self.tv) |
474
a50b53983389
Allow moving multiple animals more easily
Neil Muller <drnlmuller@gmail.com>
parents:
473
diff
changeset
|
258 elif tool == constants.TOOL_PLACE_ANIMALS and self.selected_chickens: |
a50b53983389
Allow moving multiple animals more easily
Neil Muller <drnlmuller@gmail.com>
parents:
473
diff
changeset
|
259 cursor = cursors.cursors['chicken'] |
565 | 260 self.current_cursor = (cursor, sprite_curs) |
261 self.set_tool_cursor((cursor, sprite_curs)) | |
472
67574723427e
Partially working (but much less crashy) multiple select support
Neil Muller <drnlmuller@gmail.com>
parents:
470
diff
changeset
|
262 return True |
67574723427e
Partially working (but much less crashy) multiple select support
Neil Muller <drnlmuller@gmail.com>
parents:
470
diff
changeset
|
263 |
565 | 264 def set_tool_cursor(self, current_cursor=None): |
265 if current_cursor: | |
266 self.current_cursor = current_cursor | |
267 if pygame.mouse.get_pos()[0] >= constants.TOOLBAR_WIDTH: | |
268 self.set_cursor(*self.current_cursor) | |
269 | |
270 def set_menu_cursor(self): | |
271 self.set_cursor() | |
272 | |
472
67574723427e
Partially working (but much less crashy) multiple select support
Neil Muller <drnlmuller@gmail.com>
parents:
470
diff
changeset
|
273 def apply_tool_to_selected(self, tool): |
67574723427e
Partially working (but much less crashy) multiple select support
Neil Muller <drnlmuller@gmail.com>
parents:
470
diff
changeset
|
274 if self.selected_chickens: |
67574723427e
Partially working (but much less crashy) multiple select support
Neil Muller <drnlmuller@gmail.com>
parents:
470
diff
changeset
|
275 # dispatch call to selected chickens if appropriate |
67574723427e
Partially working (but much less crashy) multiple select support
Neil Muller <drnlmuller@gmail.com>
parents:
470
diff
changeset
|
276 if tool == constants.TOOL_SELL_CHICKEN: |
67574723427e
Partially working (but much less crashy) multiple select support
Neil Muller <drnlmuller@gmail.com>
parents:
470
diff
changeset
|
277 self.sell_chicken(None) |
67574723427e
Partially working (but much less crashy) multiple select support
Neil Muller <drnlmuller@gmail.com>
parents:
470
diff
changeset
|
278 return True |
67574723427e
Partially working (but much less crashy) multiple select support
Neil Muller <drnlmuller@gmail.com>
parents:
470
diff
changeset
|
279 elif tool == constants.TOOL_SELL_EGG: |
67574723427e
Partially working (but much less crashy) multiple select support
Neil Muller <drnlmuller@gmail.com>
parents:
470
diff
changeset
|
280 self.sell_egg(None) |
67574723427e
Partially working (but much less crashy) multiple select support
Neil Muller <drnlmuller@gmail.com>
parents:
470
diff
changeset
|
281 return True |
569
3ec614e6fd4a
Replace monolithic sell equipment tool with a tool for each type of equipment.
Simon Cross <hodgestar@gmail.com>
parents:
567
diff
changeset
|
282 elif toolbar.SellToolBar.is_equip_tool(tool): |
3ec614e6fd4a
Replace monolithic sell equipment tool with a tool for each type of equipment.
Simon Cross <hodgestar@gmail.com>
parents:
567
diff
changeset
|
283 equipment_cls = toolbar.SellToolBar.get_equip_cls(tool) |
3ec614e6fd4a
Replace monolithic sell equipment tool with a tool for each type of equipment.
Simon Cross <hodgestar@gmail.com>
parents:
567
diff
changeset
|
284 self.sell_equipment(None, equipment_cls) |
472
67574723427e
Partially working (but much less crashy) multiple select support
Neil Muller <drnlmuller@gmail.com>
parents:
470
diff
changeset
|
285 return True |
67574723427e
Partially working (but much less crashy) multiple select support
Neil Muller <drnlmuller@gmail.com>
parents:
470
diff
changeset
|
286 elif equipment.is_equipment(tool): |
67574723427e
Partially working (but much less crashy) multiple select support
Neil Muller <drnlmuller@gmail.com>
parents:
470
diff
changeset
|
287 self.buy_equipment(None, tool) |
67574723427e
Partially working (but much less crashy) multiple select support
Neil Muller <drnlmuller@gmail.com>
parents:
470
diff
changeset
|
288 return True |
67574723427e
Partially working (but much less crashy) multiple select support
Neil Muller <drnlmuller@gmail.com>
parents:
470
diff
changeset
|
289 return False |
203
653da96db572
Fixed dangling cursor sprite and did some TODO list maintenance.
Jeremy Thurgood <firxen@gmail.com>
parents:
202
diff
changeset
|
290 |
653da96db572
Fixed dangling cursor sprite and did some TODO list maintenance.
Jeremy Thurgood <firxen@gmail.com>
parents:
202
diff
changeset
|
291 def set_cursor(self, cursor=None, sprite_curs=None): |
162 | 292 if cursor: |
293 pygame.mouse.set_cursor(*cursor) | |
294 else: | |
295 pygame.mouse.set_cursor(*cursors.cursors['arrow']) | |
379
a8a7ada27fa2
Multilayer sprite ordering. Only used by cursors so far.
Jeremy Thurgood <firxen@gmail.com>
parents:
378
diff
changeset
|
296 if self.sprite_cursor is not None: |
a8a7ada27fa2
Multilayer sprite ordering. Only used by cursors so far.
Jeremy Thurgood <firxen@gmail.com>
parents:
378
diff
changeset
|
297 self.tv.sprites.remove(self.sprite_cursor, layer='cursor') |
218
5cb0e0b9cd16
Make sprite cursors stay on top by fudging the sprite list. :/
Simon Cross <hodgestar@gmail.com>
parents:
217
diff
changeset
|
298 self.sprite_cursor = sprite_curs |
379
a8a7ada27fa2
Multilayer sprite ordering. Only used by cursors so far.
Jeremy Thurgood <firxen@gmail.com>
parents:
378
diff
changeset
|
299 if self.sprite_cursor is not None: |
a8a7ada27fa2
Multilayer sprite ordering. Only used by cursors so far.
Jeremy Thurgood <firxen@gmail.com>
parents:
378
diff
changeset
|
300 self.tv.sprites.append(self.sprite_cursor, layer='cursor') |
213
07b361ebd87f
Ensure we clean up highlights, etc.
Neil Muller <drnlmuller@gmail.com>
parents:
212
diff
changeset
|
301 |
07b361ebd87f
Ensure we clean up highlights, etc.
Neil Muller <drnlmuller@gmail.com>
parents:
212
diff
changeset
|
302 def reset_states(self): |
07b361ebd87f
Ensure we clean up highlights, etc.
Neil Muller <drnlmuller@gmail.com>
parents:
212
diff
changeset
|
303 """Clear current states (highlights, etc.)""" |
245
634491bf37e8
Change toolbar to gui.Toolbar -- gives nicer highlighting.
Simon Cross <hodgestar@gmail.com>
parents:
243
diff
changeset
|
304 self.set_selected_tool(None, None) |
634491bf37e8
Change toolbar to gui.Toolbar -- gives nicer highlighting.
Simon Cross <hodgestar@gmail.com>
parents:
243
diff
changeset
|
305 self.toolbar.clear_tool() |
17
cbbc5da7708a
Interaction with the game board.
Jeremy Thurgood <firxen@gmail.com>
parents:
14
diff
changeset
|
306 |
186
f06010d34cd3
Add sprite cursors for building placement.
Simon Cross <hodgestar@gmail.com>
parents:
183
diff
changeset
|
307 def update_sprite_cursor(self, e): |
f06010d34cd3
Add sprite cursors for building placement.
Simon Cross <hodgestar@gmail.com>
parents:
183
diff
changeset
|
308 tile_pos = self.tv.screen_to_tile(e.pos) |
f06010d34cd3
Add sprite cursors for building placement.
Simon Cross <hodgestar@gmail.com>
parents:
183
diff
changeset
|
309 self.sprite_cursor.set_pos(tile_pos) |
f06010d34cd3
Add sprite cursors for building placement.
Simon Cross <hodgestar@gmail.com>
parents:
183
diff
changeset
|
310 |
223 | 311 def start_night(self): |
312 self.day, self.night = False, True | |
313 self.tv.sun(False) | |
314 self.reset_states() | |
500
4d980444ebfb
deselect chickens at night
Adrianna Pińska <adrianna.pinska@gmail.com>
parents:
498
diff
changeset
|
315 self.unselect_all() |
434
f2a55e5e24db
Disable non-selectable toolbar widgets at night
Neil Muller <drnlmuller@gmail.com>
parents:
433
diff
changeset
|
316 self.toolbar.start_night() |
413
bdc4757e0497
Add Sniper Rifle and give guns limited ammunition.
Jeremy Thurgood <firxen@gmail.com>
parents:
408
diff
changeset
|
317 self.spawn_foxes() |
414
9096c237928c
Dear most illustrious brother, I seek your cooperation with the refactoring of egg layerings and the reloading of guns. Please to provide bank details.
Jeremy Thurgood <firxen@gmail.com>
parents:
413
diff
changeset
|
318 self.eggs = 0 |
419
d110d55c8449
Move hatching logic into chickens.
Jeremy Thurgood <firxen@gmail.com>
parents:
414
diff
changeset
|
319 for chicken in self.chickens.copy(): |
476
3dae0fc14009
Animals have their own gameboard references instead of lugging them around in params all the time.
Jeremy Thurgood <firxen@gmail.com>
parents:
475
diff
changeset
|
320 chicken.start_night() |
414
9096c237928c
Dear most illustrious brother, I seek your cooperation with the refactoring of egg layerings and the reloading of guns. Please to provide bank details.
Jeremy Thurgood <firxen@gmail.com>
parents:
413
diff
changeset
|
321 self.toolbar.update_egg_counter(self.eggs) |
425
1d0cc37b4e14
Add method for clearing all chickens (will be useful later). Cache animal positions only just before night starts. Range-check position before adding it to the cache.
Simon Cross <hodgestar@gmail.com>
parents:
424
diff
changeset
|
322 self._cache_animal_positions() |
539
f4d1b9ff9558
Lumberjacks only wander off when their work is done.
Jeremy Thurgood <firxen@gmail.com>
parents:
538
diff
changeset
|
323 self.chickens_chop_wood() |
f4d1b9ff9558
Lumberjacks only wander off when their work is done.
Jeremy Thurgood <firxen@gmail.com>
parents:
538
diff
changeset
|
324 self.chickens_scatter() |
223 | 325 |
326 def start_day(self): | |
512
b112bcf4d435
Add restore game button to main menu.
Simon Cross <hodgestar@gmail.com>
parents:
506
diff
changeset
|
327 if hasattr(self, '_skip_start_day'): |
b112bcf4d435
Add restore game button to main menu.
Simon Cross <hodgestar@gmail.com>
parents:
506
diff
changeset
|
328 del self._skip_start_day |
b112bcf4d435
Add restore game button to main menu.
Simon Cross <hodgestar@gmail.com>
parents:
506
diff
changeset
|
329 return |
223 | 330 self.day, self.night = True, False |
331 self.tv.sun(True) | |
332 self.reset_states() | |
434
f2a55e5e24db
Disable non-selectable toolbar widgets at night
Neil Muller <drnlmuller@gmail.com>
parents:
433
diff
changeset
|
333 self.toolbar.start_day() |
456
96dbf2c8506e
Factor position cache out into its own class, make Position more useful.
Jeremy Thurgood <firxen@gmail.com>
parents:
453
diff
changeset
|
334 self._pos_cache.clear() |
413
bdc4757e0497
Add Sniper Rifle and give guns limited ammunition.
Jeremy Thurgood <firxen@gmail.com>
parents:
408
diff
changeset
|
335 self.advance_day() |
bdc4757e0497
Add Sniper Rifle and give guns limited ammunition.
Jeremy Thurgood <firxen@gmail.com>
parents:
408
diff
changeset
|
336 self.clear_foxes() |
419
d110d55c8449
Move hatching logic into chickens.
Jeremy Thurgood <firxen@gmail.com>
parents:
414
diff
changeset
|
337 for chicken in self.chickens.copy(): |
476
3dae0fc14009
Animals have their own gameboard references instead of lugging them around in params all the time.
Jeremy Thurgood <firxen@gmail.com>
parents:
475
diff
changeset
|
338 chicken.start_day() |
470
fbbd39cfc975
Alter day counter logic a bit to cater for the case when it stops being the last day.
Simon Cross <hodgestar@gmail.com>
parents:
468
diff
changeset
|
339 self.redraw_counters() |
223 | 340 |
512
b112bcf4d435
Add restore game button to main menu.
Simon Cross <hodgestar@gmail.com>
parents:
506
diff
changeset
|
341 def skip_next_start_day(self): |
b112bcf4d435
Add restore game button to main menu.
Simon Cross <hodgestar@gmail.com>
parents:
506
diff
changeset
|
342 # used to skip the start of the day triggered after |
b112bcf4d435
Add restore game button to main menu.
Simon Cross <hodgestar@gmail.com>
parents:
506
diff
changeset
|
343 # reloading a save game |
b112bcf4d435
Add restore game button to main menu.
Simon Cross <hodgestar@gmail.com>
parents:
506
diff
changeset
|
344 self._skip_start_day = True |
b112bcf4d435
Add restore game button to main menu.
Simon Cross <hodgestar@gmail.com>
parents:
506
diff
changeset
|
345 |
69
18db99fda6bd
Move spawing code from engine to gameboard - seems more natural.
Neil Muller <drnlmuller@gmail.com>
parents:
68
diff
changeset
|
346 def in_bounds(self, pos): |
18db99fda6bd
Move spawing code from engine to gameboard - seems more natural.
Neil Muller <drnlmuller@gmail.com>
parents:
68
diff
changeset
|
347 """Check if a position is within the game boundaries""" |
18db99fda6bd
Move spawing code from engine to gameboard - seems more natural.
Neil Muller <drnlmuller@gmail.com>
parents:
68
diff
changeset
|
348 if pos.x < 0 or pos.y < 0: |
18db99fda6bd
Move spawing code from engine to gameboard - seems more natural.
Neil Muller <drnlmuller@gmail.com>
parents:
68
diff
changeset
|
349 return False |
18db99fda6bd
Move spawing code from engine to gameboard - seems more natural.
Neil Muller <drnlmuller@gmail.com>
parents:
68
diff
changeset
|
350 width, height = self.tv.size |
18db99fda6bd
Move spawing code from engine to gameboard - seems more natural.
Neil Muller <drnlmuller@gmail.com>
parents:
68
diff
changeset
|
351 if pos.x >= width or pos.y >= height: |
18db99fda6bd
Move spawing code from engine to gameboard - seems more natural.
Neil Muller <drnlmuller@gmail.com>
parents:
68
diff
changeset
|
352 return False |
18db99fda6bd
Move spawing code from engine to gameboard - seems more natural.
Neil Muller <drnlmuller@gmail.com>
parents:
68
diff
changeset
|
353 return True |
18db99fda6bd
Move spawing code from engine to gameboard - seems more natural.
Neil Muller <drnlmuller@gmail.com>
parents:
68
diff
changeset
|
354 |
17
cbbc5da7708a
Interaction with the game board.
Jeremy Thurgood <firxen@gmail.com>
parents:
14
diff
changeset
|
355 def use_tool(self, e): |
223 | 356 if not self.day: |
357 return | |
189
37af9e5dd292
Use tool with left button, cancel tool with right button.
Jeremy Thurgood <firxen@gmail.com>
parents:
186
diff
changeset
|
358 if e.button == 3: # Right button |
492
e8430f93b23a
toggling select/move can now be initiated from no selected tool and in any toolbar where select/move is allowed
Adrianna Pińska <adrianna.pinska@gmail.com>
parents:
490
diff
changeset
|
359 if self.toolbar.MOVE_SELECT_PERMITTED: |
e8430f93b23a
toggling select/move can now be initiated from no selected tool and in any toolbar where select/move is allowed
Adrianna Pińska <adrianna.pinska@gmail.com>
parents:
490
diff
changeset
|
360 if self.selected_tool != constants.TOOL_SELECT_CHICKENS: |
e8430f93b23a
toggling select/move can now be initiated from no selected tool and in any toolbar where select/move is allowed
Adrianna Pińska <adrianna.pinska@gmail.com>
parents:
490
diff
changeset
|
361 self.set_selected_tool(constants.TOOL_SELECT_CHICKENS, cursors.cursors["select"]) |
e8430f93b23a
toggling select/move can now be initiated from no selected tool and in any toolbar where select/move is allowed
Adrianna Pińska <adrianna.pinska@gmail.com>
parents:
490
diff
changeset
|
362 elif self.selected_tool == constants.TOOL_SELECT_CHICKENS: |
e8430f93b23a
toggling select/move can now be initiated from no selected tool and in any toolbar where select/move is allowed
Adrianna Pińska <adrianna.pinska@gmail.com>
parents:
490
diff
changeset
|
363 self.set_selected_tool(constants.TOOL_PLACE_ANIMALS, cursors.cursors["chicken"]) |
538
ec5276cfe98b
put back code to highlight move/select button appropriately
Adrianna Pińska <adrianna.pinska@gmail.com>
parents:
536
diff
changeset
|
364 if self.toolbar.IS_DEFAULT: |
ec5276cfe98b
put back code to highlight move/select button appropriately
Adrianna Pińska <adrianna.pinska@gmail.com>
parents:
536
diff
changeset
|
365 self.toolbar.highlight_move_select_button() |
480
312120a99181
right-click now toggles select and move tool
Adrianna Pińska <adrianna.pinska@gmail.com>
parents:
479
diff
changeset
|
366 return |
488
a9f6c32c8ea9
put back deselect tool + chickens under middleclick, so that you can fall back to old equip behaviour while in equipment menu
Adrianna Pińska <adrianna.pinska@gmail.com>
parents:
487
diff
changeset
|
367 elif e.button == 2: # Middle button |
490
8308bef91864
fixed so that tool highlight also cleared.
Adrianna Pińska <adrianna.pinska@gmail.com>
parents:
489
diff
changeset
|
368 self.reset_states() |
488
a9f6c32c8ea9
put back deselect tool + chickens under middleclick, so that you can fall back to old equip behaviour while in equipment menu
Adrianna Pińska <adrianna.pinska@gmail.com>
parents:
487
diff
changeset
|
369 self.unselect_all() |
189
37af9e5dd292
Use tool with left button, cancel tool with right button.
Jeremy Thurgood <firxen@gmail.com>
parents:
186
diff
changeset
|
370 elif e.button != 1: # Left button |
37af9e5dd292
Use tool with left button, cancel tool with right button.
Jeremy Thurgood <firxen@gmail.com>
parents:
186
diff
changeset
|
371 return |
479
1689b43ed8be
Use KMOD_SHIFT to allow shift-click selecting of multiple chickens.
Simon Cross <hodgestar@gmail.com>
parents:
478
diff
changeset
|
372 mods = pygame.key.get_mods() |
52
0d4799866bcf
Sell chickens and buy fences.
Jeremy Thurgood <firxen@gmail.com>
parents:
40
diff
changeset
|
373 if self.selected_tool == constants.TOOL_SELL_CHICKEN: |
105
7910b4e01dba
Add chicken moving tool and start of animal placement.
Simon Cross <hodgestar@gmail.com>
parents:
98
diff
changeset
|
374 self.sell_chicken(self.tv.screen_to_tile(e.pos)) |
57
08665fa60345
Implement henhouses and henhouse adding.
Simon Cross <hodgestar@gmail.com>
parents:
54
diff
changeset
|
375 elif self.selected_tool == constants.TOOL_SELL_EGG: |
192
a490ee2ef446
Allow selling of chickens in henhouses
Neil Muller <drnlmuller@gmail.com>
parents:
191
diff
changeset
|
376 self.sell_egg(self.tv.screen_to_tile(e.pos)) |
105
7910b4e01dba
Add chicken moving tool and start of animal placement.
Simon Cross <hodgestar@gmail.com>
parents:
98
diff
changeset
|
377 elif self.selected_tool == constants.TOOL_PLACE_ANIMALS: |
7910b4e01dba
Add chicken moving tool and start of animal placement.
Simon Cross <hodgestar@gmail.com>
parents:
98
diff
changeset
|
378 self.place_animal(self.tv.screen_to_tile(e.pos)) |
516
4166a0051bb6
Reset cursor as well when changing tool. Avoid crash with non-default toolbar
Neil Muller <drnlmuller@gmail.com>
parents:
514
diff
changeset
|
379 self.set_selected_tool(constants.TOOL_SELECT_CHICKENS, cursors.cursors["select"]) |
472
67574723427e
Partially working (but much less crashy) multiple select support
Neil Muller <drnlmuller@gmail.com>
parents:
470
diff
changeset
|
380 elif self.selected_tool == constants.TOOL_SELECT_CHICKENS: |
514
55b95bb25ced
On move, revert to the select tool - why would you want to move the same chicken twice?
David Fraser <davidf@sjsoft.com>
parents:
512
diff
changeset
|
381 # ctrl moves current selection without having to select move tool |
55b95bb25ced
On move, revert to the select tool - why would you want to move the same chicken twice?
David Fraser <davidf@sjsoft.com>
parents:
512
diff
changeset
|
382 if (mods & KMOD_CTRL): |
55b95bb25ced
On move, revert to the select tool - why would you want to move the same chicken twice?
David Fraser <davidf@sjsoft.com>
parents:
512
diff
changeset
|
383 self.place_animal(self.tv.screen_to_tile(e.pos)) |
55b95bb25ced
On move, revert to the select tool - why would you want to move the same chicken twice?
David Fraser <davidf@sjsoft.com>
parents:
512
diff
changeset
|
384 else: |
55b95bb25ced
On move, revert to the select tool - why would you want to move the same chicken twice?
David Fraser <davidf@sjsoft.com>
parents:
512
diff
changeset
|
385 if not (mods & KMOD_SHIFT): |
55b95bb25ced
On move, revert to the select tool - why would you want to move the same chicken twice?
David Fraser <davidf@sjsoft.com>
parents:
512
diff
changeset
|
386 self.unselect_all() |
55b95bb25ced
On move, revert to the select tool - why would you want to move the same chicken twice?
David Fraser <davidf@sjsoft.com>
parents:
512
diff
changeset
|
387 self.select_chicken(self.tv.screen_to_tile(e.pos)) |
65
7e9c8ad06d32
Implement building selling.
Simon Cross <hodgestar@gmail.com>
parents:
64
diff
changeset
|
388 elif self.selected_tool == constants.TOOL_SELL_BUILDING: |
7e9c8ad06d32
Implement building selling.
Simon Cross <hodgestar@gmail.com>
parents:
64
diff
changeset
|
389 self.sell_building(self.tv.screen_to_tile(e.pos)) |
378
71f5897ac5ef
Fences are now buildings, with appropriate (but ugly) UI changes.
Jeremy Thurgood <firxen@gmail.com>
parents:
361
diff
changeset
|
390 elif self.selected_tool == constants.TOOL_REPAIR_BUILDING: |
71f5897ac5ef
Fences are now buildings, with appropriate (but ugly) UI changes.
Jeremy Thurgood <firxen@gmail.com>
parents:
361
diff
changeset
|
391 self.repair_building(self.tv.screen_to_tile(e.pos)) |
64
99fbb652ce8d
Refactor buildings so that new ones can be added just by adding a class to buildings.py.
Simon Cross <hodgestar@gmail.com>
parents:
60
diff
changeset
|
392 elif buildings.is_building(self.selected_tool): |
65
7e9c8ad06d32
Implement building selling.
Simon Cross <hodgestar@gmail.com>
parents:
64
diff
changeset
|
393 self.buy_building(self.tv.screen_to_tile(e.pos), self.selected_tool) |
569
3ec614e6fd4a
Replace monolithic sell equipment tool with a tool for each type of equipment.
Simon Cross <hodgestar@gmail.com>
parents:
567
diff
changeset
|
394 elif toolbar.SellToolBar.is_equip_tool(self.selected_tool): |
3ec614e6fd4a
Replace monolithic sell equipment tool with a tool for each type of equipment.
Simon Cross <hodgestar@gmail.com>
parents:
567
diff
changeset
|
395 equipment_cls = toolbar.SellToolBar.get_equip_cls(self.selected_tool) |
3ec614e6fd4a
Replace monolithic sell equipment tool with a tool for each type of equipment.
Simon Cross <hodgestar@gmail.com>
parents:
567
diff
changeset
|
396 self.sell_equipment(self.tv.screen_to_tile(e.pos), equipment_cls) |
109
48019afde338
Equipment purchasing and some toolbar tweaks.
Jeremy Thurgood <firxen@gmail.com>
parents:
108
diff
changeset
|
397 elif equipment.is_equipment(self.selected_tool): |
472
67574723427e
Partially working (but much less crashy) multiple select support
Neil Muller <drnlmuller@gmail.com>
parents:
470
diff
changeset
|
398 if not self.selected_chickens: |
67574723427e
Partially working (but much less crashy) multiple select support
Neil Muller <drnlmuller@gmail.com>
parents:
470
diff
changeset
|
399 # old selection behaviour |
67574723427e
Partially working (but much less crashy) multiple select support
Neil Muller <drnlmuller@gmail.com>
parents:
470
diff
changeset
|
400 self.buy_equipment(self.tv.screen_to_tile(e.pos), |
67574723427e
Partially working (but much less crashy) multiple select support
Neil Muller <drnlmuller@gmail.com>
parents:
470
diff
changeset
|
401 self.selected_tool) |
17
cbbc5da7708a
Interaction with the game board.
Jeremy Thurgood <firxen@gmail.com>
parents:
14
diff
changeset
|
402 |
166
4aa800354b7c
Rename get_chicken to get_outside_chicken.
Simon Cross <hodgestar@gmail.com>
parents:
165
diff
changeset
|
403 def get_outside_chicken(self, tile_pos): |
54
b8f64db0d39e
Cleaned up buying and selling a bit.
Jeremy Thurgood <firxen@gmail.com>
parents:
52
diff
changeset
|
404 for chick in self.chickens: |
164
ab90040013a7
Implement equipment selling.
Simon Cross <hodgestar@gmail.com>
parents:
162
diff
changeset
|
405 if chick.covers(tile_pos) and chick.outside(): |
54
b8f64db0d39e
Cleaned up buying and selling a bit.
Jeremy Thurgood <firxen@gmail.com>
parents:
52
diff
changeset
|
406 return chick |
b8f64db0d39e
Cleaned up buying and selling a bit.
Jeremy Thurgood <firxen@gmail.com>
parents:
52
diff
changeset
|
407 return None |
57
08665fa60345
Implement henhouses and henhouse adding.
Simon Cross <hodgestar@gmail.com>
parents:
54
diff
changeset
|
408 |
105
7910b4e01dba
Add chicken moving tool and start of animal placement.
Simon Cross <hodgestar@gmail.com>
parents:
98
diff
changeset
|
409 def get_building(self, tile_pos): |
7910b4e01dba
Add chicken moving tool and start of animal placement.
Simon Cross <hodgestar@gmail.com>
parents:
98
diff
changeset
|
410 for building in self.buildings: |
7910b4e01dba
Add chicken moving tool and start of animal placement.
Simon Cross <hodgestar@gmail.com>
parents:
98
diff
changeset
|
411 if building.covers(tile_pos): |
7910b4e01dba
Add chicken moving tool and start of animal placement.
Simon Cross <hodgestar@gmail.com>
parents:
98
diff
changeset
|
412 return building |
7910b4e01dba
Add chicken moving tool and start of animal placement.
Simon Cross <hodgestar@gmail.com>
parents:
98
diff
changeset
|
413 return None |
7910b4e01dba
Add chicken moving tool and start of animal placement.
Simon Cross <hodgestar@gmail.com>
parents:
98
diff
changeset
|
414 |
7910b4e01dba
Add chicken moving tool and start of animal placement.
Simon Cross <hodgestar@gmail.com>
parents:
98
diff
changeset
|
415 def sell_chicken(self, tile_pos): |
192
a490ee2ef446
Allow selling of chickens in henhouses
Neil Muller <drnlmuller@gmail.com>
parents:
191
diff
changeset
|
416 |
310
49c58dda8ac2
Refactor sell_callback, so sell_equipment work
Neil Muller <drnlmuller@gmail.com>
parents:
307
diff
changeset
|
417 def do_sell(chicken, update_button=None): |
192
a490ee2ef446
Allow selling of chickens in henhouses
Neil Muller <drnlmuller@gmail.com>
parents:
191
diff
changeset
|
418 if not chicken: |
a490ee2ef446
Allow selling of chickens in henhouses
Neil Muller <drnlmuller@gmail.com>
parents:
191
diff
changeset
|
419 return False # sanity check |
a490ee2ef446
Allow selling of chickens in henhouses
Neil Muller <drnlmuller@gmail.com>
parents:
191
diff
changeset
|
420 if len(self.chickens) == 1: |
326
89f51d513606
Add TextDialog class and use it to warn about selling your last chicken.
Simon Cross <hodgestar@gmail.com>
parents:
325
diff
changeset
|
421 msg = "You can't sell your last chicken!" |
89f51d513606
Add TextDialog class and use it to warn about selling your last chicken.
Simon Cross <hodgestar@gmail.com>
parents:
325
diff
changeset
|
422 TextDialog("Squuaaawwwwwk!", msg).open() |
192
a490ee2ef446
Allow selling of chickens in henhouses
Neil Muller <drnlmuller@gmail.com>
parents:
191
diff
changeset
|
423 return False |
228
f74de4280e20
Sell chicken's equipment when you sell the chicken.
Simon Cross <hodgestar@gmail.com>
parents:
227
diff
changeset
|
424 for item in list(chicken.equipment): |
f74de4280e20
Sell chicken's equipment when you sell the chicken.
Simon Cross <hodgestar@gmail.com>
parents:
227
diff
changeset
|
425 self.add_cash(item.sell_price()) |
f74de4280e20
Sell chicken's equipment when you sell the chicken.
Simon Cross <hodgestar@gmail.com>
parents:
227
diff
changeset
|
426 chicken.unequip(item) |
389
463802281182
Add basic level support (level choosing needs work)
Neil Muller <drnlmuller@gmail.com>
parents:
382
diff
changeset
|
427 self.add_cash(self.level.sell_price_chicken) |
192
a490ee2ef446
Allow selling of chickens in henhouses
Neil Muller <drnlmuller@gmail.com>
parents:
191
diff
changeset
|
428 sound.play_sound("sell-chicken.ogg") |
310
49c58dda8ac2
Refactor sell_callback, so sell_equipment work
Neil Muller <drnlmuller@gmail.com>
parents:
307
diff
changeset
|
429 if update_button: |
49c58dda8ac2
Refactor sell_callback, so sell_equipment work
Neil Muller <drnlmuller@gmail.com>
parents:
307
diff
changeset
|
430 update_button(chicken, empty=True) |
49c58dda8ac2
Refactor sell_callback, so sell_equipment work
Neil Muller <drnlmuller@gmail.com>
parents:
307
diff
changeset
|
431 self.remove_chicken(chicken) |
192
a490ee2ef446
Allow selling of chickens in henhouses
Neil Muller <drnlmuller@gmail.com>
parents:
191
diff
changeset
|
432 return True |
a490ee2ef446
Allow selling of chickens in henhouses
Neil Muller <drnlmuller@gmail.com>
parents:
191
diff
changeset
|
433 |
472
67574723427e
Partially working (but much less crashy) multiple select support
Neil Muller <drnlmuller@gmail.com>
parents:
470
diff
changeset
|
434 if tile_pos: |
67574723427e
Partially working (but much less crashy) multiple select support
Neil Muller <drnlmuller@gmail.com>
parents:
470
diff
changeset
|
435 chick = self.get_outside_chicken(tile_pos) |
67574723427e
Partially working (but much less crashy) multiple select support
Neil Muller <drnlmuller@gmail.com>
parents:
470
diff
changeset
|
436 if chick is None: |
67574723427e
Partially working (but much less crashy) multiple select support
Neil Muller <drnlmuller@gmail.com>
parents:
470
diff
changeset
|
437 building = self.get_building(tile_pos) |
67574723427e
Partially working (but much less crashy) multiple select support
Neil Muller <drnlmuller@gmail.com>
parents:
470
diff
changeset
|
438 if building and building.HENHOUSE: |
474
a50b53983389
Allow moving multiple animals more easily
Neil Muller <drnlmuller@gmail.com>
parents:
473
diff
changeset
|
439 self.open_building_dialog(building, False, do_sell) |
472
67574723427e
Partially working (but much less crashy) multiple select support
Neil Muller <drnlmuller@gmail.com>
parents:
470
diff
changeset
|
440 return |
67574723427e
Partially working (but much less crashy) multiple select support
Neil Muller <drnlmuller@gmail.com>
parents:
470
diff
changeset
|
441 do_sell(chick) |
67574723427e
Partially working (but much less crashy) multiple select support
Neil Muller <drnlmuller@gmail.com>
parents:
470
diff
changeset
|
442 else: |
556
46f6f1a98f3f
Add warning dialogs for dangerous operations
Neil Muller <drnlmuller@gmail.com>
parents:
553
diff
changeset
|
443 def sure(val): |
46f6f1a98f3f
Add warning dialogs for dangerous operations
Neil Muller <drnlmuller@gmail.com>
parents:
553
diff
changeset
|
444 if val: |
46f6f1a98f3f
Add warning dialogs for dangerous operations
Neil Muller <drnlmuller@gmail.com>
parents:
553
diff
changeset
|
445 for chick in self.selected_chickens[:]: |
46f6f1a98f3f
Add warning dialogs for dangerous operations
Neil Muller <drnlmuller@gmail.com>
parents:
553
diff
changeset
|
446 do_sell(chick) |
46f6f1a98f3f
Add warning dialogs for dangerous operations
Neil Muller <drnlmuller@gmail.com>
parents:
553
diff
changeset
|
447 if self._check_dangerous_sale(): |
46f6f1a98f3f
Add warning dialogs for dangerous operations
Neil Muller <drnlmuller@gmail.com>
parents:
553
diff
changeset
|
448 dialog = misc.CheckDialog(sure, |
46f6f1a98f3f
Add warning dialogs for dangerous operations
Neil Muller <drnlmuller@gmail.com>
parents:
553
diff
changeset
|
449 "These chickens have equipment or eggs. Do you want to sell?", |
46f6f1a98f3f
Add warning dialogs for dangerous operations
Neil Muller <drnlmuller@gmail.com>
parents:
553
diff
changeset
|
450 "Yes, Sell Them", "No, Don't Sell", None) |
46f6f1a98f3f
Add warning dialogs for dangerous operations
Neil Muller <drnlmuller@gmail.com>
parents:
553
diff
changeset
|
451 self.disp.open(dialog) |
46f6f1a98f3f
Add warning dialogs for dangerous operations
Neil Muller <drnlmuller@gmail.com>
parents:
553
diff
changeset
|
452 else: |
46f6f1a98f3f
Add warning dialogs for dangerous operations
Neil Muller <drnlmuller@gmail.com>
parents:
553
diff
changeset
|
453 sure(1) |
192
a490ee2ef446
Allow selling of chickens in henhouses
Neil Muller <drnlmuller@gmail.com>
parents:
191
diff
changeset
|
454 |
243
4f86c2616cdf
Variable number of eggs for chickens
Neil Muller <drnlmuller@gmail.com>
parents:
241
diff
changeset
|
455 def sell_one_egg(self, chicken): |
4f86c2616cdf
Variable number of eggs for chickens
Neil Muller <drnlmuller@gmail.com>
parents:
241
diff
changeset
|
456 if chicken.eggs: |
389
463802281182
Add basic level support (level choosing needs work)
Neil Muller <drnlmuller@gmail.com>
parents:
382
diff
changeset
|
457 self.add_cash(self.level.sell_price_egg) |
476
3dae0fc14009
Animals have their own gameboard references instead of lugging them around in params all the time.
Jeremy Thurgood <firxen@gmail.com>
parents:
475
diff
changeset
|
458 chicken.remove_one_egg() |
243
4f86c2616cdf
Variable number of eggs for chickens
Neil Muller <drnlmuller@gmail.com>
parents:
241
diff
changeset
|
459 return True |
4f86c2616cdf
Variable number of eggs for chickens
Neil Muller <drnlmuller@gmail.com>
parents:
241
diff
changeset
|
460 return False |
4f86c2616cdf
Variable number of eggs for chickens
Neil Muller <drnlmuller@gmail.com>
parents:
241
diff
changeset
|
461 |
475
d4f04d81fe54
Rinkhals eats eggs, along with associated changes.
Jeremy Thurgood <firxen@gmail.com>
parents:
474
diff
changeset
|
462 def remove_eggs(self, num): |
d4f04d81fe54
Rinkhals eats eggs, along with associated changes.
Jeremy Thurgood <firxen@gmail.com>
parents:
474
diff
changeset
|
463 self.eggs -= num |
d4f04d81fe54
Rinkhals eats eggs, along with associated changes.
Jeremy Thurgood <firxen@gmail.com>
parents:
474
diff
changeset
|
464 self.toolbar.update_egg_counter(self.eggs) |
d4f04d81fe54
Rinkhals eats eggs, along with associated changes.
Jeremy Thurgood <firxen@gmail.com>
parents:
474
diff
changeset
|
465 |
192
a490ee2ef446
Allow selling of chickens in henhouses
Neil Muller <drnlmuller@gmail.com>
parents:
191
diff
changeset
|
466 def sell_egg(self, tile_pos): |
310
49c58dda8ac2
Refactor sell_callback, so sell_equipment work
Neil Muller <drnlmuller@gmail.com>
parents:
307
diff
changeset
|
467 def do_sell(chicken, update_button=None): |
243
4f86c2616cdf
Variable number of eggs for chickens
Neil Muller <drnlmuller@gmail.com>
parents:
241
diff
changeset
|
468 # We try sell and egg |
4f86c2616cdf
Variable number of eggs for chickens
Neil Muller <drnlmuller@gmail.com>
parents:
241
diff
changeset
|
469 if self.sell_one_egg(chicken): |
193 | 470 sound.play_sound("sell-chicken.ogg") |
243
4f86c2616cdf
Variable number of eggs for chickens
Neil Muller <drnlmuller@gmail.com>
parents:
241
diff
changeset
|
471 # Force toolbar update |
193 | 472 self.toolbar.chsize() |
310
49c58dda8ac2
Refactor sell_callback, so sell_equipment work
Neil Muller <drnlmuller@gmail.com>
parents:
307
diff
changeset
|
473 if update_button: |
49c58dda8ac2
Refactor sell_callback, so sell_equipment work
Neil Muller <drnlmuller@gmail.com>
parents:
307
diff
changeset
|
474 update_button(chicken) |
192
a490ee2ef446
Allow selling of chickens in henhouses
Neil Muller <drnlmuller@gmail.com>
parents:
191
diff
changeset
|
475 return False |
193 | 476 |
473
4b8ca482ea08
don't crash when selling eggs from selected chickens
Neil Muller <drnlmuller@gmail.com>
parents:
472
diff
changeset
|
477 if tile_pos: |
4b8ca482ea08
don't crash when selling eggs from selected chickens
Neil Muller <drnlmuller@gmail.com>
parents:
472
diff
changeset
|
478 building = self.get_building(tile_pos) |
4b8ca482ea08
don't crash when selling eggs from selected chickens
Neil Muller <drnlmuller@gmail.com>
parents:
472
diff
changeset
|
479 if building and building.HENHOUSE: |
523
103b0fc36722
Apply action to all selected chickens in building dialog
Neil Muller <drnlmuller@gmail.com>
parents:
522
diff
changeset
|
480 self.open_building_dialog(building, False, do_sell) |
473
4b8ca482ea08
don't crash when selling eggs from selected chickens
Neil Muller <drnlmuller@gmail.com>
parents:
472
diff
changeset
|
481 else: |
4b8ca482ea08
don't crash when selling eggs from selected chickens
Neil Muller <drnlmuller@gmail.com>
parents:
472
diff
changeset
|
482 for chicken in self.selected_chickens: |
4b8ca482ea08
don't crash when selling eggs from selected chickens
Neil Muller <drnlmuller@gmail.com>
parents:
472
diff
changeset
|
483 do_sell(chicken) |
54
b8f64db0d39e
Cleaned up buying and selling a bit.
Jeremy Thurgood <firxen@gmail.com>
parents:
52
diff
changeset
|
484 |
556
46f6f1a98f3f
Add warning dialogs for dangerous operations
Neil Muller <drnlmuller@gmail.com>
parents:
553
diff
changeset
|
485 def _check_dangerous_sale(self): |
46f6f1a98f3f
Add warning dialogs for dangerous operations
Neil Muller <drnlmuller@gmail.com>
parents:
553
diff
changeset
|
486 # Dangerous sales are: selling chickens with equipment & selling |
46f6f1a98f3f
Add warning dialogs for dangerous operations
Neil Muller <drnlmuller@gmail.com>
parents:
553
diff
changeset
|
487 # chickens with eggs |
46f6f1a98f3f
Add warning dialogs for dangerous operations
Neil Muller <drnlmuller@gmail.com>
parents:
553
diff
changeset
|
488 for chick in self.selected_chickens: |
46f6f1a98f3f
Add warning dialogs for dangerous operations
Neil Muller <drnlmuller@gmail.com>
parents:
553
diff
changeset
|
489 if chick.eggs or chick.weapons() or chick.armour(): |
46f6f1a98f3f
Add warning dialogs for dangerous operations
Neil Muller <drnlmuller@gmail.com>
parents:
553
diff
changeset
|
490 return True |
46f6f1a98f3f
Add warning dialogs for dangerous operations
Neil Muller <drnlmuller@gmail.com>
parents:
553
diff
changeset
|
491 return False |
46f6f1a98f3f
Add warning dialogs for dangerous operations
Neil Muller <drnlmuller@gmail.com>
parents:
553
diff
changeset
|
492 |
46f6f1a98f3f
Add warning dialogs for dangerous operations
Neil Muller <drnlmuller@gmail.com>
parents:
553
diff
changeset
|
493 def _check_dangerous_move(self, building=None): |
46f6f1a98f3f
Add warning dialogs for dangerous operations
Neil Muller <drnlmuller@gmail.com>
parents:
553
diff
changeset
|
494 # Dangerous move involves moving chickens WITH eggs out of their |
46f6f1a98f3f
Add warning dialogs for dangerous operations
Neil Muller <drnlmuller@gmail.com>
parents:
553
diff
changeset
|
495 # current building |
46f6f1a98f3f
Add warning dialogs for dangerous operations
Neil Muller <drnlmuller@gmail.com>
parents:
553
diff
changeset
|
496 for chick in self.selected_chickens: |
46f6f1a98f3f
Add warning dialogs for dangerous operations
Neil Muller <drnlmuller@gmail.com>
parents:
553
diff
changeset
|
497 if chick.eggs and chick.abode and \ |
46f6f1a98f3f
Add warning dialogs for dangerous operations
Neil Muller <drnlmuller@gmail.com>
parents:
553
diff
changeset
|
498 chick.abode.building is not building: |
46f6f1a98f3f
Add warning dialogs for dangerous operations
Neil Muller <drnlmuller@gmail.com>
parents:
553
diff
changeset
|
499 return True |
46f6f1a98f3f
Add warning dialogs for dangerous operations
Neil Muller <drnlmuller@gmail.com>
parents:
553
diff
changeset
|
500 return False # safe move |
46f6f1a98f3f
Add warning dialogs for dangerous operations
Neil Muller <drnlmuller@gmail.com>
parents:
553
diff
changeset
|
501 |
489 | 502 def select_animal(self, animal): |
503 self.selected_chickens.append(animal) | |
561
7f037ee2a6c8
Show count of selected chickens in buildings
Neil Muller <drnlmuller@gmail.com>
parents:
557
diff
changeset
|
504 if animal.abode: |
7f037ee2a6c8
Show count of selected chickens in buildings
Neil Muller <drnlmuller@gmail.com>
parents:
557
diff
changeset
|
505 animal.abode.building.update_occupant_count() |
489 | 506 animal.equip(equipment.Spotlight()) |
472
67574723427e
Partially working (but much less crashy) multiple select support
Neil Muller <drnlmuller@gmail.com>
parents:
470
diff
changeset
|
507 |
67574723427e
Partially working (but much less crashy) multiple select support
Neil Muller <drnlmuller@gmail.com>
parents:
470
diff
changeset
|
508 def unselect_all(self): |
67574723427e
Partially working (but much less crashy) multiple select support
Neil Muller <drnlmuller@gmail.com>
parents:
470
diff
changeset
|
509 # Clear any highlights |
561
7f037ee2a6c8
Show count of selected chickens in buildings
Neil Muller <drnlmuller@gmail.com>
parents:
557
diff
changeset
|
510 old_sel = self.selected_chickens |
7f037ee2a6c8
Show count of selected chickens in buildings
Neil Muller <drnlmuller@gmail.com>
parents:
557
diff
changeset
|
511 self.selected_chickens = [] |
7f037ee2a6c8
Show count of selected chickens in buildings
Neil Muller <drnlmuller@gmail.com>
parents:
557
diff
changeset
|
512 for chick in old_sel: |
472
67574723427e
Partially working (but much less crashy) multiple select support
Neil Muller <drnlmuller@gmail.com>
parents:
470
diff
changeset
|
513 chick.unequip_by_name("Spotlight") |
561
7f037ee2a6c8
Show count of selected chickens in buildings
Neil Muller <drnlmuller@gmail.com>
parents:
557
diff
changeset
|
514 if chick.abode: |
7f037ee2a6c8
Show count of selected chickens in buildings
Neil Muller <drnlmuller@gmail.com>
parents:
557
diff
changeset
|
515 chick.abode.building.update_occupant_count() |
472
67574723427e
Partially working (but much less crashy) multiple select support
Neil Muller <drnlmuller@gmail.com>
parents:
470
diff
changeset
|
516 |
67574723427e
Partially working (but much less crashy) multiple select support
Neil Muller <drnlmuller@gmail.com>
parents:
470
diff
changeset
|
517 def unselect_animal(self, animal): |
67574723427e
Partially working (but much less crashy) multiple select support
Neil Muller <drnlmuller@gmail.com>
parents:
470
diff
changeset
|
518 if animal in self.selected_chickens: |
67574723427e
Partially working (but much less crashy) multiple select support
Neil Muller <drnlmuller@gmail.com>
parents:
470
diff
changeset
|
519 self.selected_chickens.remove(animal) |
67574723427e
Partially working (but much less crashy) multiple select support
Neil Muller <drnlmuller@gmail.com>
parents:
470
diff
changeset
|
520 animal.unequip_by_name("Spotlight") |
561
7f037ee2a6c8
Show count of selected chickens in buildings
Neil Muller <drnlmuller@gmail.com>
parents:
557
diff
changeset
|
521 if animal.abode: |
7f037ee2a6c8
Show count of selected chickens in buildings
Neil Muller <drnlmuller@gmail.com>
parents:
557
diff
changeset
|
522 animal.abode.building.update_occupant_count() |
472
67574723427e
Partially working (but much less crashy) multiple select support
Neil Muller <drnlmuller@gmail.com>
parents:
470
diff
changeset
|
523 |
67574723427e
Partially working (but much less crashy) multiple select support
Neil Muller <drnlmuller@gmail.com>
parents:
470
diff
changeset
|
524 def get_chicken_at_pos(self, tile_pos): |
67574723427e
Partially working (but much less crashy) multiple select support
Neil Muller <drnlmuller@gmail.com>
parents:
470
diff
changeset
|
525 chicken = self.get_outside_chicken(tile_pos) |
67574723427e
Partially working (but much less crashy) multiple select support
Neil Muller <drnlmuller@gmail.com>
parents:
470
diff
changeset
|
526 if chicken: |
67574723427e
Partially working (but much less crashy) multiple select support
Neil Muller <drnlmuller@gmail.com>
parents:
470
diff
changeset
|
527 return chicken |
67574723427e
Partially working (but much less crashy) multiple select support
Neil Muller <drnlmuller@gmail.com>
parents:
470
diff
changeset
|
528 building = self.get_building(tile_pos) |
481
fac63919a972
Don't look for chickens in fences
Neil Muller <drnlmuller@gmail.com>
parents:
480
diff
changeset
|
529 if building and building.ABODE: |
498
62b9a4e21f1a
chickens in closed buildings deselected. building opens if you put in chickens and it's not full. opening building with move or select tool allows rearrangement of chickens in building. fixed multiselect in buildings.
Adrianna Pińska <adrianna.pinska@gmail.com>
parents:
497
diff
changeset
|
530 self.open_building_dialog(building, True) |
472
67574723427e
Partially working (but much less crashy) multiple select support
Neil Muller <drnlmuller@gmail.com>
parents:
470
diff
changeset
|
531 |
67574723427e
Partially working (but much less crashy) multiple select support
Neil Muller <drnlmuller@gmail.com>
parents:
470
diff
changeset
|
532 def select_chicken(self, tile_pos): |
67574723427e
Partially working (but much less crashy) multiple select support
Neil Muller <drnlmuller@gmail.com>
parents:
470
diff
changeset
|
533 """Handle a select chicken event""" |
67574723427e
Partially working (but much less crashy) multiple select support
Neil Muller <drnlmuller@gmail.com>
parents:
470
diff
changeset
|
534 # Get the chicken at this position |
67574723427e
Partially working (but much less crashy) multiple select support
Neil Muller <drnlmuller@gmail.com>
parents:
470
diff
changeset
|
535 chicken = self.get_chicken_at_pos(tile_pos) |
67574723427e
Partially working (but much less crashy) multiple select support
Neil Muller <drnlmuller@gmail.com>
parents:
470
diff
changeset
|
536 if not chicken: |
67574723427e
Partially working (but much less crashy) multiple select support
Neil Muller <drnlmuller@gmail.com>
parents:
470
diff
changeset
|
537 return # do nothing |
67574723427e
Partially working (but much less crashy) multiple select support
Neil Muller <drnlmuller@gmail.com>
parents:
470
diff
changeset
|
538 elif chicken in self.selected_chickens: |
67574723427e
Partially working (but much less crashy) multiple select support
Neil Muller <drnlmuller@gmail.com>
parents:
470
diff
changeset
|
539 self.unselect_animal(chicken) |
67574723427e
Partially working (but much less crashy) multiple select support
Neil Muller <drnlmuller@gmail.com>
parents:
470
diff
changeset
|
540 else: |
67574723427e
Partially working (but much less crashy) multiple select support
Neil Muller <drnlmuller@gmail.com>
parents:
470
diff
changeset
|
541 self.select_animal(chicken) |
200
67d10f7e0159
selected chickens are selected
Adrianna Pińska <adrianna.pinska@gmail.com>
parents:
197
diff
changeset
|
542 |
556
46f6f1a98f3f
Add warning dialogs for dangerous operations
Neil Muller <drnlmuller@gmail.com>
parents:
553
diff
changeset
|
543 def _do_move_selected(self, building, tile_pos): |
46f6f1a98f3f
Add warning dialogs for dangerous operations
Neil Muller <drnlmuller@gmail.com>
parents:
553
diff
changeset
|
544 """Internal helper function for place_animal""" |
46f6f1a98f3f
Add warning dialogs for dangerous operations
Neil Muller <drnlmuller@gmail.com>
parents:
553
diff
changeset
|
545 if building and building.ABODE: |
46f6f1a98f3f
Add warning dialogs for dangerous operations
Neil Muller <drnlmuller@gmail.com>
parents:
553
diff
changeset
|
546 for chicken in self.selected_chickens[:]: |
46f6f1a98f3f
Add warning dialogs for dangerous operations
Neil Muller <drnlmuller@gmail.com>
parents:
553
diff
changeset
|
547 try: |
46f6f1a98f3f
Add warning dialogs for dangerous operations
Neil Muller <drnlmuller@gmail.com>
parents:
553
diff
changeset
|
548 place = building.first_empty_place() |
46f6f1a98f3f
Add warning dialogs for dangerous operations
Neil Muller <drnlmuller@gmail.com>
parents:
553
diff
changeset
|
549 self.relocate_animal(chicken, place=place) |
46f6f1a98f3f
Add warning dialogs for dangerous operations
Neil Muller <drnlmuller@gmail.com>
parents:
553
diff
changeset
|
550 chicken.equip(equipment.Nest()) |
46f6f1a98f3f
Add warning dialogs for dangerous operations
Neil Muller <drnlmuller@gmail.com>
parents:
553
diff
changeset
|
551 self.unselect_animal(chicken) |
46f6f1a98f3f
Add warning dialogs for dangerous operations
Neil Muller <drnlmuller@gmail.com>
parents:
553
diff
changeset
|
552 except buildings.BuildingFullError: |
46f6f1a98f3f
Add warning dialogs for dangerous operations
Neil Muller <drnlmuller@gmail.com>
parents:
553
diff
changeset
|
553 pass |
46f6f1a98f3f
Add warning dialogs for dangerous operations
Neil Muller <drnlmuller@gmail.com>
parents:
553
diff
changeset
|
554 try: |
46f6f1a98f3f
Add warning dialogs for dangerous operations
Neil Muller <drnlmuller@gmail.com>
parents:
553
diff
changeset
|
555 # if there's a space left, open the building |
46f6f1a98f3f
Add warning dialogs for dangerous operations
Neil Muller <drnlmuller@gmail.com>
parents:
553
diff
changeset
|
556 building.first_empty_place() |
46f6f1a98f3f
Add warning dialogs for dangerous operations
Neil Muller <drnlmuller@gmail.com>
parents:
553
diff
changeset
|
557 self.open_building_dialog(building, True) |
46f6f1a98f3f
Add warning dialogs for dangerous operations
Neil Muller <drnlmuller@gmail.com>
parents:
553
diff
changeset
|
558 except buildings.BuildingFullError: |
46f6f1a98f3f
Add warning dialogs for dangerous operations
Neil Muller <drnlmuller@gmail.com>
parents:
553
diff
changeset
|
559 pass |
46f6f1a98f3f
Add warning dialogs for dangerous operations
Neil Muller <drnlmuller@gmail.com>
parents:
553
diff
changeset
|
560 if not self.selected_chickens: |
46f6f1a98f3f
Add warning dialogs for dangerous operations
Neil Muller <drnlmuller@gmail.com>
parents:
553
diff
changeset
|
561 # if we placed all the chickens, switch to select cursor |
565 | 562 self.set_tool_cursor((cursors.cursors['select'],)) |
556
46f6f1a98f3f
Add warning dialogs for dangerous operations
Neil Muller <drnlmuller@gmail.com>
parents:
553
diff
changeset
|
563 elif self.tv.get(tile_pos) == self.GRASSLAND: |
46f6f1a98f3f
Add warning dialogs for dangerous operations
Neil Muller <drnlmuller@gmail.com>
parents:
553
diff
changeset
|
564 for chicken in self.selected_chickens: |
46f6f1a98f3f
Add warning dialogs for dangerous operations
Neil Muller <drnlmuller@gmail.com>
parents:
553
diff
changeset
|
565 try_pos = tile_pos |
46f6f1a98f3f
Add warning dialogs for dangerous operations
Neil Muller <drnlmuller@gmail.com>
parents:
553
diff
changeset
|
566 cur_chick = self.get_outside_chicken(try_pos) |
46f6f1a98f3f
Add warning dialogs for dangerous operations
Neil Muller <drnlmuller@gmail.com>
parents:
553
diff
changeset
|
567 if cur_chick == chicken: |
46f6f1a98f3f
Add warning dialogs for dangerous operations
Neil Muller <drnlmuller@gmail.com>
parents:
553
diff
changeset
|
568 continue |
46f6f1a98f3f
Add warning dialogs for dangerous operations
Neil Muller <drnlmuller@gmail.com>
parents:
553
diff
changeset
|
569 if cur_chick: |
46f6f1a98f3f
Add warning dialogs for dangerous operations
Neil Muller <drnlmuller@gmail.com>
parents:
553
diff
changeset
|
570 try_pos = None |
46f6f1a98f3f
Add warning dialogs for dangerous operations
Neil Muller <drnlmuller@gmail.com>
parents:
553
diff
changeset
|
571 # find a free square nearby |
46f6f1a98f3f
Add warning dialogs for dangerous operations
Neil Muller <drnlmuller@gmail.com>
parents:
553
diff
changeset
|
572 poss = [(tile_pos[0] + x, tile_pos[1] + y) |
46f6f1a98f3f
Add warning dialogs for dangerous operations
Neil Muller <drnlmuller@gmail.com>
parents:
553
diff
changeset
|
573 for x in range(-1, 2) for y in range(-1, 2) |
46f6f1a98f3f
Add warning dialogs for dangerous operations
Neil Muller <drnlmuller@gmail.com>
parents:
553
diff
changeset
|
574 if (x, y) != (0, 0)] |
46f6f1a98f3f
Add warning dialogs for dangerous operations
Neil Muller <drnlmuller@gmail.com>
parents:
553
diff
changeset
|
575 poss.extend([(tile_pos[0] + x, tile_pos[1] + y) |
46f6f1a98f3f
Add warning dialogs for dangerous operations
Neil Muller <drnlmuller@gmail.com>
parents:
553
diff
changeset
|
576 for x in range(-2, 3, 2) for y in range(-2, 3) |
46f6f1a98f3f
Add warning dialogs for dangerous operations
Neil Muller <drnlmuller@gmail.com>
parents:
553
diff
changeset
|
577 if (x, y) != (0, 0)]) |
46f6f1a98f3f
Add warning dialogs for dangerous operations
Neil Muller <drnlmuller@gmail.com>
parents:
553
diff
changeset
|
578 for cand in poss: |
46f6f1a98f3f
Add warning dialogs for dangerous operations
Neil Muller <drnlmuller@gmail.com>
parents:
553
diff
changeset
|
579 if self.tv.get(cand) == self.GRASSLAND and \ |
46f6f1a98f3f
Add warning dialogs for dangerous operations
Neil Muller <drnlmuller@gmail.com>
parents:
553
diff
changeset
|
580 not self.get_outside_chicken(cand): |
46f6f1a98f3f
Add warning dialogs for dangerous operations
Neil Muller <drnlmuller@gmail.com>
parents:
553
diff
changeset
|
581 try_pos = cand |
46f6f1a98f3f
Add warning dialogs for dangerous operations
Neil Muller <drnlmuller@gmail.com>
parents:
553
diff
changeset
|
582 break |
46f6f1a98f3f
Add warning dialogs for dangerous operations
Neil Muller <drnlmuller@gmail.com>
parents:
553
diff
changeset
|
583 if try_pos: |
46f6f1a98f3f
Add warning dialogs for dangerous operations
Neil Muller <drnlmuller@gmail.com>
parents:
553
diff
changeset
|
584 chicken.unequip_by_name("Nest") |
46f6f1a98f3f
Add warning dialogs for dangerous operations
Neil Muller <drnlmuller@gmail.com>
parents:
553
diff
changeset
|
585 self.relocate_animal(chicken, tile_pos=try_pos) |
46f6f1a98f3f
Add warning dialogs for dangerous operations
Neil Muller <drnlmuller@gmail.com>
parents:
553
diff
changeset
|
586 chicken.remove_eggs() |
46f6f1a98f3f
Add warning dialogs for dangerous operations
Neil Muller <drnlmuller@gmail.com>
parents:
553
diff
changeset
|
587 |
46f6f1a98f3f
Add warning dialogs for dangerous operations
Neil Muller <drnlmuller@gmail.com>
parents:
553
diff
changeset
|
588 |
105
7910b4e01dba
Add chicken moving tool and start of animal placement.
Simon Cross <hodgestar@gmail.com>
parents:
98
diff
changeset
|
589 def place_animal(self, tile_pos): |
7910b4e01dba
Add chicken moving tool and start of animal placement.
Simon Cross <hodgestar@gmail.com>
parents:
98
diff
changeset
|
590 """Handle an TOOL_PLACE_ANIMALS click. |
7910b4e01dba
Add chicken moving tool and start of animal placement.
Simon Cross <hodgestar@gmail.com>
parents:
98
diff
changeset
|
591 |
7910b4e01dba
Add chicken moving tool and start of animal placement.
Simon Cross <hodgestar@gmail.com>
parents:
98
diff
changeset
|
592 This will either select an animal or |
7910b4e01dba
Add chicken moving tool and start of animal placement.
Simon Cross <hodgestar@gmail.com>
parents:
98
diff
changeset
|
593 place a selected animal in a building. |
7910b4e01dba
Add chicken moving tool and start of animal placement.
Simon Cross <hodgestar@gmail.com>
parents:
98
diff
changeset
|
594 """ |
472
67574723427e
Partially working (but much less crashy) multiple select support
Neil Muller <drnlmuller@gmail.com>
parents:
470
diff
changeset
|
595 if tile_pos and not self.selected_chickens: |
67574723427e
Partially working (but much less crashy) multiple select support
Neil Muller <drnlmuller@gmail.com>
parents:
470
diff
changeset
|
596 # Old behaviour |
67574723427e
Partially working (but much less crashy) multiple select support
Neil Muller <drnlmuller@gmail.com>
parents:
470
diff
changeset
|
597 chicken = self.get_chicken_at_pos(tile_pos) |
67574723427e
Partially working (but much less crashy) multiple select support
Neil Muller <drnlmuller@gmail.com>
parents:
470
diff
changeset
|
598 if chicken: |
67574723427e
Partially working (but much less crashy) multiple select support
Neil Muller <drnlmuller@gmail.com>
parents:
470
diff
changeset
|
599 self.select_animal(chicken) |
565 | 600 self.set_tool_cursor((cursors.cursors['chicken'],)) |
472
67574723427e
Partially working (but much less crashy) multiple select support
Neil Muller <drnlmuller@gmail.com>
parents:
470
diff
changeset
|
601 return |
67574723427e
Partially working (but much less crashy) multiple select support
Neil Muller <drnlmuller@gmail.com>
parents:
470
diff
changeset
|
602 elif tile_pos: |
67574723427e
Partially working (but much less crashy) multiple select support
Neil Muller <drnlmuller@gmail.com>
parents:
470
diff
changeset
|
603 building = self.get_building(tile_pos) |
556
46f6f1a98f3f
Add warning dialogs for dangerous operations
Neil Muller <drnlmuller@gmail.com>
parents:
553
diff
changeset
|
604 def sure(val): |
46f6f1a98f3f
Add warning dialogs for dangerous operations
Neil Muller <drnlmuller@gmail.com>
parents:
553
diff
changeset
|
605 if val: |
46f6f1a98f3f
Add warning dialogs for dangerous operations
Neil Muller <drnlmuller@gmail.com>
parents:
553
diff
changeset
|
606 self._do_move_selected(building, tile_pos) |
46f6f1a98f3f
Add warning dialogs for dangerous operations
Neil Muller <drnlmuller@gmail.com>
parents:
553
diff
changeset
|
607 |
46f6f1a98f3f
Add warning dialogs for dangerous operations
Neil Muller <drnlmuller@gmail.com>
parents:
553
diff
changeset
|
608 if self._check_dangerous_move(building): |
46f6f1a98f3f
Add warning dialogs for dangerous operations
Neil Muller <drnlmuller@gmail.com>
parents:
553
diff
changeset
|
609 dialog = misc.CheckDialog(sure, |
46f6f1a98f3f
Add warning dialogs for dangerous operations
Neil Muller <drnlmuller@gmail.com>
parents:
553
diff
changeset
|
610 "These chickens have eggs. Do you want to move them?", |
46f6f1a98f3f
Add warning dialogs for dangerous operations
Neil Muller <drnlmuller@gmail.com>
parents:
553
diff
changeset
|
611 "Yes, Move Them", "No, Don't Move", None) |
46f6f1a98f3f
Add warning dialogs for dangerous operations
Neil Muller <drnlmuller@gmail.com>
parents:
553
diff
changeset
|
612 self.disp.open(dialog) |
46f6f1a98f3f
Add warning dialogs for dangerous operations
Neil Muller <drnlmuller@gmail.com>
parents:
553
diff
changeset
|
613 else: |
46f6f1a98f3f
Add warning dialogs for dangerous operations
Neil Muller <drnlmuller@gmail.com>
parents:
553
diff
changeset
|
614 sure(1) |
197
d74693555b86
Put chickens into first empty space in buildings to make it easier to add lots of chickens.
Simon Cross <hodgestar@gmail.com>
parents:
194
diff
changeset
|
615 |
d74693555b86
Put chickens into first empty space in buildings to make it easier to add lots of chickens.
Simon Cross <hodgestar@gmail.com>
parents:
194
diff
changeset
|
616 def relocate_animal(self, chicken, tile_pos=None, place=None): |
d74693555b86
Put chickens into first empty space in buildings to make it easier to add lots of chickens.
Simon Cross <hodgestar@gmail.com>
parents:
194
diff
changeset
|
617 assert((tile_pos, place) != (None, None)) |
d74693555b86
Put chickens into first empty space in buildings to make it easier to add lots of chickens.
Simon Cross <hodgestar@gmail.com>
parents:
194
diff
changeset
|
618 if chicken.abode is not None: |
d74693555b86
Put chickens into first empty space in buildings to make it easier to add lots of chickens.
Simon Cross <hodgestar@gmail.com>
parents:
194
diff
changeset
|
619 chicken.abode.clear_occupant() |
d74693555b86
Put chickens into first empty space in buildings to make it easier to add lots of chickens.
Simon Cross <hodgestar@gmail.com>
parents:
194
diff
changeset
|
620 if tile_pos: |
d74693555b86
Put chickens into first empty space in buildings to make it easier to add lots of chickens.
Simon Cross <hodgestar@gmail.com>
parents:
194
diff
changeset
|
621 chicken.set_pos(tile_pos) |
d74693555b86
Put chickens into first empty space in buildings to make it easier to add lots of chickens.
Simon Cross <hodgestar@gmail.com>
parents:
194
diff
changeset
|
622 else: |
d74693555b86
Put chickens into first empty space in buildings to make it easier to add lots of chickens.
Simon Cross <hodgestar@gmail.com>
parents:
194
diff
changeset
|
623 place.set_occupant(chicken) |
d74693555b86
Put chickens into first empty space in buildings to make it easier to add lots of chickens.
Simon Cross <hodgestar@gmail.com>
parents:
194
diff
changeset
|
624 chicken.set_pos(place.get_pos()) |
d74693555b86
Put chickens into first empty space in buildings to make it easier to add lots of chickens.
Simon Cross <hodgestar@gmail.com>
parents:
194
diff
changeset
|
625 self.set_visibility(chicken) |
125 | 626 |
397
532f1ea476ff
Make foxes enter buildings, with a seperate count for them
Neil Muller <drnlmuller@gmail.com>
parents:
396
diff
changeset
|
627 def set_visibility(self, animal): |
532f1ea476ff
Make foxes enter buildings, with a seperate count for them
Neil Muller <drnlmuller@gmail.com>
parents:
396
diff
changeset
|
628 if animal.outside(): |
532f1ea476ff
Make foxes enter buildings, with a seperate count for them
Neil Muller <drnlmuller@gmail.com>
parents:
396
diff
changeset
|
629 if animal not in self.tv.sprites: |
532f1ea476ff
Make foxes enter buildings, with a seperate count for them
Neil Muller <drnlmuller@gmail.com>
parents:
396
diff
changeset
|
630 self.tv.sprites.append(animal) |
125 | 631 else: |
397
532f1ea476ff
Make foxes enter buildings, with a seperate count for them
Neil Muller <drnlmuller@gmail.com>
parents:
396
diff
changeset
|
632 if animal in self.tv.sprites: |
532f1ea476ff
Make foxes enter buildings, with a seperate count for them
Neil Muller <drnlmuller@gmail.com>
parents:
396
diff
changeset
|
633 self.tv.sprites.remove(animal) |
105
7910b4e01dba
Add chicken moving tool and start of animal placement.
Simon Cross <hodgestar@gmail.com>
parents:
98
diff
changeset
|
634 |
302
01c1682dc250
Mostly working selling equipment in buildings
Neil Muller <drnlmuller@gmail.com>
parents:
298
diff
changeset
|
635 def open_dialog(self, widget, x=None, y=None, close_callback=None): |
115
2b2007e231da
Start of dialog for placing chickens in buildings. Remove chicken in hen house bug by not allowing chickens in hen houses.
Simon Cross <hodgestar@gmail.com>
parents:
109
diff
changeset
|
636 """Open a dialog for the given widget. Add close button.""" |
2b2007e231da
Start of dialog for placing chickens in buildings. Remove chicken in hen house bug by not allowing chickens in hen houses.
Simon Cross <hodgestar@gmail.com>
parents:
109
diff
changeset
|
637 tbl = gui.Table() |
2b2007e231da
Start of dialog for placing chickens in buildings. Remove chicken in hen house bug by not allowing chickens in hen houses.
Simon Cross <hodgestar@gmail.com>
parents:
109
diff
changeset
|
638 |
2b2007e231da
Start of dialog for placing chickens in buildings. Remove chicken in hen house bug by not allowing chickens in hen houses.
Simon Cross <hodgestar@gmail.com>
parents:
109
diff
changeset
|
639 def close_dialog(): |
2b2007e231da
Start of dialog for placing chickens in buildings. Remove chicken in hen house bug by not allowing chickens in hen houses.
Simon Cross <hodgestar@gmail.com>
parents:
109
diff
changeset
|
640 self.disp.close(tbl) |
170
92d11e0544bc
Switch building to selected image when building is selected.
Simon Cross <hodgestar@gmail.com>
parents:
169
diff
changeset
|
641 if close_callback is not None: |
92d11e0544bc
Switch building to selected image when building is selected.
Simon Cross <hodgestar@gmail.com>
parents:
169
diff
changeset
|
642 close_callback() |
115
2b2007e231da
Start of dialog for placing chickens in buildings. Remove chicken in hen house bug by not allowing chickens in hen houses.
Simon Cross <hodgestar@gmail.com>
parents:
109
diff
changeset
|
643 |
2b2007e231da
Start of dialog for placing chickens in buildings. Remove chicken in hen house bug by not allowing chickens in hen houses.
Simon Cross <hodgestar@gmail.com>
parents:
109
diff
changeset
|
644 close_button = gui.Button("Close") |
2b2007e231da
Start of dialog for placing chickens in buildings. Remove chicken in hen house bug by not allowing chickens in hen houses.
Simon Cross <hodgestar@gmail.com>
parents:
109
diff
changeset
|
645 close_button.connect(gui.CLICK, close_dialog) |
2b2007e231da
Start of dialog for placing chickens in buildings. Remove chicken in hen house bug by not allowing chickens in hen houses.
Simon Cross <hodgestar@gmail.com>
parents:
109
diff
changeset
|
646 |
2b2007e231da
Start of dialog for placing chickens in buildings. Remove chicken in hen house bug by not allowing chickens in hen houses.
Simon Cross <hodgestar@gmail.com>
parents:
109
diff
changeset
|
647 tbl = gui.Table() |
2b2007e231da
Start of dialog for placing chickens in buildings. Remove chicken in hen house bug by not allowing chickens in hen houses.
Simon Cross <hodgestar@gmail.com>
parents:
109
diff
changeset
|
648 tbl.tr() |
2b2007e231da
Start of dialog for placing chickens in buildings. Remove chicken in hen house bug by not allowing chickens in hen houses.
Simon Cross <hodgestar@gmail.com>
parents:
109
diff
changeset
|
649 tbl.td(widget, colspan=2) |
2b2007e231da
Start of dialog for placing chickens in buildings. Remove chicken in hen house bug by not allowing chickens in hen houses.
Simon Cross <hodgestar@gmail.com>
parents:
109
diff
changeset
|
650 tbl.tr() |
2b2007e231da
Start of dialog for placing chickens in buildings. Remove chicken in hen house bug by not allowing chickens in hen houses.
Simon Cross <hodgestar@gmail.com>
parents:
109
diff
changeset
|
651 tbl.td(gui.Spacer(100, 0)) |
172
f7f29f1d434b
Don't allow occupied buildings to be sold (dialog can probably be dropped once buildings show their number of occupants).
Simon Cross <hodgestar@gmail.com>
parents:
170
diff
changeset
|
652 tbl.td(close_button, align=1) |
115
2b2007e231da
Start of dialog for placing chickens in buildings. Remove chicken in hen house bug by not allowing chickens in hen houses.
Simon Cross <hodgestar@gmail.com>
parents:
109
diff
changeset
|
653 |
302
01c1682dc250
Mostly working selling equipment in buildings
Neil Muller <drnlmuller@gmail.com>
parents:
298
diff
changeset
|
654 if x: |
01c1682dc250
Mostly working selling equipment in buildings
Neil Muller <drnlmuller@gmail.com>
parents:
298
diff
changeset
|
655 offset = (self.disp.rect.center[0] + x, |
01c1682dc250
Mostly working selling equipment in buildings
Neil Muller <drnlmuller@gmail.com>
parents:
298
diff
changeset
|
656 self.disp.rect.center[1] + y) |
01c1682dc250
Mostly working selling equipment in buildings
Neil Muller <drnlmuller@gmail.com>
parents:
298
diff
changeset
|
657 else: |
01c1682dc250
Mostly working selling equipment in buildings
Neil Muller <drnlmuller@gmail.com>
parents:
298
diff
changeset
|
658 offset = None |
01c1682dc250
Mostly working selling equipment in buildings
Neil Muller <drnlmuller@gmail.com>
parents:
298
diff
changeset
|
659 self.disp.open(tbl, pos=offset) |
169
946f09ed37cd
Make equipment dialog close after selecting an item to sell.
Simon Cross <hodgestar@gmail.com>
parents:
168
diff
changeset
|
660 return tbl |
115
2b2007e231da
Start of dialog for placing chickens in buildings. Remove chicken in hen house bug by not allowing chickens in hen houses.
Simon Cross <hodgestar@gmail.com>
parents:
109
diff
changeset
|
661 |
474
a50b53983389
Allow moving multiple animals more easily
Neil Muller <drnlmuller@gmail.com>
parents:
473
diff
changeset
|
662 def open_building_dialog(self, building, fill_empty, sell_callback=None): |
115
2b2007e231da
Start of dialog for placing chickens in buildings. Remove chicken in hen house bug by not allowing chickens in hen houses.
Simon Cross <hodgestar@gmail.com>
parents:
109
diff
changeset
|
663 """Create dialog for manipulating the contents of a building.""" |
208
f82d17f99882
Fix bugs in clicking around inside buildings while moving chickens.
Simon Cross <hodgestar@gmail.com>
parents:
203
diff
changeset
|
664 |
f82d17f99882
Fix bugs in clicking around inside buildings while moving chickens.
Simon Cross <hodgestar@gmail.com>
parents:
203
diff
changeset
|
665 place_button_map = {} |
f82d17f99882
Fix bugs in clicking around inside buildings while moving chickens.
Simon Cross <hodgestar@gmail.com>
parents:
203
diff
changeset
|
666 |
f82d17f99882
Fix bugs in clicking around inside buildings while moving chickens.
Simon Cross <hodgestar@gmail.com>
parents:
203
diff
changeset
|
667 def update_button(animal, empty=False): |
f82d17f99882
Fix bugs in clicking around inside buildings while moving chickens.
Simon Cross <hodgestar@gmail.com>
parents:
203
diff
changeset
|
668 """Update a button image (either to the animal, or to empty).""" |
f82d17f99882
Fix bugs in clicking around inside buildings while moving chickens.
Simon Cross <hodgestar@gmail.com>
parents:
203
diff
changeset
|
669 if animal: |
f82d17f99882
Fix bugs in clicking around inside buildings while moving chickens.
Simon Cross <hodgestar@gmail.com>
parents:
203
diff
changeset
|
670 button = place_button_map.get(id(animal.abode)) |
f82d17f99882
Fix bugs in clicking around inside buildings while moving chickens.
Simon Cross <hodgestar@gmail.com>
parents:
203
diff
changeset
|
671 if button: |
f82d17f99882
Fix bugs in clicking around inside buildings while moving chickens.
Simon Cross <hodgestar@gmail.com>
parents:
203
diff
changeset
|
672 if empty: |
f82d17f99882
Fix bugs in clicking around inside buildings while moving chickens.
Simon Cross <hodgestar@gmail.com>
parents:
203
diff
changeset
|
673 button.value = icons.EMPTY_NEST_ICON |
f82d17f99882
Fix bugs in clicking around inside buildings while moving chickens.
Simon Cross <hodgestar@gmail.com>
parents:
203
diff
changeset
|
674 else: |
f82d17f99882
Fix bugs in clicking around inside buildings while moving chickens.
Simon Cross <hodgestar@gmail.com>
parents:
203
diff
changeset
|
675 button.value = icons.animal_icon(animal) |
f82d17f99882
Fix bugs in clicking around inside buildings while moving chickens.
Simon Cross <hodgestar@gmail.com>
parents:
203
diff
changeset
|
676 |
f82d17f99882
Fix bugs in clicking around inside buildings while moving chickens.
Simon Cross <hodgestar@gmail.com>
parents:
203
diff
changeset
|
677 def nest_clicked(place, button): |
f82d17f99882
Fix bugs in clicking around inside buildings while moving chickens.
Simon Cross <hodgestar@gmail.com>
parents:
203
diff
changeset
|
678 """Handle a nest being clicked.""" |
f82d17f99882
Fix bugs in clicking around inside buildings while moving chickens.
Simon Cross <hodgestar@gmail.com>
parents:
203
diff
changeset
|
679 if place.occupant: |
f82d17f99882
Fix bugs in clicking around inside buildings while moving chickens.
Simon Cross <hodgestar@gmail.com>
parents:
203
diff
changeset
|
680 # there is an occupant, select or sell it |
f82d17f99882
Fix bugs in clicking around inside buildings while moving chickens.
Simon Cross <hodgestar@gmail.com>
parents:
203
diff
changeset
|
681 if not sell_callback: |
498
62b9a4e21f1a
chickens in closed buildings deselected. building opens if you put in chickens and it's not full. opening building with move or select tool allows rearrangement of chickens in building. fixed multiselect in buildings.
Adrianna Pińska <adrianna.pinska@gmail.com>
parents:
497
diff
changeset
|
682 mods = pygame.key.get_mods() |
62b9a4e21f1a
chickens in closed buildings deselected. building opens if you put in chickens and it's not full. opening building with move or select tool allows rearrangement of chickens in building. fixed multiselect in buildings.
Adrianna Pińska <adrianna.pinska@gmail.com>
parents:
497
diff
changeset
|
683 if not (mods & KMOD_SHIFT): |
62b9a4e21f1a
chickens in closed buildings deselected. building opens if you put in chickens and it's not full. opening building with move or select tool allows rearrangement of chickens in building. fixed multiselect in buildings.
Adrianna Pińska <adrianna.pinska@gmail.com>
parents:
497
diff
changeset
|
684 chkns = self.selected_chickens |
62b9a4e21f1a
chickens in closed buildings deselected. building opens if you put in chickens and it's not full. opening building with move or select tool allows rearrangement of chickens in building. fixed multiselect in buildings.
Adrianna Pińska <adrianna.pinska@gmail.com>
parents:
497
diff
changeset
|
685 self.unselect_all() |
62b9a4e21f1a
chickens in closed buildings deselected. building opens if you put in chickens and it's not full. opening building with move or select tool allows rearrangement of chickens in building. fixed multiselect in buildings.
Adrianna Pińska <adrianna.pinska@gmail.com>
parents:
497
diff
changeset
|
686 for chkn in chkns: |
62b9a4e21f1a
chickens in closed buildings deselected. building opens if you put in chickens and it's not full. opening building with move or select tool allows rearrangement of chickens in building. fixed multiselect in buildings.
Adrianna Pińska <adrianna.pinska@gmail.com>
parents:
497
diff
changeset
|
687 update_button(chkn) |
62b9a4e21f1a
chickens in closed buildings deselected. building opens if you put in chickens and it's not full. opening building with move or select tool allows rearrangement of chickens in building. fixed multiselect in buildings.
Adrianna Pińska <adrianna.pinska@gmail.com>
parents:
497
diff
changeset
|
688 if place.occupant in self.selected_chickens: |
62b9a4e21f1a
chickens in closed buildings deselected. building opens if you put in chickens and it's not full. opening building with move or select tool allows rearrangement of chickens in building. fixed multiselect in buildings.
Adrianna Pińska <adrianna.pinska@gmail.com>
parents:
497
diff
changeset
|
689 self.unselect_animal(place.occupant) |
62b9a4e21f1a
chickens in closed buildings deselected. building opens if you put in chickens and it's not full. opening building with move or select tool allows rearrangement of chickens in building. fixed multiselect in buildings.
Adrianna Pińska <adrianna.pinska@gmail.com>
parents:
497
diff
changeset
|
690 else: |
62b9a4e21f1a
chickens in closed buildings deselected. building opens if you put in chickens and it's not full. opening building with move or select tool allows rearrangement of chickens in building. fixed multiselect in buildings.
Adrianna Pińska <adrianna.pinska@gmail.com>
parents:
497
diff
changeset
|
691 self.select_animal(place.occupant) |
208
f82d17f99882
Fix bugs in clicking around inside buildings while moving chickens.
Simon Cross <hodgestar@gmail.com>
parents:
203
diff
changeset
|
692 # select new animal (on button) |
472
67574723427e
Partially working (but much less crashy) multiple select support
Neil Muller <drnlmuller@gmail.com>
parents:
470
diff
changeset
|
693 update_button(place.occupant) |
208
f82d17f99882
Fix bugs in clicking around inside buildings while moving chickens.
Simon Cross <hodgestar@gmail.com>
parents:
203
diff
changeset
|
694 else: |
523
103b0fc36722
Apply action to all selected chickens in building dialog
Neil Muller <drnlmuller@gmail.com>
parents:
522
diff
changeset
|
695 # FIXME: This should really match the behaviour for |
103b0fc36722
Apply action to all selected chickens in building dialog
Neil Muller <drnlmuller@gmail.com>
parents:
522
diff
changeset
|
696 # outside buildings, but that requires using the toolbar |
103b0fc36722
Apply action to all selected chickens in building dialog
Neil Muller <drnlmuller@gmail.com>
parents:
522
diff
changeset
|
697 # while the dialog is open. |
103b0fc36722
Apply action to all selected chickens in building dialog
Neil Muller <drnlmuller@gmail.com>
parents:
522
diff
changeset
|
698 to_process = [place.occupant] |
103b0fc36722
Apply action to all selected chickens in building dialog
Neil Muller <drnlmuller@gmail.com>
parents:
522
diff
changeset
|
699 if place.occupant in self.selected_chickens: |
103b0fc36722
Apply action to all selected chickens in building dialog
Neil Muller <drnlmuller@gmail.com>
parents:
522
diff
changeset
|
700 # We do the same action for all the selected chickens |
103b0fc36722
Apply action to all selected chickens in building dialog
Neil Muller <drnlmuller@gmail.com>
parents:
522
diff
changeset
|
701 to_process = self.selected_chickens |
103b0fc36722
Apply action to all selected chickens in building dialog
Neil Muller <drnlmuller@gmail.com>
parents:
522
diff
changeset
|
702 for chick in to_process[:]: |
103b0fc36722
Apply action to all selected chickens in building dialog
Neil Muller <drnlmuller@gmail.com>
parents:
522
diff
changeset
|
703 sell_callback(chick, update_button) |
192
a490ee2ef446
Allow selling of chickens in henhouses
Neil Muller <drnlmuller@gmail.com>
parents:
191
diff
changeset
|
704 else: |
208
f82d17f99882
Fix bugs in clicking around inside buildings while moving chickens.
Simon Cross <hodgestar@gmail.com>
parents:
203
diff
changeset
|
705 # there is no occupant, attempt to fill the space |
474
a50b53983389
Allow moving multiple animals more easily
Neil Muller <drnlmuller@gmail.com>
parents:
473
diff
changeset
|
706 if self.selected_chickens and fill_empty: |
208
f82d17f99882
Fix bugs in clicking around inside buildings while moving chickens.
Simon Cross <hodgestar@gmail.com>
parents:
203
diff
changeset
|
707 # empty old nest (on button) |
472
67574723427e
Partially working (but much less crashy) multiple select support
Neil Muller <drnlmuller@gmail.com>
parents:
470
diff
changeset
|
708 update_button(self.selected_chickens[0], empty=True) |
67574723427e
Partially working (but much less crashy) multiple select support
Neil Muller <drnlmuller@gmail.com>
parents:
470
diff
changeset
|
709 self.relocate_animal(self.selected_chickens[0], place=place) |
208
f82d17f99882
Fix bugs in clicking around inside buildings while moving chickens.
Simon Cross <hodgestar@gmail.com>
parents:
203
diff
changeset
|
710 # populate the new nest (on button) |
472
67574723427e
Partially working (but much less crashy) multiple select support
Neil Muller <drnlmuller@gmail.com>
parents:
470
diff
changeset
|
711 update_button(self.selected_chickens[0]) |
125 | 712 |
115
2b2007e231da
Start of dialog for placing chickens in buildings. Remove chicken in hen house bug by not allowing chickens in hen houses.
Simon Cross <hodgestar@gmail.com>
parents:
109
diff
changeset
|
713 tbl = gui.Table() |
125 | 714 columns = building.max_floor_width() |
715 kwargs = { 'style': { 'padding_left': 10, 'padding_bottom': 10 }} | |
716 for floor in building.floors(): | |
717 tbl.tr() | |
718 tbl.td(gui.Button(floor.title), colspan=columns, align=-1, **kwargs) | |
115
2b2007e231da
Start of dialog for placing chickens in buildings. Remove chicken in hen house bug by not allowing chickens in hen houses.
Simon Cross <hodgestar@gmail.com>
parents:
109
diff
changeset
|
719 tbl.tr() |
125 | 720 for row in floor.rows(): |
721 tbl.tr() | |
722 for place in row: | |
723 if place.occupant is None: | |
724 button = gui.Button(icons.EMPTY_NEST_ICON) | |
725 else: | |
201
fe1e9c18d4d7
layering bugfix; indoor chickens now use normal chicken icons
Adrianna Pińska <adrianna.pinska@gmail.com>
parents:
200
diff
changeset
|
726 button = gui.Button(icons.animal_icon(place.occupant)) |
125 | 727 place_button_map[id(place)] = button |
208
f82d17f99882
Fix bugs in clicking around inside buildings while moving chickens.
Simon Cross <hodgestar@gmail.com>
parents:
203
diff
changeset
|
728 button.connect(gui.CLICK, nest_clicked, place, button) |
125 | 729 tbl.td(button, **kwargs) |
115
2b2007e231da
Start of dialog for placing chickens in buildings. Remove chicken in hen house bug by not allowing chickens in hen houses.
Simon Cross <hodgestar@gmail.com>
parents:
109
diff
changeset
|
730 |
170
92d11e0544bc
Switch building to selected image when building is selected.
Simon Cross <hodgestar@gmail.com>
parents:
169
diff
changeset
|
731 building.selected(True) |
92d11e0544bc
Switch building to selected image when building is selected.
Simon Cross <hodgestar@gmail.com>
parents:
169
diff
changeset
|
732 def close_callback(): |
498
62b9a4e21f1a
chickens in closed buildings deselected. building opens if you put in chickens and it's not full. opening building with move or select tool allows rearrangement of chickens in building. fixed multiselect in buildings.
Adrianna Pińska <adrianna.pinska@gmail.com>
parents:
497
diff
changeset
|
733 for floor in building.floors(): |
62b9a4e21f1a
chickens in closed buildings deselected. building opens if you put in chickens and it's not full. opening building with move or select tool allows rearrangement of chickens in building. fixed multiselect in buildings.
Adrianna Pińska <adrianna.pinska@gmail.com>
parents:
497
diff
changeset
|
734 for row in floor.rows(): |
62b9a4e21f1a
chickens in closed buildings deselected. building opens if you put in chickens and it's not full. opening building with move or select tool allows rearrangement of chickens in building. fixed multiselect in buildings.
Adrianna Pińska <adrianna.pinska@gmail.com>
parents:
497
diff
changeset
|
735 for place in row: |
62b9a4e21f1a
chickens in closed buildings deselected. building opens if you put in chickens and it's not full. opening building with move or select tool allows rearrangement of chickens in building. fixed multiselect in buildings.
Adrianna Pińska <adrianna.pinska@gmail.com>
parents:
497
diff
changeset
|
736 if place.occupant is not None: |
62b9a4e21f1a
chickens in closed buildings deselected. building opens if you put in chickens and it's not full. opening building with move or select tool allows rearrangement of chickens in building. fixed multiselect in buildings.
Adrianna Pińska <adrianna.pinska@gmail.com>
parents:
497
diff
changeset
|
737 self.unselect_animal(place.occupant) |
170
92d11e0544bc
Switch building to selected image when building is selected.
Simon Cross <hodgestar@gmail.com>
parents:
169
diff
changeset
|
738 building.selected(False) |
92d11e0544bc
Switch building to selected image when building is selected.
Simon Cross <hodgestar@gmail.com>
parents:
169
diff
changeset
|
739 |
522 | 740 def select_all_callback(): |
741 self.unselect_all() | |
742 for chicken in building.occupants(): | |
743 self.select_animal(chicken) | |
744 update_button(chicken) | |
745 | |
262
d508248041ff
avoid passing events in twice
Neil Muller <drnlmuller@gmail.com>
parents:
258
diff
changeset
|
746 def evict_callback(): |
472
67574723427e
Partially working (but much less crashy) multiple select support
Neil Muller <drnlmuller@gmail.com>
parents:
470
diff
changeset
|
747 if not self.selected_chickens: |
264 | 748 return |
495
d2ca4af92c79
fixed multiple chicken eviction bug
Adrianna Pińska <adrianna.pinska@gmail.com>
parents:
493
diff
changeset
|
749 for tile_pos in building.adjacent_tiles(): |
d2ca4af92c79
fixed multiple chicken eviction bug
Adrianna Pińska <adrianna.pinska@gmail.com>
parents:
493
diff
changeset
|
750 if self.tv.get(tile_pos) != self.GRASSLAND: |
d2ca4af92c79
fixed multiple chicken eviction bug
Adrianna Pińska <adrianna.pinska@gmail.com>
parents:
493
diff
changeset
|
751 continue |
d2ca4af92c79
fixed multiple chicken eviction bug
Adrianna Pińska <adrianna.pinska@gmail.com>
parents:
493
diff
changeset
|
752 if self.get_outside_chicken(tile_pos) is None: |
d2ca4af92c79
fixed multiple chicken eviction bug
Adrianna Pińska <adrianna.pinska@gmail.com>
parents:
493
diff
changeset
|
753 for chicken in self.selected_chickens: |
472
67574723427e
Partially working (but much less crashy) multiple select support
Neil Muller <drnlmuller@gmail.com>
parents:
470
diff
changeset
|
754 update_button(chicken, empty=True) |
495
d2ca4af92c79
fixed multiple chicken eviction bug
Adrianna Pińska <adrianna.pinska@gmail.com>
parents:
493
diff
changeset
|
755 # this will place all the chickens |
d2ca4af92c79
fixed multiple chicken eviction bug
Adrianna Pińska <adrianna.pinska@gmail.com>
parents:
493
diff
changeset
|
756 self.place_animal(tile_pos) |
d2ca4af92c79
fixed multiple chicken eviction bug
Adrianna Pińska <adrianna.pinska@gmail.com>
parents:
493
diff
changeset
|
757 break |
262
d508248041ff
avoid passing events in twice
Neil Muller <drnlmuller@gmail.com>
parents:
258
diff
changeset
|
758 |
525
d9886377b6a2
Hack middle-click clearing selection into the building_dialog
Neil Muller <drnlmuller@gmail.com>
parents:
524
diff
changeset
|
759 def dlg_event(e): |
d9886377b6a2
Hack middle-click clearing selection into the building_dialog
Neil Muller <drnlmuller@gmail.com>
parents:
524
diff
changeset
|
760 if e.type == MOUSEBUTTONDOWN and e.button == 2: # Middle |
d9886377b6a2
Hack middle-click clearing selection into the building_dialog
Neil Muller <drnlmuller@gmail.com>
parents:
524
diff
changeset
|
761 self.unselect_all() |
d9886377b6a2
Hack middle-click clearing selection into the building_dialog
Neil Muller <drnlmuller@gmail.com>
parents:
524
diff
changeset
|
762 for chicken in building.occupants(): |
d9886377b6a2
Hack middle-click clearing selection into the building_dialog
Neil Muller <drnlmuller@gmail.com>
parents:
524
diff
changeset
|
763 update_button(chicken) |
d9886377b6a2
Hack middle-click clearing selection into the building_dialog
Neil Muller <drnlmuller@gmail.com>
parents:
524
diff
changeset
|
764 return False |
d9886377b6a2
Hack middle-click clearing selection into the building_dialog
Neil Muller <drnlmuller@gmail.com>
parents:
524
diff
changeset
|
765 return gui.Table.event(tbl, e) |
d9886377b6a2
Hack middle-click clearing selection into the building_dialog
Neil Muller <drnlmuller@gmail.com>
parents:
524
diff
changeset
|
766 |
d9886377b6a2
Hack middle-click clearing selection into the building_dialog
Neil Muller <drnlmuller@gmail.com>
parents:
524
diff
changeset
|
767 |
522 | 768 tbl.tr() |
769 select_button = gui.Button('Select All') | |
770 select_button.connect(gui.CLICK, select_all_callback) | |
771 tbl.td(select_button, colspan=2, **kwargs) | |
262
d508248041ff
avoid passing events in twice
Neil Muller <drnlmuller@gmail.com>
parents:
258
diff
changeset
|
772 if not sell_callback: |
522 | 773 evict_button = gui.Button('Evict') |
774 evict_button.connect(gui.CLICK, evict_callback) | |
775 tbl.td(evict_button, colspan=2, **kwargs) | |
262
d508248041ff
avoid passing events in twice
Neil Muller <drnlmuller@gmail.com>
parents:
258
diff
changeset
|
776 |
525
d9886377b6a2
Hack middle-click clearing selection into the building_dialog
Neil Muller <drnlmuller@gmail.com>
parents:
524
diff
changeset
|
777 tbl.event = dlg_event |
d9886377b6a2
Hack middle-click clearing selection into the building_dialog
Neil Muller <drnlmuller@gmail.com>
parents:
524
diff
changeset
|
778 |
170
92d11e0544bc
Switch building to selected image when building is selected.
Simon Cross <hodgestar@gmail.com>
parents:
169
diff
changeset
|
779 self.open_dialog(tbl, close_callback=close_callback) |
105
7910b4e01dba
Add chicken moving tool and start of animal placement.
Simon Cross <hodgestar@gmail.com>
parents:
98
diff
changeset
|
780 |
65
7e9c8ad06d32
Implement building selling.
Simon Cross <hodgestar@gmail.com>
parents:
64
diff
changeset
|
781 def buy_building(self, tile_pos, building_cls): |
557
50d6c68ce267
Add gameboard to buildings. Update save version as this breaks old save games
Neil Muller <drnlmuller@gmail.com>
parents:
556
diff
changeset
|
782 building = building_cls(tile_pos, self) |
428
a356e57529ea
buildings cost wood
Adrianna Pińska <adrianna.pinska@gmail.com>
parents:
425
diff
changeset
|
783 if self.wood < building.buy_price(): |
57
08665fa60345
Implement henhouses and henhouse adding.
Simon Cross <hodgestar@gmail.com>
parents:
54
diff
changeset
|
784 return |
191
3c80f49d7d74
Don't allow buildings and fences to be built on top of chickens.
Simon Cross <hodgestar@gmail.com>
parents:
189
diff
changeset
|
785 if any(building.covers((chicken.pos.x, chicken.pos.y)) for chicken in self.chickens): |
3c80f49d7d74
Don't allow buildings and fences to be built on top of chickens.
Simon Cross <hodgestar@gmail.com>
parents:
189
diff
changeset
|
786 return |
557
50d6c68ce267
Add gameboard to buildings. Update save version as this breaks old save games
Neil Muller <drnlmuller@gmail.com>
parents:
556
diff
changeset
|
787 if building.place(): |
428
a356e57529ea
buildings cost wood
Adrianna Pińska <adrianna.pinska@gmail.com>
parents:
425
diff
changeset
|
788 self.add_wood(-building.buy_price()) |
64
99fbb652ce8d
Refactor buildings so that new ones can be added just by adding a class to buildings.py.
Simon Cross <hodgestar@gmail.com>
parents:
60
diff
changeset
|
789 self.add_building(building) |
60
e2631c8e2cd6
Implement guard towers (with temporary sprite PNG).
Simon Cross <hodgestar@gmail.com>
parents:
57
diff
changeset
|
790 |
109
48019afde338
Equipment purchasing and some toolbar tweaks.
Jeremy Thurgood <firxen@gmail.com>
parents:
108
diff
changeset
|
791 def buy_equipment(self, tile_pos, equipment_cls): |
298
88a626202591
Buy equipment for chickens in buildings
Neil Muller <drnlmuller@gmail.com>
parents:
294
diff
changeset
|
792 |
109
48019afde338
Equipment purchasing and some toolbar tweaks.
Jeremy Thurgood <firxen@gmail.com>
parents:
108
diff
changeset
|
793 equipment = equipment_cls() |
298
88a626202591
Buy equipment for chickens in buildings
Neil Muller <drnlmuller@gmail.com>
parents:
294
diff
changeset
|
794 |
310
49c58dda8ac2
Refactor sell_callback, so sell_equipment work
Neil Muller <drnlmuller@gmail.com>
parents:
307
diff
changeset
|
795 def do_equip(chicken, update_button=None): |
298
88a626202591
Buy equipment for chickens in buildings
Neil Muller <drnlmuller@gmail.com>
parents:
294
diff
changeset
|
796 # Try to equip the chicken |
361
d2acf43aba6f
Don't go into debt when buying equipment in buildings
Neil Muller <drnlmuller@gmail.com>
parents:
360
diff
changeset
|
797 if self.cash < equipment.buy_price(): |
d2acf43aba6f
Don't go into debt when buying equipment in buildings
Neil Muller <drnlmuller@gmail.com>
parents:
360
diff
changeset
|
798 return False |
298
88a626202591
Buy equipment for chickens in buildings
Neil Muller <drnlmuller@gmail.com>
parents:
294
diff
changeset
|
799 if equipment.place(chicken): |
88a626202591
Buy equipment for chickens in buildings
Neil Muller <drnlmuller@gmail.com>
parents:
294
diff
changeset
|
800 self.add_cash(-equipment.buy_price()) |
88a626202591
Buy equipment for chickens in buildings
Neil Muller <drnlmuller@gmail.com>
parents:
294
diff
changeset
|
801 chicken.equip(equipment) |
310
49c58dda8ac2
Refactor sell_callback, so sell_equipment work
Neil Muller <drnlmuller@gmail.com>
parents:
307
diff
changeset
|
802 if update_button: |
49c58dda8ac2
Refactor sell_callback, so sell_equipment work
Neil Muller <drnlmuller@gmail.com>
parents:
307
diff
changeset
|
803 update_button(chicken) |
298
88a626202591
Buy equipment for chickens in buildings
Neil Muller <drnlmuller@gmail.com>
parents:
294
diff
changeset
|
804 return False |
88a626202591
Buy equipment for chickens in buildings
Neil Muller <drnlmuller@gmail.com>
parents:
294
diff
changeset
|
805 |
472
67574723427e
Partially working (but much less crashy) multiple select support
Neil Muller <drnlmuller@gmail.com>
parents:
470
diff
changeset
|
806 if tile_pos: |
67574723427e
Partially working (but much less crashy) multiple select support
Neil Muller <drnlmuller@gmail.com>
parents:
470
diff
changeset
|
807 chicken = self.get_outside_chicken(tile_pos) |
67574723427e
Partially working (but much less crashy) multiple select support
Neil Muller <drnlmuller@gmail.com>
parents:
470
diff
changeset
|
808 if chicken is None: |
67574723427e
Partially working (but much less crashy) multiple select support
Neil Muller <drnlmuller@gmail.com>
parents:
470
diff
changeset
|
809 building = self.get_building(tile_pos) |
67574723427e
Partially working (but much less crashy) multiple select support
Neil Muller <drnlmuller@gmail.com>
parents:
470
diff
changeset
|
810 if not (building and building.ABODE): |
524
1eed8c861580
Fix some indentation weirdnesses that have crept in
Neil Muller <drnlmuller@gmail.com>
parents:
523
diff
changeset
|
811 return |
472
67574723427e
Partially working (but much less crashy) multiple select support
Neil Muller <drnlmuller@gmail.com>
parents:
470
diff
changeset
|
812 # Bounce through open dialog once more |
474
a50b53983389
Allow moving multiple animals more easily
Neil Muller <drnlmuller@gmail.com>
parents:
473
diff
changeset
|
813 self.open_building_dialog(building, False, do_equip) |
472
67574723427e
Partially working (but much less crashy) multiple select support
Neil Muller <drnlmuller@gmail.com>
parents:
470
diff
changeset
|
814 else: |
67574723427e
Partially working (but much less crashy) multiple select support
Neil Muller <drnlmuller@gmail.com>
parents:
470
diff
changeset
|
815 do_equip(chicken) |
298
88a626202591
Buy equipment for chickens in buildings
Neil Muller <drnlmuller@gmail.com>
parents:
294
diff
changeset
|
816 else: |
472
67574723427e
Partially working (but much less crashy) multiple select support
Neil Muller <drnlmuller@gmail.com>
parents:
470
diff
changeset
|
817 for chicken in self.selected_chickens: |
67574723427e
Partially working (but much less crashy) multiple select support
Neil Muller <drnlmuller@gmail.com>
parents:
470
diff
changeset
|
818 do_equip(chicken) |
109
48019afde338
Equipment purchasing and some toolbar tweaks.
Jeremy Thurgood <firxen@gmail.com>
parents:
108
diff
changeset
|
819 |
65
7e9c8ad06d32
Implement building selling.
Simon Cross <hodgestar@gmail.com>
parents:
64
diff
changeset
|
820 def sell_building(self, tile_pos): |
105
7910b4e01dba
Add chicken moving tool and start of animal placement.
Simon Cross <hodgestar@gmail.com>
parents:
98
diff
changeset
|
821 building = self.get_building(tile_pos) |
7910b4e01dba
Add chicken moving tool and start of animal placement.
Simon Cross <hodgestar@gmail.com>
parents:
98
diff
changeset
|
822 if building is None: |
7910b4e01dba
Add chicken moving tool and start of animal placement.
Simon Cross <hodgestar@gmail.com>
parents:
98
diff
changeset
|
823 return |
172
f7f29f1d434b
Don't allow occupied buildings to be sold (dialog can probably be dropped once buildings show their number of occupants).
Simon Cross <hodgestar@gmail.com>
parents:
170
diff
changeset
|
824 if list(building.occupants()): |
f7f29f1d434b
Don't allow occupied buildings to be sold (dialog can probably be dropped once buildings show their number of occupants).
Simon Cross <hodgestar@gmail.com>
parents:
170
diff
changeset
|
825 warning = gui.Button("Occupied buildings may not be sold.") |
f7f29f1d434b
Don't allow occupied buildings to be sold (dialog can probably be dropped once buildings show their number of occupants).
Simon Cross <hodgestar@gmail.com>
parents:
170
diff
changeset
|
826 self.open_dialog(warning) |
f7f29f1d434b
Don't allow occupied buildings to be sold (dialog can probably be dropped once buildings show their number of occupants).
Simon Cross <hodgestar@gmail.com>
parents:
170
diff
changeset
|
827 return |
428
a356e57529ea
buildings cost wood
Adrianna Pińska <adrianna.pinska@gmail.com>
parents:
425
diff
changeset
|
828 self.add_wood(building.sell_price()) |
557
50d6c68ce267
Add gameboard to buildings. Update save version as this breaks old save games
Neil Muller <drnlmuller@gmail.com>
parents:
556
diff
changeset
|
829 building.remove() |
105
7910b4e01dba
Add chicken moving tool and start of animal placement.
Simon Cross <hodgestar@gmail.com>
parents:
98
diff
changeset
|
830 self.remove_building(building) |
65
7e9c8ad06d32
Implement building selling.
Simon Cross <hodgestar@gmail.com>
parents:
64
diff
changeset
|
831 |
378
71f5897ac5ef
Fences are now buildings, with appropriate (but ugly) UI changes.
Jeremy Thurgood <firxen@gmail.com>
parents:
361
diff
changeset
|
832 def repair_building(self, tile_pos): |
71f5897ac5ef
Fences are now buildings, with appropriate (but ugly) UI changes.
Jeremy Thurgood <firxen@gmail.com>
parents:
361
diff
changeset
|
833 building = self.get_building(tile_pos) |
71f5897ac5ef
Fences are now buildings, with appropriate (but ugly) UI changes.
Jeremy Thurgood <firxen@gmail.com>
parents:
361
diff
changeset
|
834 if not (building and building.broken()): |
71f5897ac5ef
Fences are now buildings, with appropriate (but ugly) UI changes.
Jeremy Thurgood <firxen@gmail.com>
parents:
361
diff
changeset
|
835 return |
428
a356e57529ea
buildings cost wood
Adrianna Pińska <adrianna.pinska@gmail.com>
parents:
425
diff
changeset
|
836 if self.wood < building.repair_price(): |
a356e57529ea
buildings cost wood
Adrianna Pińska <adrianna.pinska@gmail.com>
parents:
425
diff
changeset
|
837 return |
a356e57529ea
buildings cost wood
Adrianna Pińska <adrianna.pinska@gmail.com>
parents:
425
diff
changeset
|
838 self.add_wood(-building.repair_price()) |
557
50d6c68ce267
Add gameboard to buildings. Update save version as this breaks old save games
Neil Muller <drnlmuller@gmail.com>
parents:
556
diff
changeset
|
839 building.repair() |
378
71f5897ac5ef
Fences are now buildings, with appropriate (but ugly) UI changes.
Jeremy Thurgood <firxen@gmail.com>
parents:
361
diff
changeset
|
840 |
569
3ec614e6fd4a
Replace monolithic sell equipment tool with a tool for each type of equipment.
Simon Cross <hodgestar@gmail.com>
parents:
567
diff
changeset
|
841 def sell_equipment(self, tile_pos, equipment_cls): |
302
01c1682dc250
Mostly working selling equipment in buildings
Neil Muller <drnlmuller@gmail.com>
parents:
298
diff
changeset
|
842 x, y = 0, 0 |
310
49c58dda8ac2
Refactor sell_callback, so sell_equipment work
Neil Muller <drnlmuller@gmail.com>
parents:
307
diff
changeset
|
843 def do_sell(chicken, update_button=None): |
569
3ec614e6fd4a
Replace monolithic sell equipment tool with a tool for each type of equipment.
Simon Cross <hodgestar@gmail.com>
parents:
567
diff
changeset
|
844 items = [item for item in chicken.equipment |
3ec614e6fd4a
Replace monolithic sell equipment tool with a tool for each type of equipment.
Simon Cross <hodgestar@gmail.com>
parents:
567
diff
changeset
|
845 if isinstance(item, equipment_cls)] |
3ec614e6fd4a
Replace monolithic sell equipment tool with a tool for each type of equipment.
Simon Cross <hodgestar@gmail.com>
parents:
567
diff
changeset
|
846 for item in items: |
302
01c1682dc250
Mostly working selling equipment in buildings
Neil Muller <drnlmuller@gmail.com>
parents:
298
diff
changeset
|
847 self.add_cash(item.sell_price()) |
01c1682dc250
Mostly working selling equipment in buildings
Neil Muller <drnlmuller@gmail.com>
parents:
298
diff
changeset
|
848 chicken.unequip(item) |
310
49c58dda8ac2
Refactor sell_callback, so sell_equipment work
Neil Muller <drnlmuller@gmail.com>
parents:
307
diff
changeset
|
849 if update_button: |
49c58dda8ac2
Refactor sell_callback, so sell_equipment work
Neil Muller <drnlmuller@gmail.com>
parents:
307
diff
changeset
|
850 update_button(chicken) |
302
01c1682dc250
Mostly working selling equipment in buildings
Neil Muller <drnlmuller@gmail.com>
parents:
298
diff
changeset
|
851 return False |
506
3b5717d742b2
fixed selling of equipment from selected chickens
Adrianna Pińska <adrianna.pinska@gmail.com>
parents:
504
diff
changeset
|
852 if tile_pos: |
3b5717d742b2
fixed selling of equipment from selected chickens
Adrianna Pińska <adrianna.pinska@gmail.com>
parents:
504
diff
changeset
|
853 chicken = self.get_outside_chicken(tile_pos) |
3b5717d742b2
fixed selling of equipment from selected chickens
Adrianna Pińska <adrianna.pinska@gmail.com>
parents:
504
diff
changeset
|
854 if chicken is not None: |
3b5717d742b2
fixed selling of equipment from selected chickens
Adrianna Pińska <adrianna.pinska@gmail.com>
parents:
504
diff
changeset
|
855 do_sell(chicken) |
3b5717d742b2
fixed selling of equipment from selected chickens
Adrianna Pińska <adrianna.pinska@gmail.com>
parents:
504
diff
changeset
|
856 else: |
3b5717d742b2
fixed selling of equipment from selected chickens
Adrianna Pińska <adrianna.pinska@gmail.com>
parents:
504
diff
changeset
|
857 building = self.get_building(tile_pos) |
527
f59cb047d08f
Don't try to open non-abodes.
Simon Cross <hodgestar@gmail.com>
parents:
526
diff
changeset
|
858 if building is None or not building.ABODE: |
506
3b5717d742b2
fixed selling of equipment from selected chickens
Adrianna Pińska <adrianna.pinska@gmail.com>
parents:
504
diff
changeset
|
859 return |
3b5717d742b2
fixed selling of equipment from selected chickens
Adrianna Pińska <adrianna.pinska@gmail.com>
parents:
504
diff
changeset
|
860 x, y = 50, 0 |
3b5717d742b2
fixed selling of equipment from selected chickens
Adrianna Pińska <adrianna.pinska@gmail.com>
parents:
504
diff
changeset
|
861 self.open_building_dialog(building, False, do_sell) |
164
ab90040013a7
Implement equipment selling.
Simon Cross <hodgestar@gmail.com>
parents:
162
diff
changeset
|
862 else: |
506
3b5717d742b2
fixed selling of equipment from selected chickens
Adrianna Pińska <adrianna.pinska@gmail.com>
parents:
504
diff
changeset
|
863 for chicken in self.selected_chickens[:]: |
3b5717d742b2
fixed selling of equipment from selected chickens
Adrianna Pińska <adrianna.pinska@gmail.com>
parents:
504
diff
changeset
|
864 do_sell(chicken) |
164
ab90040013a7
Implement equipment selling.
Simon Cross <hodgestar@gmail.com>
parents:
162
diff
changeset
|
865 |
310
49c58dda8ac2
Refactor sell_callback, so sell_equipment work
Neil Muller <drnlmuller@gmail.com>
parents:
307
diff
changeset
|
866 def open_equipment_dialog(self, chicken, x, y, update_button=None): |
164
ab90040013a7
Implement equipment selling.
Simon Cross <hodgestar@gmail.com>
parents:
162
diff
changeset
|
867 tbl = gui.Table() |
ab90040013a7
Implement equipment selling.
Simon Cross <hodgestar@gmail.com>
parents:
162
diff
changeset
|
868 |
ab90040013a7
Implement equipment selling.
Simon Cross <hodgestar@gmail.com>
parents:
162
diff
changeset
|
869 def sell_item(item, button): |
ab90040013a7
Implement equipment selling.
Simon Cross <hodgestar@gmail.com>
parents:
162
diff
changeset
|
870 """Select item of equipment.""" |
ab90040013a7
Implement equipment selling.
Simon Cross <hodgestar@gmail.com>
parents:
162
diff
changeset
|
871 self.add_cash(item.sell_price()) |
ab90040013a7
Implement equipment selling.
Simon Cross <hodgestar@gmail.com>
parents:
162
diff
changeset
|
872 chicken.unequip(item) |
310
49c58dda8ac2
Refactor sell_callback, so sell_equipment work
Neil Muller <drnlmuller@gmail.com>
parents:
307
diff
changeset
|
873 if update_button: |
49c58dda8ac2
Refactor sell_callback, so sell_equipment work
Neil Muller <drnlmuller@gmail.com>
parents:
307
diff
changeset
|
874 update_button(chicken) |
169
946f09ed37cd
Make equipment dialog close after selecting an item to sell.
Simon Cross <hodgestar@gmail.com>
parents:
168
diff
changeset
|
875 self.disp.close(dialog) |
164
ab90040013a7
Implement equipment selling.
Simon Cross <hodgestar@gmail.com>
parents:
162
diff
changeset
|
876 |
ab90040013a7
Implement equipment selling.
Simon Cross <hodgestar@gmail.com>
parents:
162
diff
changeset
|
877 kwargs = { 'style': { 'padding_left': 10, 'padding_bottom': 10 }} |
ab90040013a7
Implement equipment selling.
Simon Cross <hodgestar@gmail.com>
parents:
162
diff
changeset
|
878 |
ab90040013a7
Implement equipment selling.
Simon Cross <hodgestar@gmail.com>
parents:
162
diff
changeset
|
879 tbl.tr() |
ab90040013a7
Implement equipment selling.
Simon Cross <hodgestar@gmail.com>
parents:
162
diff
changeset
|
880 tbl.td(gui.Button("Sell ... "), align=-1, **kwargs) |
ab90040013a7
Implement equipment selling.
Simon Cross <hodgestar@gmail.com>
parents:
162
diff
changeset
|
881 |
ab90040013a7
Implement equipment selling.
Simon Cross <hodgestar@gmail.com>
parents:
162
diff
changeset
|
882 for item in chicken.equipment: |
ab90040013a7
Implement equipment selling.
Simon Cross <hodgestar@gmail.com>
parents:
162
diff
changeset
|
883 tbl.tr() |
ab90040013a7
Implement equipment selling.
Simon Cross <hodgestar@gmail.com>
parents:
162
diff
changeset
|
884 button = gui.Button(item.name().title()) |
ab90040013a7
Implement equipment selling.
Simon Cross <hodgestar@gmail.com>
parents:
162
diff
changeset
|
885 button.connect(gui.CLICK, sell_item, item, button) |
ab90040013a7
Implement equipment selling.
Simon Cross <hodgestar@gmail.com>
parents:
162
diff
changeset
|
886 tbl.td(button, align=1, **kwargs) |
ab90040013a7
Implement equipment selling.
Simon Cross <hodgestar@gmail.com>
parents:
162
diff
changeset
|
887 |
302
01c1682dc250
Mostly working selling equipment in buildings
Neil Muller <drnlmuller@gmail.com>
parents:
298
diff
changeset
|
888 dialog = self.open_dialog(tbl, x=x, y=y) |
164
ab90040013a7
Implement equipment selling.
Simon Cross <hodgestar@gmail.com>
parents:
162
diff
changeset
|
889 |
567
37f7454518d5
Move quit stuff into seperate function
Neil Muller <drnlmuller@gmail.com>
parents:
566
diff
changeset
|
890 def _do_quit(self): |
37f7454518d5
Move quit stuff into seperate function
Neil Muller <drnlmuller@gmail.com>
parents:
566
diff
changeset
|
891 |
37f7454518d5
Move quit stuff into seperate function
Neil Muller <drnlmuller@gmail.com>
parents:
566
diff
changeset
|
892 def check_saved(_widget): |
37f7454518d5
Move quit stuff into seperate function
Neil Muller <drnlmuller@gmail.com>
parents:
566
diff
changeset
|
893 if _widget.value: |
37f7454518d5
Move quit stuff into seperate function
Neil Muller <drnlmuller@gmail.com>
parents:
566
diff
changeset
|
894 # OK to quit, rely on pgu ordering that this happens in |
37f7454518d5
Move quit stuff into seperate function
Neil Muller <drnlmuller@gmail.com>
parents:
566
diff
changeset
|
895 # the right order |
37f7454518d5
Move quit stuff into seperate function
Neil Muller <drnlmuller@gmail.com>
parents:
566
diff
changeset
|
896 pygame.event.post(constants.GO_GAME_OVER) |
37f7454518d5
Move quit stuff into seperate function
Neil Muller <drnlmuller@gmail.com>
parents:
566
diff
changeset
|
897 |
37f7454518d5
Move quit stuff into seperate function
Neil Muller <drnlmuller@gmail.com>
parents:
566
diff
changeset
|
898 def sure(val): |
37f7454518d5
Move quit stuff into seperate function
Neil Muller <drnlmuller@gmail.com>
parents:
566
diff
changeset
|
899 if val == 2: |
37f7454518d5
Move quit stuff into seperate function
Neil Muller <drnlmuller@gmail.com>
parents:
566
diff
changeset
|
900 savedialog = savegame.SaveDialog(self) |
37f7454518d5
Move quit stuff into seperate function
Neil Muller <drnlmuller@gmail.com>
parents:
566
diff
changeset
|
901 savedialog.connect(gui.CHANGE, check_saved) |
37f7454518d5
Move quit stuff into seperate function
Neil Muller <drnlmuller@gmail.com>
parents:
566
diff
changeset
|
902 savedialog.open() |
37f7454518d5
Move quit stuff into seperate function
Neil Muller <drnlmuller@gmail.com>
parents:
566
diff
changeset
|
903 elif val: |
37f7454518d5
Move quit stuff into seperate function
Neil Muller <drnlmuller@gmail.com>
parents:
566
diff
changeset
|
904 pygame.event.post(constants.GO_GAME_OVER) |
37f7454518d5
Move quit stuff into seperate function
Neil Muller <drnlmuller@gmail.com>
parents:
566
diff
changeset
|
905 |
37f7454518d5
Move quit stuff into seperate function
Neil Muller <drnlmuller@gmail.com>
parents:
566
diff
changeset
|
906 dialog = misc.CheckDialog(sure, |
37f7454518d5
Move quit stuff into seperate function
Neil Muller <drnlmuller@gmail.com>
parents:
566
diff
changeset
|
907 "Do you REALLY want to exit this game?", |
37f7454518d5
Move quit stuff into seperate function
Neil Muller <drnlmuller@gmail.com>
parents:
566
diff
changeset
|
908 "Yes, Quit", "No, Don't Quit", "Save & Quit") |
37f7454518d5
Move quit stuff into seperate function
Neil Muller <drnlmuller@gmail.com>
parents:
566
diff
changeset
|
909 self.disp.open(dialog) |
37f7454518d5
Move quit stuff into seperate function
Neil Muller <drnlmuller@gmail.com>
parents:
566
diff
changeset
|
910 |
14 | 911 def event(self, e): |
548
27c09c58d89d
Remove gameboard and dialog event flow hacks.
Simon Cross <hodgestar@gmail.com>
parents:
544
diff
changeset
|
912 if e.type == KEYDOWN and e.key == K_ESCAPE: |
567
37f7454518d5
Move quit stuff into seperate function
Neil Muller <drnlmuller@gmail.com>
parents:
566
diff
changeset
|
913 self._do_quit() |
548
27c09c58d89d
Remove gameboard and dialog event flow hacks.
Simon Cross <hodgestar@gmail.com>
parents:
544
diff
changeset
|
914 return True |
27c09c58d89d
Remove gameboard and dialog event flow hacks.
Simon Cross <hodgestar@gmail.com>
parents:
544
diff
changeset
|
915 elif e.type == KEYDOWN and e.key == K_n and self.day: |
566
a8dde729000a
Add 'Save and Quit' option to quit dialog. Move game events from engine to constants to ease 'import engine' fun
Neil Muller <drnlmuller@gmail.com>
parents:
565
diff
changeset
|
916 pygame.event.post(constants.START_NIGHT) |
548
27c09c58d89d
Remove gameboard and dialog event flow hacks.
Simon Cross <hodgestar@gmail.com>
parents:
544
diff
changeset
|
917 return True |
27c09c58d89d
Remove gameboard and dialog event flow hacks.
Simon Cross <hodgestar@gmail.com>
parents:
544
diff
changeset
|
918 elif e.type == KEYDOWN and e.key == K_d and self.night: |
566
a8dde729000a
Add 'Save and Quit' option to quit dialog. Move game events from engine to constants to ease 'import engine' fun
Neil Muller <drnlmuller@gmail.com>
parents:
565
diff
changeset
|
919 pygame.event.post(constants.FAST_FORWARD) |
548
27c09c58d89d
Remove gameboard and dialog event flow hacks.
Simon Cross <hodgestar@gmail.com>
parents:
544
diff
changeset
|
920 return True |
27c09c58d89d
Remove gameboard and dialog event flow hacks.
Simon Cross <hodgestar@gmail.com>
parents:
544
diff
changeset
|
921 elif e.type == KEYDOWN and e.key in [K_UP, K_DOWN, K_LEFT, K_RIGHT]: |
39
ec79aabe2bf1
Scroll game window with arrow keys.
Jeremy Thurgood <firxen@gmail.com>
parents:
37
diff
changeset
|
922 if e.key == K_UP: |
433
8643893635e7
Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
428
diff
changeset
|
923 self.tvw.move_view(0, -constants.TILE_DIMENSIONS[1]) |
39
ec79aabe2bf1
Scroll game window with arrow keys.
Jeremy Thurgood <firxen@gmail.com>
parents:
37
diff
changeset
|
924 if e.key == K_DOWN: |
433
8643893635e7
Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
428
diff
changeset
|
925 self.tvw.move_view(0, constants.TILE_DIMENSIONS[1]) |
39
ec79aabe2bf1
Scroll game window with arrow keys.
Jeremy Thurgood <firxen@gmail.com>
parents:
37
diff
changeset
|
926 if e.key == K_LEFT: |
433
8643893635e7
Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
428
diff
changeset
|
927 self.tvw.move_view(-constants.TILE_DIMENSIONS[0], 0) |
39
ec79aabe2bf1
Scroll game window with arrow keys.
Jeremy Thurgood <firxen@gmail.com>
parents:
37
diff
changeset
|
928 if e.key == K_RIGHT: |
433
8643893635e7
Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
428
diff
changeset
|
929 self.tvw.move_view(constants.TILE_DIMENSIONS[0], 0) |
262
d508248041ff
avoid passing events in twice
Neil Muller <drnlmuller@gmail.com>
parents:
258
diff
changeset
|
930 return True |
489 | 931 elif e.type == KEYDOWN and e.key in \ |
932 [K_0, K_1, K_2, K_3, K_4, K_5, K_6, K_7, K_8, K_9]: | |
524
1eed8c861580
Fix some indentation weirdnesses that have crept in
Neil Muller <drnlmuller@gmail.com>
parents:
523
diff
changeset
|
933 mods = pygame.key.get_mods() |
528
04975aa3ec70
Alt also sets groups, because jerith has a weird OS setup.
Jeremy Thurgood <firxen@gmail.com>
parents:
527
diff
changeset
|
934 if (mods & KMOD_CTRL) or (mods & KMOD_ALT): |
524
1eed8c861580
Fix some indentation weirdnesses that have crept in
Neil Muller <drnlmuller@gmail.com>
parents:
523
diff
changeset
|
935 # store current selection |
1eed8c861580
Fix some indentation weirdnesses that have crept in
Neil Muller <drnlmuller@gmail.com>
parents:
523
diff
changeset
|
936 self.stored_selections[e.key] = self.selected_chickens[:] |
1eed8c861580
Fix some indentation weirdnesses that have crept in
Neil Muller <drnlmuller@gmail.com>
parents:
523
diff
changeset
|
937 else: |
542
baf75d5ee50d
Shift+group to add to current selection.
Jeremy Thurgood <firxen@gmail.com>
parents:
541
diff
changeset
|
938 additive = (mods & KMOD_SHIFT) |
baf75d5ee50d
Shift+group to add to current selection.
Jeremy Thurgood <firxen@gmail.com>
parents:
541
diff
changeset
|
939 self.restore_selection(self.stored_selections.get(e.key, []), additive) |
541
450de9dfa106
Move gameboard event prodding into the widgets - better matches pgu internals
Neil Muller <drnlmuller@gmail.com>
parents:
539
diff
changeset
|
940 return True |
521
787eb032bf8a
Cursor hint for Ctrl-click move
Neil Muller <drnlmuller@gmail.com>
parents:
519
diff
changeset
|
941 elif e.type == KEYDOWN: |
524
1eed8c861580
Fix some indentation weirdnesses that have crept in
Neil Muller <drnlmuller@gmail.com>
parents:
523
diff
changeset
|
942 mods = pygame.key.get_mods() |
1eed8c861580
Fix some indentation weirdnesses that have crept in
Neil Muller <drnlmuller@gmail.com>
parents:
523
diff
changeset
|
943 if mods & KMOD_CTRL and self.selected_tool == constants.TOOL_SELECT_CHICKENS and self.selected_chickens: |
565 | 944 self.set_tool_cursor((cursors.cursors['chicken'],)) |
521
787eb032bf8a
Cursor hint for Ctrl-click move
Neil Muller <drnlmuller@gmail.com>
parents:
519
diff
changeset
|
945 elif e.type == KEYUP: |
524
1eed8c861580
Fix some indentation weirdnesses that have crept in
Neil Muller <drnlmuller@gmail.com>
parents:
523
diff
changeset
|
946 mods = pygame.key.get_mods() |
1eed8c861580
Fix some indentation weirdnesses that have crept in
Neil Muller <drnlmuller@gmail.com>
parents:
523
diff
changeset
|
947 if not (mods & KMOD_CTRL) and self.selected_tool == constants.TOOL_SELECT_CHICKENS: |
565 | 948 self.set_tool_cursor((cursors.cursors['select'],)) |
262
d508248041ff
avoid passing events in twice
Neil Muller <drnlmuller@gmail.com>
parents:
258
diff
changeset
|
949 return False |
25
6d6ab0c1479d
Add placing some chickens and foxes
Neil Muller <drnlmuller@gmail.com>
parents:
24
diff
changeset
|
950 |
542
baf75d5ee50d
Shift+group to add to current selection.
Jeremy Thurgood <firxen@gmail.com>
parents:
541
diff
changeset
|
951 def restore_selection(self, selection, additive=False): |
baf75d5ee50d
Shift+group to add to current selection.
Jeremy Thurgood <firxen@gmail.com>
parents:
541
diff
changeset
|
952 if not additive: |
baf75d5ee50d
Shift+group to add to current selection.
Jeremy Thurgood <firxen@gmail.com>
parents:
541
diff
changeset
|
953 self.unselect_all() |
489 | 954 for chick in selection[:]: |
955 if chick in self.chickens: | |
956 self.select_animal(chick) | |
957 else: | |
958 # Update stored selection | |
959 selection.remove(chick) | |
960 | |
139
1d73de63bd71
Add basic game over screen
Neil Muller <drnlmuller@gmail.com>
parents:
135
diff
changeset
|
961 def advance_day(self): |
1d73de63bd71
Add basic game over screen
Neil Muller <drnlmuller@gmail.com>
parents:
135
diff
changeset
|
962 self.days += 1 |
1d73de63bd71
Add basic game over screen
Neil Muller <drnlmuller@gmail.com>
parents:
135
diff
changeset
|
963 |
552
11c4cebfe4c5
Preparatory work for woodland biodiversity.
Jeremy Thurgood <firxen@gmail.com>
parents:
548
diff
changeset
|
964 def is_woodland_tile(self, pos): |
11c4cebfe4c5
Preparatory work for woodland biodiversity.
Jeremy Thurgood <firxen@gmail.com>
parents:
548
diff
changeset
|
965 return tiles.TILE_MAP[self.tv.get(pos.to_tile_tuple())] == 'woodland' |
11c4cebfe4c5
Preparatory work for woodland biodiversity.
Jeremy Thurgood <firxen@gmail.com>
parents:
548
diff
changeset
|
966 |
25
6d6ab0c1479d
Add placing some chickens and foxes
Neil Muller <drnlmuller@gmail.com>
parents:
24
diff
changeset
|
967 def clear_foxes(self): |
116
d539ef5a3333
Add basic chicken->egg cycle
Neil Muller <drnlmuller@gmail.com>
parents:
115
diff
changeset
|
968 for fox in self.foxes.copy(): |
80
ad9d1bc7ef0c
Kill foxes that don't reach safety
Neil Muller <drnlmuller@gmail.com>
parents:
79
diff
changeset
|
969 # Any foxes that didn't make it to the woods are automatically |
ad9d1bc7ef0c
Kill foxes that don't reach safety
Neil Muller <drnlmuller@gmail.com>
parents:
79
diff
changeset
|
970 # killed |
552
11c4cebfe4c5
Preparatory work for woodland biodiversity.
Jeremy Thurgood <firxen@gmail.com>
parents:
548
diff
changeset
|
971 if self.in_bounds(fox.pos) and not self.is_woodland_tile(fox.pos): |
84 | 972 self.kill_fox(fox) |
973 else: | |
397
532f1ea476ff
Make foxes enter buildings, with a seperate count for them
Neil Muller <drnlmuller@gmail.com>
parents:
396
diff
changeset
|
974 self.remove_fox(fox) |
116
d539ef5a3333
Add basic chicken->egg cycle
Neil Muller <drnlmuller@gmail.com>
parents:
115
diff
changeset
|
975 self.foxes = set() # Remove all the foxes |
25
6d6ab0c1479d
Add placing some chickens and foxes
Neil Muller <drnlmuller@gmail.com>
parents:
24
diff
changeset
|
976 |
425
1d0cc37b4e14
Add method for clearing all chickens (will be useful later). Cache animal positions only just before night starts. Range-check position before adding it to the cache.
Simon Cross <hodgestar@gmail.com>
parents:
424
diff
changeset
|
977 def clear_chickens(self): |
1d0cc37b4e14
Add method for clearing all chickens (will be useful later). Cache animal positions only just before night starts. Range-check position before adding it to the cache.
Simon Cross <hodgestar@gmail.com>
parents:
424
diff
changeset
|
978 for chicken in self.chickens.copy(): |
1d0cc37b4e14
Add method for clearing all chickens (will be useful later). Cache animal positions only just before night starts. Range-check position before adding it to the cache.
Simon Cross <hodgestar@gmail.com>
parents:
424
diff
changeset
|
979 self.remove_chicken(chicken) |
1d0cc37b4e14
Add method for clearing all chickens (will be useful later). Cache animal positions only just before night starts. Range-check position before adding it to the cache.
Simon Cross <hodgestar@gmail.com>
parents:
424
diff
changeset
|
980 |
444
feb9b7a23ef2
Support for saving and loading games (toolbar entries commented out for lack of space).
Simon Cross <hodgestar@gmail.com>
parents:
434
diff
changeset
|
981 def clear_buildings(self): |
feb9b7a23ef2
Support for saving and loading games (toolbar entries commented out for lack of space).
Simon Cross <hodgestar@gmail.com>
parents:
434
diff
changeset
|
982 for building in self.buildings.copy(): |
feb9b7a23ef2
Support for saving and loading games (toolbar entries commented out for lack of space).
Simon Cross <hodgestar@gmail.com>
parents:
434
diff
changeset
|
983 self.remove_building(building) |
feb9b7a23ef2
Support for saving and loading games (toolbar entries commented out for lack of space).
Simon Cross <hodgestar@gmail.com>
parents:
434
diff
changeset
|
984 |
396
19e583e5cdc0
Refactor for further move work
Neil Muller <drnlmuller@gmail.com>
parents:
395
diff
changeset
|
985 def do_night_step(self): |
19e583e5cdc0
Refactor for further move work
Neil Muller <drnlmuller@gmail.com>
parents:
395
diff
changeset
|
986 """Handle the events of the night. |
19e583e5cdc0
Refactor for further move work
Neil Muller <drnlmuller@gmail.com>
parents:
395
diff
changeset
|
987 |
122
d2b19131d537
Don't continue the night if we're not doing anything anymore
Neil Muller <drnlmuller@gmail.com>
parents:
119
diff
changeset
|
988 We return True if there are no more foxes to move or all the |
d2b19131d537
Don't continue the night if we're not doing anything anymore
Neil Muller <drnlmuller@gmail.com>
parents:
119
diff
changeset
|
989 foxes are safely back. This end's the night""" |
d2b19131d537
Don't continue the night if we're not doing anything anymore
Neil Muller <drnlmuller@gmail.com>
parents:
119
diff
changeset
|
990 if not self.foxes: |
d2b19131d537
Don't continue the night if we're not doing anything anymore
Neil Muller <drnlmuller@gmail.com>
parents:
119
diff
changeset
|
991 return True |
396
19e583e5cdc0
Refactor for further move work
Neil Muller <drnlmuller@gmail.com>
parents:
395
diff
changeset
|
992 # Move all the foxes |
19e583e5cdc0
Refactor for further move work
Neil Muller <drnlmuller@gmail.com>
parents:
395
diff
changeset
|
993 over = self.foxes_move() |
19e583e5cdc0
Refactor for further move work
Neil Muller <drnlmuller@gmail.com>
parents:
395
diff
changeset
|
994 if not over: |
19e583e5cdc0
Refactor for further move work
Neil Muller <drnlmuller@gmail.com>
parents:
395
diff
changeset
|
995 self.foxes_attack() |
19e583e5cdc0
Refactor for further move work
Neil Muller <drnlmuller@gmail.com>
parents:
395
diff
changeset
|
996 self.chickens_attack() |
19e583e5cdc0
Refactor for further move work
Neil Muller <drnlmuller@gmail.com>
parents:
395
diff
changeset
|
997 return over |
19e583e5cdc0
Refactor for further move work
Neil Muller <drnlmuller@gmail.com>
parents:
395
diff
changeset
|
998 |
401
7405f7db469f
Tweak fox attack logic - we no longer ignore chickens we accidently step on
Neil Muller <drnlmuller@gmail.com>
parents:
400
diff
changeset
|
999 def _cache_animal_positions(self): |
399
3294929223bd
Cache fox positions to avoid a repeated loop
Neil Muller <drnlmuller@gmail.com>
parents:
397
diff
changeset
|
1000 """Cache the current set of fox positions for the avoiding checks""" |
456
96dbf2c8506e
Factor position cache out into its own class, make Position more useful.
Jeremy Thurgood <firxen@gmail.com>
parents:
453
diff
changeset
|
1001 self._pos_cache.clear() |
399
3294929223bd
Cache fox positions to avoid a repeated loop
Neil Muller <drnlmuller@gmail.com>
parents:
397
diff
changeset
|
1002 for fox in self.foxes: |
456
96dbf2c8506e
Factor position cache out into its own class, make Position more useful.
Jeremy Thurgood <firxen@gmail.com>
parents:
453
diff
changeset
|
1003 self._pos_cache.add(fox, 'fox') |
401
7405f7db469f
Tweak fox attack logic - we no longer ignore chickens we accidently step on
Neil Muller <drnlmuller@gmail.com>
parents:
400
diff
changeset
|
1004 for chick in self.chickens: |
456
96dbf2c8506e
Factor position cache out into its own class, make Position more useful.
Jeremy Thurgood <firxen@gmail.com>
parents:
453
diff
changeset
|
1005 self._pos_cache.add(chick, 'chicken') |
399
3294929223bd
Cache fox positions to avoid a repeated loop
Neil Muller <drnlmuller@gmail.com>
parents:
397
diff
changeset
|
1006 |
456
96dbf2c8506e
Factor position cache out into its own class, make Position more useful.
Jeremy Thurgood <firxen@gmail.com>
parents:
453
diff
changeset
|
1007 def get_animal_at_pos(self, pos, animal_type): |
96dbf2c8506e
Factor position cache out into its own class, make Position more useful.
Jeremy Thurgood <firxen@gmail.com>
parents:
453
diff
changeset
|
1008 return self._pos_cache.get(pos, animal_type) |
399
3294929223bd
Cache fox positions to avoid a repeated loop
Neil Muller <drnlmuller@gmail.com>
parents:
397
diff
changeset
|
1009 |
422
ab4fc3fe0f96
chickens scatter; chop wood
Adrianna Pińska <adrianna.pinska@gmail.com>
parents:
421
diff
changeset
|
1010 def chickens_scatter(self): |
ab4fc3fe0f96
chickens scatter; chop wood
Adrianna Pińska <adrianna.pinska@gmail.com>
parents:
421
diff
changeset
|
1011 """Chickens outside move around randomly a bit""" |
ab4fc3fe0f96
chickens scatter; chop wood
Adrianna Pińska <adrianna.pinska@gmail.com>
parents:
421
diff
changeset
|
1012 for chicken in [chick for chick in self.chickens if chick.outside()]: |
ab4fc3fe0f96
chickens scatter; chop wood
Adrianna Pińska <adrianna.pinska@gmail.com>
parents:
421
diff
changeset
|
1013 old_pos = chicken.pos |
476
3dae0fc14009
Animals have their own gameboard references instead of lugging them around in params all the time.
Jeremy Thurgood <firxen@gmail.com>
parents:
475
diff
changeset
|
1014 chicken.move() |
456
96dbf2c8506e
Factor position cache out into its own class, make Position more useful.
Jeremy Thurgood <firxen@gmail.com>
parents:
453
diff
changeset
|
1015 self._pos_cache.update(old_pos, chicken, 'chicken') |
422
ab4fc3fe0f96
chickens scatter; chop wood
Adrianna Pińska <adrianna.pinska@gmail.com>
parents:
421
diff
changeset
|
1016 |
ab4fc3fe0f96
chickens scatter; chop wood
Adrianna Pińska <adrianna.pinska@gmail.com>
parents:
421
diff
changeset
|
1017 def chickens_chop_wood(self): |
ab4fc3fe0f96
chickens scatter; chop wood
Adrianna Pińska <adrianna.pinska@gmail.com>
parents:
421
diff
changeset
|
1018 """Chickens with axes chop down trees near them""" |
ab4fc3fe0f96
chickens scatter; chop wood
Adrianna Pińska <adrianna.pinska@gmail.com>
parents:
421
diff
changeset
|
1019 for chicken in [chick for chick in self.chickens if chick.outside()]: |
476
3dae0fc14009
Animals have their own gameboard references instead of lugging them around in params all the time.
Jeremy Thurgood <firxen@gmail.com>
parents:
475
diff
changeset
|
1020 chicken.chop() |
460 | 1021 self.calculate_wood_groat_exchange_rate() |
422
ab4fc3fe0f96
chickens scatter; chop wood
Adrianna Pińska <adrianna.pinska@gmail.com>
parents:
421
diff
changeset
|
1022 |
396
19e583e5cdc0
Refactor for further move work
Neil Muller <drnlmuller@gmail.com>
parents:
395
diff
changeset
|
1023 def foxes_move(self): |
122
d2b19131d537
Don't continue the night if we're not doing anything anymore
Neil Muller <drnlmuller@gmail.com>
parents:
119
diff
changeset
|
1024 over = True |
530
c1f14fa35d30
Avoid buglet where sprite isn't properly removed for a safe fox
Neil Muller <drnlmuller@gmail.com>
parents:
528
diff
changeset
|
1025 for fox in self.foxes.copy(): |
399
3294929223bd
Cache fox positions to avoid a repeated loop
Neil Muller <drnlmuller@gmail.com>
parents:
397
diff
changeset
|
1026 old_pos = fox.pos |
476
3dae0fc14009
Animals have their own gameboard references instead of lugging them around in params all the time.
Jeremy Thurgood <firxen@gmail.com>
parents:
475
diff
changeset
|
1027 fox.move() |
122
d2b19131d537
Don't continue the night if we're not doing anything anymore
Neil Muller <drnlmuller@gmail.com>
parents:
119
diff
changeset
|
1028 if not fox.safe: |
d2b19131d537
Don't continue the night if we're not doing anything anymore
Neil Muller <drnlmuller@gmail.com>
parents:
119
diff
changeset
|
1029 over = False |
530
c1f14fa35d30
Avoid buglet where sprite isn't properly removed for a safe fox
Neil Muller <drnlmuller@gmail.com>
parents:
528
diff
changeset
|
1030 self._pos_cache.update(old_pos, fox, 'fox') |
c1f14fa35d30
Avoid buglet where sprite isn't properly removed for a safe fox
Neil Muller <drnlmuller@gmail.com>
parents:
528
diff
changeset
|
1031 else: |
c1f14fa35d30
Avoid buglet where sprite isn't properly removed for a safe fox
Neil Muller <drnlmuller@gmail.com>
parents:
528
diff
changeset
|
1032 # Avoid stale fox on board edge |
c1f14fa35d30
Avoid buglet where sprite isn't properly removed for a safe fox
Neil Muller <drnlmuller@gmail.com>
parents:
528
diff
changeset
|
1033 self.remove_fox(fox) |
396
19e583e5cdc0
Refactor for further move work
Neil Muller <drnlmuller@gmail.com>
parents:
395
diff
changeset
|
1034 return over |
19e583e5cdc0
Refactor for further move work
Neil Muller <drnlmuller@gmail.com>
parents:
395
diff
changeset
|
1035 |
19e583e5cdc0
Refactor for further move work
Neil Muller <drnlmuller@gmail.com>
parents:
395
diff
changeset
|
1036 def foxes_attack(self): |
19e583e5cdc0
Refactor for further move work
Neil Muller <drnlmuller@gmail.com>
parents:
395
diff
changeset
|
1037 for fox in self.foxes: |
476
3dae0fc14009
Animals have their own gameboard references instead of lugging them around in params all the time.
Jeremy Thurgood <firxen@gmail.com>
parents:
475
diff
changeset
|
1038 fox.attack() |
396
19e583e5cdc0
Refactor for further move work
Neil Muller <drnlmuller@gmail.com>
parents:
395
diff
changeset
|
1039 |
19e583e5cdc0
Refactor for further move work
Neil Muller <drnlmuller@gmail.com>
parents:
395
diff
changeset
|
1040 def chickens_attack(self): |
84 | 1041 for chicken in self.chickens: |
476
3dae0fc14009
Animals have their own gameboard references instead of lugging them around in params all the time.
Jeremy Thurgood <firxen@gmail.com>
parents:
475
diff
changeset
|
1042 chicken.attack() |
29 | 1043 |
25
6d6ab0c1479d
Add placing some chickens and foxes
Neil Muller <drnlmuller@gmail.com>
parents:
24
diff
changeset
|
1044 def add_chicken(self, chicken): |
116
d539ef5a3333
Add basic chicken->egg cycle
Neil Muller <drnlmuller@gmail.com>
parents:
115
diff
changeset
|
1045 self.chickens.add(chicken) |
115
2b2007e231da
Start of dialog for placing chickens in buildings. Remove chicken in hen house bug by not allowing chickens in hen houses.
Simon Cross <hodgestar@gmail.com>
parents:
109
diff
changeset
|
1046 if chicken.outside(): |
2b2007e231da
Start of dialog for placing chickens in buildings. Remove chicken in hen house bug by not allowing chickens in hen houses.
Simon Cross <hodgestar@gmail.com>
parents:
109
diff
changeset
|
1047 self.tv.sprites.append(chicken) |
424
fbef17cab632
Use fully rendered map in gameboard choosing screen
Neil Muller <drnlmuller@gmail.com>
parents:
422
diff
changeset
|
1048 if self.disp: |
fbef17cab632
Use fully rendered map in gameboard choosing screen
Neil Muller <drnlmuller@gmail.com>
parents:
422
diff
changeset
|
1049 self.toolbar.update_chicken_counter(len(self.chickens)) |
25
6d6ab0c1479d
Add placing some chickens and foxes
Neil Muller <drnlmuller@gmail.com>
parents:
24
diff
changeset
|
1050 |
6d6ab0c1479d
Add placing some chickens and foxes
Neil Muller <drnlmuller@gmail.com>
parents:
24
diff
changeset
|
1051 def add_fox(self, fox): |
116
d539ef5a3333
Add basic chicken->egg cycle
Neil Muller <drnlmuller@gmail.com>
parents:
115
diff
changeset
|
1052 self.foxes.add(fox) |
25
6d6ab0c1479d
Add placing some chickens and foxes
Neil Muller <drnlmuller@gmail.com>
parents:
24
diff
changeset
|
1053 self.tv.sprites.append(fox) |
29 | 1054 |
64
99fbb652ce8d
Refactor buildings so that new ones can be added just by adding a class to buildings.py.
Simon Cross <hodgestar@gmail.com>
parents:
60
diff
changeset
|
1055 def add_building(self, building): |
444
feb9b7a23ef2
Support for saving and loading games (toolbar entries commented out for lack of space).
Simon Cross <hodgestar@gmail.com>
parents:
434
diff
changeset
|
1056 self.buildings.add(building) |
381
7a58dadfd251
little cleanups, every sprite in its proper layer.
Jeremy Thurgood <firxen@gmail.com>
parents:
380
diff
changeset
|
1057 self.tv.sprites.append(building, layer='buildings') |
60
e2631c8e2cd6
Implement guard towers (with temporary sprite PNG).
Simon Cross <hodgestar@gmail.com>
parents:
57
diff
changeset
|
1058 |
419
d110d55c8449
Move hatching logic into chickens.
Jeremy Thurgood <firxen@gmail.com>
parents:
414
diff
changeset
|
1059 def place_hatched_chicken(self, new_chick, building): |
d110d55c8449
Move hatching logic into chickens.
Jeremy Thurgood <firxen@gmail.com>
parents:
414
diff
changeset
|
1060 try: |
d110d55c8449
Move hatching logic into chickens.
Jeremy Thurgood <firxen@gmail.com>
parents:
414
diff
changeset
|
1061 building.add_occupant(new_chick) |
d110d55c8449
Move hatching logic into chickens.
Jeremy Thurgood <firxen@gmail.com>
parents:
414
diff
changeset
|
1062 self.add_chicken(new_chick) |
d110d55c8449
Move hatching logic into chickens.
Jeremy Thurgood <firxen@gmail.com>
parents:
414
diff
changeset
|
1063 new_chick.equip(equipment.Nest()) |
536
1a224ba50edf
Correctly set the position of newly hatched chickens in buildings
Neil Muller <drnlmuller@gmail.com>
parents:
530
diff
changeset
|
1064 new_chick.set_pos(new_chick.abode.get_pos()) |
419
d110d55c8449
Move hatching logic into chickens.
Jeremy Thurgood <firxen@gmail.com>
parents:
414
diff
changeset
|
1065 except buildings.BuildingFullError: |
d110d55c8449
Move hatching logic into chickens.
Jeremy Thurgood <firxen@gmail.com>
parents:
414
diff
changeset
|
1066 # No space in the hen house, look nearby |
d110d55c8449
Move hatching logic into chickens.
Jeremy Thurgood <firxen@gmail.com>
parents:
414
diff
changeset
|
1067 for tile_pos in building.adjacent_tiles(): |
d110d55c8449
Move hatching logic into chickens.
Jeremy Thurgood <firxen@gmail.com>
parents:
414
diff
changeset
|
1068 if self.tv.get(tile_pos) != self.GRASSLAND: |
d110d55c8449
Move hatching logic into chickens.
Jeremy Thurgood <firxen@gmail.com>
parents:
414
diff
changeset
|
1069 continue |
d110d55c8449
Move hatching logic into chickens.
Jeremy Thurgood <firxen@gmail.com>
parents:
414
diff
changeset
|
1070 if self.get_outside_chicken(tile_pos) is None: |
d110d55c8449
Move hatching logic into chickens.
Jeremy Thurgood <firxen@gmail.com>
parents:
414
diff
changeset
|
1071 self.add_chicken(new_chick) |
d110d55c8449
Move hatching logic into chickens.
Jeremy Thurgood <firxen@gmail.com>
parents:
414
diff
changeset
|
1072 self.relocate_animal(new_chick, tile_pos=tile_pos) |
d110d55c8449
Move hatching logic into chickens.
Jeremy Thurgood <firxen@gmail.com>
parents:
414
diff
changeset
|
1073 break |
d110d55c8449
Move hatching logic into chickens.
Jeremy Thurgood <firxen@gmail.com>
parents:
414
diff
changeset
|
1074 # if there isn't a space for the |
d110d55c8449
Move hatching logic into chickens.
Jeremy Thurgood <firxen@gmail.com>
parents:
414
diff
changeset
|
1075 # new chick it dies. :/ Farm life |
d110d55c8449
Move hatching logic into chickens.
Jeremy Thurgood <firxen@gmail.com>
parents:
414
diff
changeset
|
1076 # is cruel. |
116
d539ef5a3333
Add basic chicken->egg cycle
Neil Muller <drnlmuller@gmail.com>
parents:
115
diff
changeset
|
1077 |
84 | 1078 def kill_fox(self, fox): |
251
844bfb23d4b6
Refactored animal death and added death animations.
Jeremy Thurgood <firxen@gmail.com>
parents:
247
diff
changeset
|
1079 self.killed_foxes += 1 |
844bfb23d4b6
Refactored animal death and added death animations.
Jeremy Thurgood <firxen@gmail.com>
parents:
247
diff
changeset
|
1080 self.toolbar.update_fox_counter(self.killed_foxes) |
389
463802281182
Add basic level support (level choosing needs work)
Neil Muller <drnlmuller@gmail.com>
parents:
382
diff
changeset
|
1081 self.add_cash(self.level.sell_price_dead_fox) |
251
844bfb23d4b6
Refactored animal death and added death animations.
Jeremy Thurgood <firxen@gmail.com>
parents:
247
diff
changeset
|
1082 self.remove_fox(fox) |
84 | 1083 |
29 | 1084 def remove_fox(self, fox): |
456
96dbf2c8506e
Factor position cache out into its own class, make Position more useful.
Jeremy Thurgood <firxen@gmail.com>
parents:
453
diff
changeset
|
1085 self._pos_cache.remove(fox.pos, 'fox') |
116
d539ef5a3333
Add basic chicken->egg cycle
Neil Muller <drnlmuller@gmail.com>
parents:
115
diff
changeset
|
1086 self.foxes.discard(fox) |
397
532f1ea476ff
Make foxes enter buildings, with a seperate count for them
Neil Muller <drnlmuller@gmail.com>
parents:
396
diff
changeset
|
1087 if fox.building: |
532f1ea476ff
Make foxes enter buildings, with a seperate count for them
Neil Muller <drnlmuller@gmail.com>
parents:
396
diff
changeset
|
1088 fox.building.remove_predator(fox) |
116
d539ef5a3333
Add basic chicken->egg cycle
Neil Muller <drnlmuller@gmail.com>
parents:
115
diff
changeset
|
1089 if fox in self.tv.sprites: |
29 | 1090 self.tv.sprites.remove(fox) |
1091 | |
1092 def remove_chicken(self, chick): | |
472
67574723427e
Partially working (but much less crashy) multiple select support
Neil Muller <drnlmuller@gmail.com>
parents:
470
diff
changeset
|
1093 if chick in self.selected_chickens: |
67574723427e
Partially working (but much less crashy) multiple select support
Neil Muller <drnlmuller@gmail.com>
parents:
470
diff
changeset
|
1094 self.unselect_animal(chick) |
116
d539ef5a3333
Add basic chicken->egg cycle
Neil Muller <drnlmuller@gmail.com>
parents:
115
diff
changeset
|
1095 self.chickens.discard(chick) |
243
4f86c2616cdf
Variable number of eggs for chickens
Neil Muller <drnlmuller@gmail.com>
parents:
241
diff
changeset
|
1096 self.eggs -= chick.get_num_eggs() |
4f86c2616cdf
Variable number of eggs for chickens
Neil Muller <drnlmuller@gmail.com>
parents:
241
diff
changeset
|
1097 self.toolbar.update_egg_counter(self.eggs) |
118
2c76ed47fc44
Remove chicken respawn at day start. Handle eaten chickens in henhouses better
Neil Muller <drnlmuller@gmail.com>
parents:
116
diff
changeset
|
1098 if chick.abode: |
125 | 1099 chick.abode.clear_occupant() |
116
d539ef5a3333
Add basic chicken->egg cycle
Neil Muller <drnlmuller@gmail.com>
parents:
115
diff
changeset
|
1100 self.toolbar.update_chicken_counter(len(self.chickens)) |
144
a9b800b4175e
Add define for henhouses & egg laying.
Neil Muller <drnlmuller@gmail.com>
parents:
139
diff
changeset
|
1101 if chick in self.tv.sprites and chick.outside(): |
a9b800b4175e
Add define for henhouses & egg laying.
Neil Muller <drnlmuller@gmail.com>
parents:
139
diff
changeset
|
1102 self.tv.sprites.remove(chick) |
456
96dbf2c8506e
Factor position cache out into its own class, make Position more useful.
Jeremy Thurgood <firxen@gmail.com>
parents:
453
diff
changeset
|
1103 self._pos_cache.remove(chick.pos, 'chicken') |
40
678421bd58ee
Money counter with very ugly display hack.
Jeremy Thurgood <firxen@gmail.com>
parents:
39
diff
changeset
|
1104 |
65
7e9c8ad06d32
Implement building selling.
Simon Cross <hodgestar@gmail.com>
parents:
64
diff
changeset
|
1105 def remove_building(self, building): |
7e9c8ad06d32
Implement building selling.
Simon Cross <hodgestar@gmail.com>
parents:
64
diff
changeset
|
1106 if building in self.buildings: |
444
feb9b7a23ef2
Support for saving and loading games (toolbar entries commented out for lack of space).
Simon Cross <hodgestar@gmail.com>
parents:
434
diff
changeset
|
1107 self.buildings.discard(building) |
381
7a58dadfd251
little cleanups, every sprite in its proper layer.
Jeremy Thurgood <firxen@gmail.com>
parents:
380
diff
changeset
|
1108 self.tv.sprites.remove(building, layer='buildings') |
65
7e9c8ad06d32
Implement building selling.
Simon Cross <hodgestar@gmail.com>
parents:
64
diff
changeset
|
1109 |
40
678421bd58ee
Money counter with very ugly display hack.
Jeremy Thurgood <firxen@gmail.com>
parents:
39
diff
changeset
|
1110 def add_cash(self, amount): |
678421bd58ee
Money counter with very ugly display hack.
Jeremy Thurgood <firxen@gmail.com>
parents:
39
diff
changeset
|
1111 self.cash += amount |
678421bd58ee
Money counter with very ugly display hack.
Jeremy Thurgood <firxen@gmail.com>
parents:
39
diff
changeset
|
1112 self.toolbar.update_cash_counter(self.cash) |
67
9171d9b9ab35
Sanity check and fix up buildings on map after loading.
Simon Cross <hodgestar@gmail.com>
parents:
66
diff
changeset
|
1113 |
422
ab4fc3fe0f96
chickens scatter; chop wood
Adrianna Pińska <adrianna.pinska@gmail.com>
parents:
421
diff
changeset
|
1114 def add_wood(self, planks): |
ab4fc3fe0f96
chickens scatter; chop wood
Adrianna Pińska <adrianna.pinska@gmail.com>
parents:
421
diff
changeset
|
1115 self.wood += planks |
ab4fc3fe0f96
chickens scatter; chop wood
Adrianna Pińska <adrianna.pinska@gmail.com>
parents:
421
diff
changeset
|
1116 self.toolbar.update_wood_counter(self.wood) |
ab4fc3fe0f96
chickens scatter; chop wood
Adrianna Pińska <adrianna.pinska@gmail.com>
parents:
421
diff
changeset
|
1117 |
408
02a6de5629d6
Levels can include starting equipment
Neil Muller <drnlmuller@gmail.com>
parents:
405
diff
changeset
|
1118 def add_start_chickens(self, _map, tile, value): |
382
e89e6ad011ac
Use code layer to place chickens
Neil Muller <drnlmuller@gmail.com>
parents:
381
diff
changeset
|
1119 """Add chickens as specified by the code layer""" |
476
3dae0fc14009
Animals have their own gameboard references instead of lugging them around in params all the time.
Jeremy Thurgood <firxen@gmail.com>
parents:
475
diff
changeset
|
1120 chick = animal.Chicken((tile.tx, tile.ty), self) |
408
02a6de5629d6
Levels can include starting equipment
Neil Muller <drnlmuller@gmail.com>
parents:
405
diff
changeset
|
1121 for equip_cls in equipment.EQUIP_MAP[value]: |
02a6de5629d6
Levels can include starting equipment
Neil Muller <drnlmuller@gmail.com>
parents:
405
diff
changeset
|
1122 item = equip_cls() |
02a6de5629d6
Levels can include starting equipment
Neil Muller <drnlmuller@gmail.com>
parents:
405
diff
changeset
|
1123 chick.equip(item) |
382
e89e6ad011ac
Use code layer to place chickens
Neil Muller <drnlmuller@gmail.com>
parents:
381
diff
changeset
|
1124 self.add_chicken(chick) |
69
18db99fda6bd
Move spawing code from engine to gameboard - seems more natural.
Neil Muller <drnlmuller@gmail.com>
parents:
68
diff
changeset
|
1125 |
241
1a7000c8211c
Demolition foxes, including better fox selection.
Jeremy Thurgood <firxen@gmail.com>
parents:
239
diff
changeset
|
1126 def _choose_fox(self, (x, y)): |
389
463802281182
Add basic level support (level choosing needs work)
Neil Muller <drnlmuller@gmail.com>
parents:
382
diff
changeset
|
1127 fox_cls = misc.WeightedSelection(self.level.fox_weightings).choose() |
476
3dae0fc14009
Animals have their own gameboard references instead of lugging them around in params all the time.
Jeremy Thurgood <firxen@gmail.com>
parents:
475
diff
changeset
|
1128 return fox_cls((x, y), self) |
241
1a7000c8211c
Demolition foxes, including better fox selection.
Jeremy Thurgood <firxen@gmail.com>
parents:
239
diff
changeset
|
1129 |
69
18db99fda6bd
Move spawing code from engine to gameboard - seems more natural.
Neil Muller <drnlmuller@gmail.com>
parents:
68
diff
changeset
|
1130 def spawn_foxes(self): |
18db99fda6bd
Move spawing code from engine to gameboard - seems more natural.
Neil Muller <drnlmuller@gmail.com>
parents:
68
diff
changeset
|
1131 """The foxes come at night, and this is where they come from.""" |
73
f3ce3346e25e
Spawn foxes jsut outside the map
Neil Muller <drnlmuller@gmail.com>
parents:
69
diff
changeset
|
1132 # Foxes spawn just outside the map |
69
18db99fda6bd
Move spawing code from engine to gameboard - seems more natural.
Neil Muller <drnlmuller@gmail.com>
parents:
68
diff
changeset
|
1133 x, y = 0, 0 |
18db99fda6bd
Move spawing code from engine to gameboard - seems more natural.
Neil Muller <drnlmuller@gmail.com>
parents:
68
diff
changeset
|
1134 width, height = self.tv.size |
389
463802281182
Add basic level support (level choosing needs work)
Neil Muller <drnlmuller@gmail.com>
parents:
382
diff
changeset
|
1135 min_foxes = max(self.level.min_foxes, (self.days+3)/2) # always more than one fox |
323
978efd39a099
Limit maximum numbe of foxes generated
Neil Muller <drnlmuller@gmail.com>
parents:
320
diff
changeset
|
1136 new_foxes = min(random.randint(min_foxes, min_foxes*2), self.max_foxes) |
69
18db99fda6bd
Move spawing code from engine to gameboard - seems more natural.
Neil Muller <drnlmuller@gmail.com>
parents:
68
diff
changeset
|
1137 while len(self.foxes) < new_foxes: |
73
f3ce3346e25e
Spawn foxes jsut outside the map
Neil Muller <drnlmuller@gmail.com>
parents:
69
diff
changeset
|
1138 side = random.randint(0, 3) |
f3ce3346e25e
Spawn foxes jsut outside the map
Neil Muller <drnlmuller@gmail.com>
parents:
69
diff
changeset
|
1139 if side == 0: |
f3ce3346e25e
Spawn foxes jsut outside the map
Neil Muller <drnlmuller@gmail.com>
parents:
69
diff
changeset
|
1140 # top |
f3ce3346e25e
Spawn foxes jsut outside the map
Neil Muller <drnlmuller@gmail.com>
parents:
69
diff
changeset
|
1141 y = -1 |
f3ce3346e25e
Spawn foxes jsut outside the map
Neil Muller <drnlmuller@gmail.com>
parents:
69
diff
changeset
|
1142 x = random.randint(-1, width) |
f3ce3346e25e
Spawn foxes jsut outside the map
Neil Muller <drnlmuller@gmail.com>
parents:
69
diff
changeset
|
1143 elif side == 1: |
f3ce3346e25e
Spawn foxes jsut outside the map
Neil Muller <drnlmuller@gmail.com>
parents:
69
diff
changeset
|
1144 # bottom |
f3ce3346e25e
Spawn foxes jsut outside the map
Neil Muller <drnlmuller@gmail.com>
parents:
69
diff
changeset
|
1145 y = height |
f3ce3346e25e
Spawn foxes jsut outside the map
Neil Muller <drnlmuller@gmail.com>
parents:
69
diff
changeset
|
1146 x = random.randint(-1, width) |
f3ce3346e25e
Spawn foxes jsut outside the map
Neil Muller <drnlmuller@gmail.com>
parents:
69
diff
changeset
|
1147 elif side == 2: |
f3ce3346e25e
Spawn foxes jsut outside the map
Neil Muller <drnlmuller@gmail.com>
parents:
69
diff
changeset
|
1148 # left |
f3ce3346e25e
Spawn foxes jsut outside the map
Neil Muller <drnlmuller@gmail.com>
parents:
69
diff
changeset
|
1149 x = -1 |
f3ce3346e25e
Spawn foxes jsut outside the map
Neil Muller <drnlmuller@gmail.com>
parents:
69
diff
changeset
|
1150 y = random.randint(-1, height) |
69
18db99fda6bd
Move spawing code from engine to gameboard - seems more natural.
Neil Muller <drnlmuller@gmail.com>
parents:
68
diff
changeset
|
1151 else: |
73
f3ce3346e25e
Spawn foxes jsut outside the map
Neil Muller <drnlmuller@gmail.com>
parents:
69
diff
changeset
|
1152 x = width |
f3ce3346e25e
Spawn foxes jsut outside the map
Neil Muller <drnlmuller@gmail.com>
parents:
69
diff
changeset
|
1153 y = random.randint(-1, height) |
403
c7cfa230f5d4
Remove board size restriction on number of foxes
Neil Muller <drnlmuller@gmail.com>
parents:
401
diff
changeset
|
1154 self.add_fox(self._choose_fox((x, y))) |
69
18db99fda6bd
Move spawing code from engine to gameboard - seems more natural.
Neil Muller <drnlmuller@gmail.com>
parents:
68
diff
changeset
|
1155 |
67
9171d9b9ab35
Sanity check and fix up buildings on map after loading.
Simon Cross <hodgestar@gmail.com>
parents:
66
diff
changeset
|
1156 def fix_buildings(self): |
9171d9b9ab35
Sanity check and fix up buildings on map after loading.
Simon Cross <hodgestar@gmail.com>
parents:
66
diff
changeset
|
1157 """Go through the level map looking for buildings that haven't |
9171d9b9ab35
Sanity check and fix up buildings on map after loading.
Simon Cross <hodgestar@gmail.com>
parents:
66
diff
changeset
|
1158 been added to self.buildings and adding them. |
9171d9b9ab35
Sanity check and fix up buildings on map after loading.
Simon Cross <hodgestar@gmail.com>
parents:
66
diff
changeset
|
1159 |
9171d9b9ab35
Sanity check and fix up buildings on map after loading.
Simon Cross <hodgestar@gmail.com>
parents:
66
diff
changeset
|
1160 Where partial buildings exist (i.e. places where the building |
9171d9b9ab35
Sanity check and fix up buildings on map after loading.
Simon Cross <hodgestar@gmail.com>
parents:
66
diff
changeset
|
1161 cannot fit on the available tiles) the building is added anyway |
9171d9b9ab35
Sanity check and fix up buildings on map after loading.
Simon Cross <hodgestar@gmail.com>
parents:
66
diff
changeset
|
1162 to the top left corner. |
9171d9b9ab35
Sanity check and fix up buildings on map after loading.
Simon Cross <hodgestar@gmail.com>
parents:
66
diff
changeset
|
1163 |
9171d9b9ab35
Sanity check and fix up buildings on map after loading.
Simon Cross <hodgestar@gmail.com>
parents:
66
diff
changeset
|
1164 Could be a lot faster. |
9171d9b9ab35
Sanity check and fix up buildings on map after loading.
Simon Cross <hodgestar@gmail.com>
parents:
66
diff
changeset
|
1165 """ |
9171d9b9ab35
Sanity check and fix up buildings on map after loading.
Simon Cross <hodgestar@gmail.com>
parents:
66
diff
changeset
|
1166 tile_to_building = dict((b.TILE_NO, b) for b in buildings.BUILDINGS) |
9171d9b9ab35
Sanity check and fix up buildings on map after loading.
Simon Cross <hodgestar@gmail.com>
parents:
66
diff
changeset
|
1167 |
9171d9b9ab35
Sanity check and fix up buildings on map after loading.
Simon Cross <hodgestar@gmail.com>
parents:
66
diff
changeset
|
1168 w, h = self.tv.size |
9171d9b9ab35
Sanity check and fix up buildings on map after loading.
Simon Cross <hodgestar@gmail.com>
parents:
66
diff
changeset
|
1169 for x in xrange(w): |
9171d9b9ab35
Sanity check and fix up buildings on map after loading.
Simon Cross <hodgestar@gmail.com>
parents:
66
diff
changeset
|
1170 for y in xrange(h): |
9171d9b9ab35
Sanity check and fix up buildings on map after loading.
Simon Cross <hodgestar@gmail.com>
parents:
66
diff
changeset
|
1171 tile_pos = (x, y) |
9171d9b9ab35
Sanity check and fix up buildings on map after loading.
Simon Cross <hodgestar@gmail.com>
parents:
66
diff
changeset
|
1172 tile_no = self.tv.get(tile_pos) |
9171d9b9ab35
Sanity check and fix up buildings on map after loading.
Simon Cross <hodgestar@gmail.com>
parents:
66
diff
changeset
|
1173 if tile_no not in tile_to_building: |
9171d9b9ab35
Sanity check and fix up buildings on map after loading.
Simon Cross <hodgestar@gmail.com>
parents:
66
diff
changeset
|
1174 continue |
9171d9b9ab35
Sanity check and fix up buildings on map after loading.
Simon Cross <hodgestar@gmail.com>
parents:
66
diff
changeset
|
1175 |
9171d9b9ab35
Sanity check and fix up buildings on map after loading.
Simon Cross <hodgestar@gmail.com>
parents:
66
diff
changeset
|
1176 covered = False |
9171d9b9ab35
Sanity check and fix up buildings on map after loading.
Simon Cross <hodgestar@gmail.com>
parents:
66
diff
changeset
|
1177 for building in self.buildings: |
9171d9b9ab35
Sanity check and fix up buildings on map after loading.
Simon Cross <hodgestar@gmail.com>
parents:
66
diff
changeset
|
1178 if building.covers(tile_pos): |
9171d9b9ab35
Sanity check and fix up buildings on map after loading.
Simon Cross <hodgestar@gmail.com>
parents:
66
diff
changeset
|
1179 covered = True |
9171d9b9ab35
Sanity check and fix up buildings on map after loading.
Simon Cross <hodgestar@gmail.com>
parents:
66
diff
changeset
|
1180 break |
9171d9b9ab35
Sanity check and fix up buildings on map after loading.
Simon Cross <hodgestar@gmail.com>
parents:
66
diff
changeset
|
1181 |
9171d9b9ab35
Sanity check and fix up buildings on map after loading.
Simon Cross <hodgestar@gmail.com>
parents:
66
diff
changeset
|
1182 if covered: |
9171d9b9ab35
Sanity check and fix up buildings on map after loading.
Simon Cross <hodgestar@gmail.com>
parents:
66
diff
changeset
|
1183 continue |
9171d9b9ab35
Sanity check and fix up buildings on map after loading.
Simon Cross <hodgestar@gmail.com>
parents:
66
diff
changeset
|
1184 |
9171d9b9ab35
Sanity check and fix up buildings on map after loading.
Simon Cross <hodgestar@gmail.com>
parents:
66
diff
changeset
|
1185 building_cls = tile_to_building[tile_no] |
557
50d6c68ce267
Add gameboard to buildings. Update save version as this breaks old save games
Neil Muller <drnlmuller@gmail.com>
parents:
556
diff
changeset
|
1186 building = building_cls(tile_pos, self) |
50d6c68ce267
Add gameboard to buildings. Update save version as this breaks old save games
Neil Muller <drnlmuller@gmail.com>
parents:
556
diff
changeset
|
1187 building.remove() |
50d6c68ce267
Add gameboard to buildings. Update save version as this breaks old save games
Neil Muller <drnlmuller@gmail.com>
parents:
556
diff
changeset
|
1188 building.place() |
67
9171d9b9ab35
Sanity check and fix up buildings on map after loading.
Simon Cross <hodgestar@gmail.com>
parents:
66
diff
changeset
|
1189 self.add_building(building) |
139
1d73de63bd71
Add basic game over screen
Neil Muller <drnlmuller@gmail.com>
parents:
135
diff
changeset
|
1190 |
307
bf1df0902883
three game modes: fortnight, quarter, fox extinction
Adrianna Pińska <adrianna.pinska@gmail.com>
parents:
305
diff
changeset
|
1191 def trees_left(self): |
bf1df0902883
three game modes: fortnight, quarter, fox extinction
Adrianna Pińska <adrianna.pinska@gmail.com>
parents:
305
diff
changeset
|
1192 width, height = self.tv.size |
552
11c4cebfe4c5
Preparatory work for woodland biodiversity.
Jeremy Thurgood <firxen@gmail.com>
parents:
548
diff
changeset
|
1193 return len([(x,y) for x in range(width) for y in range(height) if self.is_woodland_tile(misc.Position(x,y))]) |
307
bf1df0902883
three game modes: fortnight, quarter, fox extinction
Adrianna Pińska <adrianna.pinska@gmail.com>
parents:
305
diff
changeset
|
1194 |
460 | 1195 def calculate_wood_groat_exchange_rate(self): |
461
279caa00f3fa
exchange rate should be per tree, not per plank
Adrianna Pińska <adrianna.pinska@gmail.com>
parents:
460
diff
changeset
|
1196 # per five planks |
460 | 1197 width, height = self.tv.size |
462
aba7f1439571
avoid division by zero
Adrianna Pińska <adrianna.pinska@gmail.com>
parents:
461
diff
changeset
|
1198 treesleft = max(1, self.trees_left()) |
aba7f1439571
avoid division by zero
Adrianna Pińska <adrianna.pinska@gmail.com>
parents:
461
diff
changeset
|
1199 sell_price = float(10*width*height)/treesleft |
460 | 1200 buy_price = sell_price*(1.1) |
1201 self.wood_sell_price, self.wood_buy_price = int(sell_price), int(buy_price) | |
1202 | |
496
bf90a2948e34
Basic snapshot support in save games added.
Simon Cross <hodgestar@gmail.com>
parents:
495
diff
changeset
|
1203 def snapshot(self, scale=0.25): |
bf90a2948e34
Basic snapshot support in save games added.
Simon Cross <hodgestar@gmail.com>
parents:
495
diff
changeset
|
1204 """Return a snapshot of the gameboard.""" |
bf90a2948e34
Basic snapshot support in save games added.
Simon Cross <hodgestar@gmail.com>
parents:
495
diff
changeset
|
1205 w, h = self.disp.screen.get_size() |
497
a2824eb2474e
Only include top widget when creating snapshot.
Simon Cross <hodgestar@gmail.com>
parents:
496
diff
changeset
|
1206 snap_w, snap_h = int(w * scale), int(h * scale) |
a2824eb2474e
Only include top widget when creating snapshot.
Simon Cross <hodgestar@gmail.com>
parents:
496
diff
changeset
|
1207 dummy_screen = pygame.surface.Surface((w, h), 0, self.disp.screen) |
a2824eb2474e
Only include top widget when creating snapshot.
Simon Cross <hodgestar@gmail.com>
parents:
496
diff
changeset
|
1208 top_widget = self.get_top_widget() |
a2824eb2474e
Only include top widget when creating snapshot.
Simon Cross <hodgestar@gmail.com>
parents:
496
diff
changeset
|
1209 |
a2824eb2474e
Only include top widget when creating snapshot.
Simon Cross <hodgestar@gmail.com>
parents:
496
diff
changeset
|
1210 top_widget.paint(dummy_screen) |
a2824eb2474e
Only include top widget when creating snapshot.
Simon Cross <hodgestar@gmail.com>
parents:
496
diff
changeset
|
1211 snapshot = pygame.transform.smoothscale(dummy_screen, (snap_w, snap_h)) |
496
bf90a2948e34
Basic snapshot support in save games added.
Simon Cross <hodgestar@gmail.com>
parents:
495
diff
changeset
|
1212 return snapshot |
bf90a2948e34
Basic snapshot support in save games added.
Simon Cross <hodgestar@gmail.com>
parents:
495
diff
changeset
|
1213 |
444
feb9b7a23ef2
Support for saving and loading games (toolbar entries commented out for lack of space).
Simon Cross <hodgestar@gmail.com>
parents:
434
diff
changeset
|
1214 def save_game(self): |
463
e3408c803b12
Save and restore tilevid when loading / saving games.
Simon Cross <hodgestar@gmail.com>
parents:
462
diff
changeset
|
1215 # clear selected animals and tool states before saving |
e3408c803b12
Save and restore tilevid when loading / saving games.
Simon Cross <hodgestar@gmail.com>
parents:
462
diff
changeset
|
1216 self.reset_states() |
444
feb9b7a23ef2
Support for saving and loading games (toolbar entries commented out for lack of space).
Simon Cross <hodgestar@gmail.com>
parents:
434
diff
changeset
|
1217 return serializer.simplify(self) |
feb9b7a23ef2
Support for saving and loading games (toolbar entries commented out for lack of space).
Simon Cross <hodgestar@gmail.com>
parents:
434
diff
changeset
|
1218 |
512
b112bcf4d435
Add restore game button to main menu.
Simon Cross <hodgestar@gmail.com>
parents:
506
diff
changeset
|
1219 @staticmethod |
b112bcf4d435
Add restore game button to main menu.
Simon Cross <hodgestar@gmail.com>
parents:
506
diff
changeset
|
1220 def restore_game(gameboard): |
566
a8dde729000a
Add 'Save and Quit' option to quit dialog. Move game events from engine to constants to ease 'import engine' fun
Neil Muller <drnlmuller@gmail.com>
parents:
565
diff
changeset
|
1221 pygame.event.post(pygame.event.Event(constants.DO_LOAD_SAVEGAME, gameboard=gameboard)) |
444
feb9b7a23ef2
Support for saving and loading games (toolbar entries commented out for lack of space).
Simon Cross <hodgestar@gmail.com>
parents:
434
diff
changeset
|
1222 |
326
89f51d513606
Add TextDialog class and use it to warn about selling your last chicken.
Simon Cross <hodgestar@gmail.com>
parents:
325
diff
changeset
|
1223 |
89f51d513606
Add TextDialog class and use it to warn about selling your last chicken.
Simon Cross <hodgestar@gmail.com>
parents:
325
diff
changeset
|
1224 class TextDialog(gui.Dialog): |
89f51d513606
Add TextDialog class and use it to warn about selling your last chicken.
Simon Cross <hodgestar@gmail.com>
parents:
325
diff
changeset
|
1225 def __init__(self, title, text, **params): |
89f51d513606
Add TextDialog class and use it to warn about selling your last chicken.
Simon Cross <hodgestar@gmail.com>
parents:
325
diff
changeset
|
1226 title_label = gui.Label(title) |
89f51d513606
Add TextDialog class and use it to warn about selling your last chicken.
Simon Cross <hodgestar@gmail.com>
parents:
325
diff
changeset
|
1227 |
89f51d513606
Add TextDialog class and use it to warn about selling your last chicken.
Simon Cross <hodgestar@gmail.com>
parents:
325
diff
changeset
|
1228 doc = gui.Document() |
89f51d513606
Add TextDialog class and use it to warn about selling your last chicken.
Simon Cross <hodgestar@gmail.com>
parents:
325
diff
changeset
|
1229 |
89f51d513606
Add TextDialog class and use it to warn about selling your last chicken.
Simon Cross <hodgestar@gmail.com>
parents:
325
diff
changeset
|
1230 space = doc.style.font.size(" ") |
89f51d513606
Add TextDialog class and use it to warn about selling your last chicken.
Simon Cross <hodgestar@gmail.com>
parents:
325
diff
changeset
|
1231 |
89f51d513606
Add TextDialog class and use it to warn about selling your last chicken.
Simon Cross <hodgestar@gmail.com>
parents:
325
diff
changeset
|
1232 for paragraph in text.split('\n\n'): |
89f51d513606
Add TextDialog class and use it to warn about selling your last chicken.
Simon Cross <hodgestar@gmail.com>
parents:
325
diff
changeset
|
1233 doc.block(align=-1) |
89f51d513606
Add TextDialog class and use it to warn about selling your last chicken.
Simon Cross <hodgestar@gmail.com>
parents:
325
diff
changeset
|
1234 for word in paragraph.split(): |
89f51d513606
Add TextDialog class and use it to warn about selling your last chicken.
Simon Cross <hodgestar@gmail.com>
parents:
325
diff
changeset
|
1235 doc.add(gui.Label(word)) |
89f51d513606
Add TextDialog class and use it to warn about selling your last chicken.
Simon Cross <hodgestar@gmail.com>
parents:
325
diff
changeset
|
1236 doc.space(space) |
89f51d513606
Add TextDialog class and use it to warn about selling your last chicken.
Simon Cross <hodgestar@gmail.com>
parents:
325
diff
changeset
|
1237 doc.br(space[1]) |
89f51d513606
Add TextDialog class and use it to warn about selling your last chicken.
Simon Cross <hodgestar@gmail.com>
parents:
325
diff
changeset
|
1238 doc.br(space[1]) |
89f51d513606
Add TextDialog class and use it to warn about selling your last chicken.
Simon Cross <hodgestar@gmail.com>
parents:
325
diff
changeset
|
1239 |
89f51d513606
Add TextDialog class and use it to warn about selling your last chicken.
Simon Cross <hodgestar@gmail.com>
parents:
325
diff
changeset
|
1240 done_button = gui.Button("Close") |
89f51d513606
Add TextDialog class and use it to warn about selling your last chicken.
Simon Cross <hodgestar@gmail.com>
parents:
325
diff
changeset
|
1241 done_button.connect(gui.CLICK, self.close) |
89f51d513606
Add TextDialog class and use it to warn about selling your last chicken.
Simon Cross <hodgestar@gmail.com>
parents:
325
diff
changeset
|
1242 |
89f51d513606
Add TextDialog class and use it to warn about selling your last chicken.
Simon Cross <hodgestar@gmail.com>
parents:
325
diff
changeset
|
1243 tbl = gui.Table() |
89f51d513606
Add TextDialog class and use it to warn about selling your last chicken.
Simon Cross <hodgestar@gmail.com>
parents:
325
diff
changeset
|
1244 tbl.tr() |
89f51d513606
Add TextDialog class and use it to warn about selling your last chicken.
Simon Cross <hodgestar@gmail.com>
parents:
325
diff
changeset
|
1245 tbl.td(doc) |
89f51d513606
Add TextDialog class and use it to warn about selling your last chicken.
Simon Cross <hodgestar@gmail.com>
parents:
325
diff
changeset
|
1246 tbl.tr() |
89f51d513606
Add TextDialog class and use it to warn about selling your last chicken.
Simon Cross <hodgestar@gmail.com>
parents:
325
diff
changeset
|
1247 tbl.td(done_button, align=1) |
89f51d513606
Add TextDialog class and use it to warn about selling your last chicken.
Simon Cross <hodgestar@gmail.com>
parents:
325
diff
changeset
|
1248 |
89f51d513606
Add TextDialog class and use it to warn about selling your last chicken.
Simon Cross <hodgestar@gmail.com>
parents:
325
diff
changeset
|
1249 gui.Dialog.__init__(self, title_label, tbl, **params) |
336 | 1250 |
1251 |