Commit graph

117 commits

Author SHA1 Message Date
6f1d68db20 Update the logging config 2022-05-12 08:46:59 -07:00
e9db004a7a Add Point.euclidean_distance_to()
Does what it says on the tin.
2022-05-12 08:46:45 -07:00
99ca090448 Remove a newline 2022-05-11 08:08:47 -07:00
a4adbcca85 Add RenderOrder to Entity
This enum dictates what order an entity
will be rendered in.
2022-05-11 07:59:54 -07:00
7820adf057 Generate entities in rooms at different locations
Prior to this change, entities in rooms would always be spawned on the
same tile.
2022-05-11 07:57:28 -07:00
c9b86271d3 Remove these two logging messages
They aren't serving a good purpose.
2022-05-11 07:55:47 -07:00
2762933c83 Configure logging with logging_config.json
See https://docs.python.org/3/library/logging.config.html for details on
the schema for this file.
2022-05-11 07:52:35 -07:00
8849a9de73 Allow 'hp' as a valid variable name 2022-05-11 07:50:35 -07:00
bc46856117 Every action needs an actor, even ExitAction 2022-05-08 23:45:20 -07:00
17bad9fd4d Don't try to Melee entities that don't block movement 2022-05-08 23:43:33 -07:00
7d871e52a9 Copy the entities set into a list before iterating it so there's no risk of modifying the array while iterating 2022-05-08 23:43:08 -07:00
cef1ad25cb Small cleanup of log statement 2022-05-08 23:42:36 -07:00
c0c8584f45 Implement is_adjacent_to and direction_to_adjacent_point on Point 2022-05-08 23:42:24 -07:00
2266511ec5 Implement attacking and reducing hit points
Attacks are computed with attack_power and defense. When an Actor dies,
a DieAction is produced and possibly also a DropItemAction.
2022-05-08 23:41:54 -07:00
aae1251660 Rename Action.entity -> Action.actor 2022-05-08 23:40:33 -07:00
b604ff30ec Implement a basic AI for HostileMonster
This AI will walk randomly around the dungeon (pausing periodically) and
if the Hero comes into view, will b-line and attack
2022-05-08 23:38:48 -07:00
1f750a0c7c Add an Item subclass of Entity for instances of items on the map 2022-05-08 23:37:31 -07:00
e8b2729353 Add blocks_movement to the Entity class 2022-05-08 23:36:56 -07:00
a13ef89832 Add an Item type class and a Corpse item type 2022-05-08 23:36:13 -07:00
021b82c93a Add an Actor subclass of Entity
Make Hero and Monster subclasses of Actor
2022-05-08 23:35:47 -07:00
7653df1e3f Add Action.success() and Action.failure() helper methods to produce results for straight success and failure 2022-05-08 23:34:09 -07:00
46e1a42060 Let Entity.ai produce its own Actions! 2022-05-08 10:03:28 -07:00
6bb5d819bf Lots of comment and type documentation in object.py 2022-05-08 09:56:21 -07:00
e1562b2b2b Add a Fighter component to the Hero 2022-05-08 09:55:56 -07:00
ee0e4b1dba Instantiate Monsters with a HostileEnemy AI 2022-05-08 09:55:10 -07:00
550cde6a8f Allow "ai" as a variable name 2022-05-08 09:54:24 -07:00
687511d69e Add an ai attribute to Entity 2022-05-08 09:54:08 -07:00
49b48ec7a8 Add a HostileEnemy AI component 2022-05-08 09:48:22 -07:00
cf9ec2d17e Move Monster to the object module 2022-05-08 09:48:05 -07:00
cf0b120fad Add a Fighter component that tracks hit points, attack power, defense, etc 2022-05-08 09:46:32 -07:00
f5a8a55182 Add WaitAction to the class hierarchy 2022-05-08 08:55:08 -07:00
a9ebc38078 Update the Makefile to use .venv as the virtual env directory 2022-05-08 08:54:54 -07:00
4f7e477b24 Add a WaitAction and trigger it with . 2022-05-07 22:34:43 -07:00
85423e739c Remove the shbang from map.py 2022-05-07 17:44:30 -07:00
eea49ed3c1 Resolve all the pylint warnings in geometry 2022-05-07 12:37:35 -07:00
427e7c8e84 Remove some unused imports 2022-05-07 12:28:02 -07:00
8b3c0137a5 Refactor event handling into EventHandler
Move all the event handling code from Engine to EventHandler. EventHandler has a
reference to Engine and can deal with entities from its methods.

Refactor Action to take an optional Entity in its initializer. Some actions
don't require an Entity, but many do/will.
2022-05-07 12:25:46 -07:00
d75c9faea3 Little bits of cleanup 2022-05-07 12:25:44 -07:00
15e188b9f2 Convert the keysym matching to match/case from if/elif 2022-05-07 11:57:08 -07:00
7b747fb4d3 Doc comments and stuff 2022-05-07 11:56:55 -07:00
54568d70c2 Add a sight_radius parameter to the Species dataclass 2022-05-07 11:43:02 -07:00
04aa61fe4b Doc strings and import reordering per pylint 2022-05-07 11:42:48 -07:00
d0a2e2c2ef Clean up imports and terminal newlines in files according to pylint 2022-05-07 11:22:54 -07:00
372cd5f295 Generate a .pylintrc and tweak it slightly for this project 2022-05-07 11:20:57 -07:00
3510bab79a Document return value of MapGenerator.generate 2022-05-07 11:20:41 -07:00
4002b64640 Attack!!!
Refactor MovePlayerAction into a few different Action subclasses. Move direction
to a parent MoveAction, and create three new subclasses of MoveAction:

    - BumpAction: perform the test that an action can be performed in the given direction
    - WalkAction, take a step in the given direction
    - MeleeAction, attack another Entity in the given direction

Add an ActionResult class that communicates the result of performing an Action.

    - ActionResult.succeeded indicates whether the action succeeded.
    - ActionResult.done indicates if the action is fully complete or requires followup.
    - ActionResult.alternate specifies the follow-up action to perform.

Convert all the key handling actions to BumpActions.

In the Engine's event handler method, loop until an action is completed,
performing specified alternate actions until the result object indicates the
action is done.
2022-05-07 11:16:17 -07:00
57bbb2c3fc Some more fixes from the linter 2022-05-07 09:57:39 -07:00
7720bc525a Address some linter issues; add doc strings
- Clean up some import ordering
- Write some Numpy style doc strings for classes and functions
2022-05-07 08:55:10 -07:00
f3d5e273db Remove this unimplemented method 2022-05-07 08:54:46 -07:00
16b4b64099 Clean up the logging; use % formats instead of f-strings 2022-05-07 08:53:58 -07:00