199 lines
6.7 KiB
Python
199 lines
6.7 KiB
Python
from ui_console import LoadGameStateCommand, SaveGameStateCommand
|
|
from ui_dialog import Field, UIDialog
|
|
from ui_list_operations import (
|
|
LO_NONE,
|
|
)
|
|
|
|
|
|
class NewGameDirDialog(UIDialog):
|
|
title = "New game"
|
|
field0_label = "Name of new game folder:"
|
|
field1_label = "Name of new game:"
|
|
field_width = UIDialog.default_field_width
|
|
fields = [
|
|
Field(label=field0_label, type=str, width=field_width, oneline=False),
|
|
Field(label=field1_label, type=str, width=field_width, oneline=False),
|
|
]
|
|
confirm_caption = "Create"
|
|
game_mode_visible = True
|
|
|
|
# TODO: only allow names that don't already exist
|
|
|
|
def get_initial_field_text(self, field_number):
|
|
# provide a reasonable non-blank name
|
|
if field_number == 0:
|
|
return "newgame"
|
|
elif field_number == 1:
|
|
return type(self.ui.app.gw).game_title
|
|
|
|
def confirm_pressed(self):
|
|
if self.ui.app.gw.create_new_game(self.field_texts[0], self.field_texts[1]):
|
|
self.ui.app.enter_game_mode()
|
|
self.dismiss()
|
|
|
|
|
|
class LoadGameStateDialog(UIDialog):
|
|
title = "Open game state"
|
|
field_label = "Game state file to open:"
|
|
field_width = UIDialog.default_field_width
|
|
fields = [Field(label=field_label, type=str, width=field_width, oneline=False)]
|
|
confirm_caption = "Open"
|
|
game_mode_visible = True
|
|
|
|
# TODO: only allow valid game state file in current game directory
|
|
|
|
def confirm_pressed(self):
|
|
LoadGameStateCommand.execute(self.ui.console, [self.field_texts[0]])
|
|
self.dismiss()
|
|
|
|
|
|
class SaveGameStateDialog(UIDialog):
|
|
title = "Save game state"
|
|
field_label = "New filename for game state:"
|
|
field_width = UIDialog.default_field_width
|
|
fields = [Field(label=field_label, type=str, width=field_width, oneline=False)]
|
|
confirm_caption = "Save"
|
|
game_mode_visible = True
|
|
|
|
def confirm_pressed(self):
|
|
SaveGameStateCommand.execute(self.ui.console, [self.field_texts[0]])
|
|
self.dismiss()
|
|
|
|
|
|
class AddRoomDialog(UIDialog):
|
|
title = "Add new room"
|
|
field0_label = "Name for new room:"
|
|
field1_label = "Class of new room:"
|
|
field_width = UIDialog.default_field_width
|
|
fields = [
|
|
Field(label=field0_label, type=str, width=field_width, oneline=False),
|
|
Field(label=field1_label, type=str, width=field_width, oneline=False),
|
|
]
|
|
confirm_caption = "Add"
|
|
game_mode_visible = True
|
|
invalid_room_name_error = "Invalid room name."
|
|
|
|
def get_initial_field_text(self, field_number):
|
|
# provide a reasonable non-blank name
|
|
if field_number == 0:
|
|
return "Room " + str(len(self.ui.app.gw.rooms) + 1)
|
|
elif field_number == 1:
|
|
return "GameRoom"
|
|
|
|
def is_input_valid(self):
|
|
return self.field_texts[0] != "", self.invalid_room_name_error
|
|
|
|
def confirm_pressed(self):
|
|
valid, reason = self.is_input_valid()
|
|
if not valid:
|
|
return
|
|
self.ui.app.gw.add_room(self.field_texts[0], self.field_texts[1])
|
|
self.dismiss()
|
|
|
|
|
|
class SetRoomCamDialog(UIDialog):
|
|
title = "Set room camera marker"
|
|
tile_width = 48
|
|
field0_label = "Name of location marker object for this room:"
|
|
field_width = UIDialog.default_field_width
|
|
fields = [Field(label=field0_label, type=str, width=field_width, oneline=False)]
|
|
confirm_caption = "Set"
|
|
game_mode_visible = True
|
|
|
|
def dismiss(self):
|
|
self.ui.edit_list_panel.set_list_operation(LO_NONE)
|
|
UIDialog.dismiss(self)
|
|
|
|
def confirm_pressed(self):
|
|
self.ui.app.gw.current_room.set_camera_marker_name(self.field_texts[0])
|
|
self.dismiss()
|
|
|
|
|
|
class SetRoomEdgeWarpsDialog(UIDialog):
|
|
title = "Set room edge warps"
|
|
tile_width = 48
|
|
fields = 4
|
|
field0_label = "Name of room/object to warp at LEFT edge:"
|
|
field1_label = "Name of room/object to warp at RIGHT edge:"
|
|
field2_label = "Name of room/object to warp at TOP edge:"
|
|
field3_label = "Name of room/object to warp at BOTTOM edge:"
|
|
field_width = UIDialog.default_field_width
|
|
fields = [
|
|
Field(label=field0_label, type=str, width=field_width, oneline=False),
|
|
Field(label=field1_label, type=str, width=field_width, oneline=False),
|
|
Field(label=field2_label, type=str, width=field_width, oneline=False),
|
|
Field(label=field3_label, type=str, width=field_width, oneline=False),
|
|
]
|
|
confirm_caption = "Set"
|
|
game_mode_visible = True
|
|
|
|
def get_initial_field_text(self, field_number):
|
|
room = self.ui.app.gw.current_room
|
|
names = {
|
|
0: room.left_edge_warp_dest_name,
|
|
1: room.right_edge_warp_dest_name,
|
|
2: room.top_edge_warp_dest_name,
|
|
3: room.bottom_edge_warp_dest_name,
|
|
}
|
|
return names[field_number]
|
|
|
|
def dismiss(self):
|
|
self.ui.edit_list_panel.set_list_operation(LO_NONE)
|
|
UIDialog.dismiss(self)
|
|
|
|
def confirm_pressed(self):
|
|
room = self.ui.app.gw.current_room
|
|
room.left_edge_warp_dest_name = self.field_texts[0]
|
|
room.right_edge_warp_dest_name = self.field_texts[1]
|
|
room.top_edge_warp_dest_name = self.field_texts[2]
|
|
room.bottom_edge_warp_dest_name = self.field_texts[3]
|
|
room.reset_edge_warps()
|
|
self.dismiss()
|
|
|
|
|
|
class SetRoomBoundsObjDialog(UIDialog):
|
|
title = "Set room edge object"
|
|
field0_label = "Name of object to use for room bounds:"
|
|
field_width = UIDialog.default_field_width
|
|
fields = [Field(label=field0_label, type=str, width=field_width, oneline=False)]
|
|
confirm_caption = "Set"
|
|
game_mode_visible = True
|
|
|
|
def get_initial_field_text(self, field_number):
|
|
if field_number == 0:
|
|
return self.ui.app.gw.current_room.warp_edge_bounds_obj_name
|
|
|
|
def dismiss(self):
|
|
self.ui.edit_list_panel.set_list_operation(LO_NONE)
|
|
UIDialog.dismiss(self)
|
|
|
|
def confirm_pressed(self):
|
|
room = self.ui.app.gw.current_room
|
|
room.warp_edge_bounds_obj_name = self.field_texts[0]
|
|
room.reset_edge_warps()
|
|
self.dismiss()
|
|
|
|
|
|
class RenameRoomDialog(UIDialog):
|
|
title = "Rename room"
|
|
field0_label = "New name for current room:"
|
|
field_width = UIDialog.default_field_width
|
|
fields = [Field(label=field0_label, type=str, width=field_width, oneline=False)]
|
|
confirm_caption = "Rename"
|
|
game_mode_visible = True
|
|
invalid_room_name_error = "Invalid room name."
|
|
|
|
def get_initial_field_text(self, field_number):
|
|
if field_number == 0:
|
|
return self.ui.app.gw.current_room.name
|
|
|
|
def is_input_valid(self):
|
|
return self.field_texts[0] != "", self.invalid_room_name_error
|
|
|
|
def confirm_pressed(self):
|
|
valid, reason = self.is_input_valid()
|
|
if not valid:
|
|
return
|
|
world = self.ui.app.gw
|
|
world.rename_room(world.current_room, self.field_texts[0])
|
|
self.dismiss()
|