Commit graph

95 commits

Author SHA1 Message Date
e2553cca3b Clean up RoomGenerator.Configuration 2023-03-04 11:08:11 -08:00
b9c45f44b2 Clean up the doc comment on Entity 2023-03-04 11:07:32 -08:00
a83b85b7a0 Add one stray import to map.generator.room 2023-02-20 18:02:21 -08:00
a542bb956a Add CellularAtomataMapGenerator
First pass at a cellular atomata map generator.

Add map.grid and a make_grid function to make it easier to make
numpy arrays for Map purposes.

Add ca.py to test the generator.
2023-02-20 18:02:01 -08:00
be7198b16d Update the doc string of Rect.inset_rect 2023-02-20 18:00:41 -08:00
6aefff838d Implement Rect.__contains__ on a Point
Returns True if the Rect contains the point.
2023-02-20 18:00:29 -08:00
b8e7e3d059 Clean up log module documentation 2023-02-20 17:11:55 -08:00
09480e7499 Fix up some imports in map.room 2023-02-19 19:13:31 -08:00
706a244382 Fix up some imports in map.generator.room 2023-02-19 19:13:19 -08:00
445c600bf9 Add a doc string to Rect.corners 2023-02-19 19:08:32 -08:00
22ad73af0b Fix Rect.corners based on the unit test 2023-02-19 19:06:24 -08:00
47014d4e6e Move field of view updates to Map.update_field_of_view 2023-02-19 18:37:14 -08:00
9bd287dc9f Add Map.__str__ 2023-02-19 18:34:59 -08:00
21c3b5d94f Small bit of reformatting and type checking 2023-02-19 18:22:45 -08:00
64844d124b A couple fixes in items.py
Reformat the items in items.py
Fix the type declaration of Item.background_color
2023-02-18 22:57:37 -08:00
37ffa423b6 Pass the whole Map into MapGenerator.generate 2023-02-18 22:55:20 -08:00
7428d95126 Fix the implementation of Point.is_adjacent_to 2023-02-18 22:51:58 -08:00
06d34a527b Add Point.manhattan_distance_to
Returns the manhattan distance to another Point.
2023-02-18 22:51:42 -08:00
462eebd95c Add Rect.corners
An iterator over the corners of the rectangle
2023-02-18 22:51:19 -08:00
d5e8891545 Add back some imports to map/room.py 2023-02-15 08:36:43 -08:00
4050ac5c6f Add a bunch of doc strings and header comments to files 2023-02-15 08:25:40 -08:00
633580e27a Add Rect.edges
Iterates the minimum and maximum x and y edges for the Rect.
2023-02-15 08:22:32 -08:00
e6c4717e80 Let the Hero specify its own sight radius 2023-02-15 08:21:49 -08:00
77fc9467bc Fix accidentally breaking QuitAction
When I added some type safety to Engine.process_input_action, I just
dropped any action without an actor.
2023-02-12 19:48:45 -08:00
356e205f2c Implement viewport tracking for the MapWindow
As the player moves the hero, the MapWindow will try to keep the
hero in the middle of the view.
2023-02-12 19:47:27 -08:00
402e910915 Add Map.bounds 2023-02-12 19:45:12 -08:00
0a6ff23dcd Bigger maps! 2023-02-12 19:44:52 -08:00
b5f25822df Add a UI log 2023-02-12 19:44:41 -08:00
36206b5cc0 Clean up __add__ on Point; add __sub__
The dunder add method only ever had one overload, so you don't need to
declare an overload
2023-02-12 19:44:28 -08:00
7e00f58a40 Refactor Action into Action and ActionWithActor
The base class Actor doesn't declare a (optional) actor attribute.
The ActionWithActor has a non-optional actor attribute.

This makes the type checker happier, and means we can have some actions
that don't have actors.
2023-02-12 16:34:37 -08:00
8efd3ce207 Refactor map rendering
- Move all map rendering to a new MapWindow class
- Clip map rendering to the bounds of the Window
- Pass in Entities list from the Engine and render them relative to the window

The map doesn't scroll yet, so it'll always be clipped on the bottom and
right.
2023-02-12 15:55:01 -08:00
ec28f984da Add a couple geometry methods
- Vector.from_point to convert a point to a vector
- Rect.width and Rect.height convenience properties
2023-02-12 15:52:26 -08:00
b0b75f7e76 Use RandomRect room generator and Elbow corridor generator for the map 2023-02-12 14:32:32 -08:00
8aa329d368 Increase sight radius to 30 (from 8) 2023-02-12 14:30:53 -08:00
1aa6d14540 Fix some type checker errors by moving an assert above where the property is accessed 2023-02-12 14:30:40 -08:00
a709f3fba5 Detect when Shift is pressed and don't return a WaitAction when Shift+. is pressed 2023-02-12 14:29:45 -08:00
d8275725b8 Allow many more (30) attempts at generating a random rect for the RandomRectRoomGenerator 2023-02-12 14:28:42 -08:00
cf31bcc272 Create a more semantic Size.numpy_shape property 2023-02-12 14:28:14 -08:00
84f7bdb947 Little grammar fix in RenderOrder's doc comment 2023-02-12 14:24:56 -08:00
06ae79ccd0 Redo the configuration metchanism
- Allow passing a font on the command line via --font
- Move the engine configuration to its own module
- Redo entirely the font configuration: move it to the configuration module
- Pass the configuration object to the Map in place of the size argument
2023-02-12 14:24:36 -08:00
6780b0495c Move all the interface stuff to interface.Interface
Draw three windows with frames:
- map window
- info window (hit point bar; turn count)
- message window

Clean up the UI code in the Engine.
2023-02-11 01:21:52 -08:00
df4df06013 Fix this import in ai.py 2023-02-10 22:37:26 -08:00
2f9864edd8 Start the hero on the down stairs of the level 2023-02-10 22:37:26 -08:00
6c9d01771f Draw a path from the hero to the current mouse point
Add a highlight grid to Map, with locations set to True if that point should be
drawn with a "highlight" treatment.

Add the highlight graphic_dtype to all Tiles.
2023-02-10 22:37:21 -08:00
f05dfdef55 PEP8 formatter changes 2023-02-10 21:25:00 -08:00
727a0737c6 Use integer division for Rect.mid_y and Rect.mid_x 2023-02-10 21:13:49 -08:00
7b0b7ff5b6 Add Rect.intersects 2023-02-10 21:13:31 -08:00
0d0c5a2b35 Remove this unused DefaultConfiguration class variable 2023-02-10 21:13:16 -08:00
85b059dbd4 Add two new room generators
- OneBigRoomGenerator
- RandomRectRoomGenerator
2023-02-10 21:12:42 -08:00
9d00f3b638 Promote BSPRoomGenerator.Configuration to RoomGenerator.Configuration
This configuration object can actually apply to all room generators.

Notably: copy the default configuration object before setting it to self.configuration.
2023-02-10 21:12:12 -08:00