Add package loading so not everything is defined in __main__ anymore

Signed-off-by: Alek Ratzloff <alekratz@gmail.com>
This commit is contained in:
2021-11-18 12:15:35 -08:00
parent dd2128beb1
commit 8a39db2b29
2 changed files with 112 additions and 98 deletions

View File

@@ -1,107 +1,26 @@
from agame.action import *
from agame.game import *
from agame.item import *
from agame.room import *
from agame.trigger import *
import argparse
import importlib.util
from pathlib import Path
import sys
# TODO - take a custom module name that has:
# .database
# .game
# so that you can just RUN it
# Something similar to wsgi using "app" in the passed module
# This is the *game* here
database = Database()
database.add_items(
Item(
id="glowing_rock",
name="glowing rock",
desc="This rock is glowing.",
synonyms=("rock",),
room_desc="You see a ((glowing rock)). You have **got** to have it.",
triggers={
GET: [
PrintAction(
"You try to pick up the rock, but it slips out of your greasy hands.",
"Maybe you should wash your hands, you disgusting little man.",
)
],
LOOK: [PrintAction("Man, that rock looks awesome.")],
},
),
Item(
id="cell_door",
name="door",
room_desc="A ((door)) sits on the far wall.",
triggers={
GET: [PrintAction("The door is pretty attached to its wall.")],
OPEN: [
CheckVarAction(
"cell_door_open",
Compare.EQUALS,
True,
yes=[
PrintAction(
"It's already open. You push on the door even //more//, just in case."
),
SleepAction(1.0),
PrintAction("..."),
SleepAction(1.0),
PrintAction("Yup, still open."),
],
no=[
SetVarAction("cell_door_open", True),
PrintAction("The door swings open, thanks to you."),
],
)
],
CLOSE: [
CheckVarAction(
"cell_door_open",
Compare.EQUALS,
True,
yes=[
PrintAction("You close that door. Nice job."),
SetVarAction("cell_door_open", False),
],
no=[PrintAction("The door is already closed.")],
)
],
LOOK: [
CheckVarAction(
"cell_door_open",
Compare.EQUALS,
True,
yes=[PrintAction("It's a door, wide open, because you opened it.")],
no=[PrintAction("A closed door. You can change this.")],
)
],
},
),
# Parse args
parser = argparse.ArgumentParser(
description="Run a game",
)
database.add_rooms(
Room(
id="start",
name="Test room",
desc="You're in ((Todd's Test Cell)).",
items=[
database.items["glowing_rock"].create_inst(),
database.items["cell_door"].create_inst(),
],
),
parser.add_argument(
"PACKAGE", type=str, help="The Python package that contains the game to run."
)
args = parser.parse_args()
# Build the game state
game = Game(
database=database,
room=database.rooms["start"],
vars={
"cell_door_open": False,
},
)
# Get package to run
package = args.PACKAGE
# Load game module
game_module = importlib.import_module(package)
game = game_module.game # type: ignore
# Run
game.print_room()
while True:
try: