1
0
Fork 0

add actions to create new rooms and items in the world

This commit is contained in:
Sean Sube 2024-05-04 17:57:44 -05:00
parent 4affcb893a
commit 16525ac635
Signed by: ssube
GPG Key ID: 3EED7B957D362AF1
1 changed files with 88 additions and 0 deletions

View File

@ -0,0 +1,88 @@
from logging import getLogger
from typing import Callable, List
from packit.agent import Agent, agent_easy_connect
from adventure.context import broadcast, get_current_context
from adventure.generate import OPPOSITE_DIRECTIONS, generate_item, generate_room
logger = getLogger(__name__)
llm = agent_easy_connect()
dungeon_master = Agent(
"dungeon master",
"You are the dungeon master in charge of a fantasy world.",
{},
llm,
)
def action_explore(direction: str) -> str:
"""
Explore the room in a new direction.
Args:
direction: The direction to explore: north, south, east, or west.
"""
current_world, current_room, current_actor = get_current_context()
if not current_world:
raise ValueError("No world found")
if direction in current_room.portals:
dest_room = current_room.portals[direction]
return f"You cannot explore {direction} from here, that direction leads to {dest_room}."
existing_rooms = [room.name for room in current_world.rooms]
new_room = generate_room(
dungeon_master, current_world.theme, existing_rooms, callback=lambda x: x
)
current_world.rooms.append(new_room)
# link the rooms together
current_room.portals[direction] = new_room.name
new_room.portals[OPPOSITE_DIRECTIONS[direction]] = current_room.name
broadcast(
f"{current_actor.name} explores {direction} of {current_room.name} and finds a new room: {new_room.name}"
)
return f"You explore {direction} and find a new room: {new_room.name}"
def action_search() -> str:
"""
Search the room for hidden items.
"""
action_world, action_room, action_actor = get_current_context()
if len(action_room.items) > 2:
return "You find nothing hidden in the room."
existing_items = [item.name for item in action_room.items]
new_item = generate_item(
dungeon_master,
action_world.theme,
existing_items=existing_items,
dest_room=action_room.name,
callback=lambda x: x,
)
action_room.items.append(new_item)
broadcast(
f"{action_actor.name} searches {action_room.name} and finds a new item: {new_item.name}"
)
return f"You search the room and find a new item: {new_item.name}"
def init() -> List[Callable]:
"""
Initialize the custom actions.
"""
return [
action_explore,
action_search,
]