def __init__(self, parent: core.NodePath, parent_menu: "Menu" = None): self._parent = parent self._parent_menu = parent_menu self._task_manager = TaskManagerGlobal.taskMgr self._frame = DirectGui.DirectFrame( parent=parent, frameSize=(-constants.PADDING, constants.PADDING, 0, constants.PADDING), relief=DirectGuiGlobals.RAISED, borderWidth=(0.01, 0.01), state=DirectGuiGlobals.NORMAL, ) self._frame.hide() self._items: typing.List[DirectGui.DirectButton] = [] self._bottom = 0.0 self._width = 0.0 self._sub_menus: typing.List[Menu] = [] self._mouse_within = False self.destroy = self._frame.destroy self.set_pos = self._frame.set_pos self._frame.bind(DirectGuiGlobals.WITHIN, self._mouse_in) self._frame.bind(DirectGuiGlobals.WITHOUT, self._mouse_out) self._auto_hide_task: Task.Task = None
def __init__( self, parent: core.NodePath, tile_manager: manager.Manager, edit_mode: edit_mode.EditMode, task_manager: Task.TaskManager, ): self._dialog = DirectGui.DirectFrame(parent=parent, frameSize=(-1.1, 1.1, -0.9, 0.9)) self._dialog.hide() self._tile_manager = tile_manager self._tile_selected: typing.Optional[typing.Callable[[int], None]] = None DirectGui.DirectButton( parent=self._dialog, text="Ok", scale=0.05, pos=core.Vec3(0.81, -0.85), command=self._confirm, ) DirectGui.DirectButton( parent=self._dialog, text="Cancel", scale=0.05, pos=core.Vec3(0.95, -0.85), command=self._hide, ) self._tiles = tile_view.TileView( self._dialog, (-1.05, 1.05, -0.8, 0.88), self._tile_manager, self._select_tile, ) self._tiles.load_tiles() self._task_manager = task_manager self._edit_mode = edit_mode self._selected_picnum: typing.Optional[int] = None
def __init__( self, parent: core.NodePath, edit_mode_selector: edit_mode.EditMode, audio_manager: audio.Manager, get_addons: typing.Callable[[], typing.List[addon.Addon]], ): self._edit_mode_selector = edit_mode_selector self._audio_manager = audio_manager self._get_addons = get_addons self._addons: typing.List[addon.Addon] = [] self._editor: map_editor.MapEditor = None self._map_path: str = None self._dialog = DirectGui.DirectFrame( parent=parent, pos=core.Vec3(-1.1, -0.9), frameSize=(0, 2.2, 0, 1.8), relief=DirectGuiGlobals.RAISED, borderWidth=(0.01, 0.01), ) self._dialog.hide()
def __init__(self, parent: core.NodePath, edit_mode_selector: edit_mode.EditMode): self._edit_mode_selector = edit_mode_selector self._type_selected: typing.Optional[typing.Callable[[str], None]] = None self._frame = DirectGui.DirectFrame( parent=parent, pos=core.Vec3(-0.18, -0.1), frameSize=(0, 0.36, 0, 0.24), relief=DirectGuiGlobals.RAISED, borderWidth=(0.01, 0.01), ) self._frame.hide() self._ror_type_selector = DirectGui.DirectOptionMenu( parent=self._frame, pos=core.Vec3(0.04, 0.14), scale=constants.HUGE_TEXT_SIZE, items=[ ror_constants.ROR_TYPE_LINK, ror_constants.ROR_TYPE_STACK, ror_constants.ROR_TYPE_WATER, ror_constants.ROR_TYPE_GOO, ], ) DirectGui.DirectButton( parent=self._frame, pos=core.Vec3(0.18, 0.05), frameSize=core.Vec4(-0.06, 0.06, -0.02, 0.06) / constants.BIG_TEXT_SIZE, scale=constants.BIG_TEXT_SIZE, text="Ok", command=self._confirm, )
def __init__( self, parent: core.NodePath, edit_mode: edit_mode.EditMode, task_manager: Task.TaskManager, sound_browser: sound_view.SoundView, tile_viewer: tile_dialog.TileDialog, ): self._task_manager = task_manager self._dialog = DirectGui.DirectFrame( parent=parent, pos=core.Vec3(-1.1, -0.9), frameSize=(0, 2.2, 0, 1.8), relief=DirectGuiGlobals.RAISED, borderWidth=(0.01, 0.01), ) self._dialog.hide() self._tile_section = DirectGui.DirectFrame(parent=self._dialog, pos=core.Vec3(0.65, 0.07), frameColor=(0, 0, 0, 0)) current_tile_frame_parent = DirectGui.DirectFrame( parent=self._tile_section, pos=core.Vec3(0, constants.TEXT_SIZE), frameSize=(0, self._TILE_FRAME_SIZE, 0, self._TILE_FRAME_SIZE), frameColor=(0.65, 0.65, 0.65, 1), relief=DirectGuiGlobals.SUNKEN, borderWidth=(0.01, 0.01), ) self._current_tile_frame = DirectGui.DirectButton( pos=core.Vec3(0.01, 0.01), parent=current_tile_frame_parent, frameSize=(0, self._TILE_FRAME_SIZE, self._TILE_FRAME_SIZE, 0), relief=DirectGuiGlobals.FLAT, command=self._show_tiles, ) self._current_tile_frame.set_transparency(True) self._change_tile_button = DirectGui.DirectButton( parent=self._tile_section, scale=constants.TEXT_SIZE, text="Change Tile", text_align=core.TextNode.A_left, command=self._show_tiles, ) self._property_parent: core.NodePath = self._dialog.attach_new_node( "properties") self._property_parent.set_pos(0.66, 0, 0.38) self._sound_browser = sound_browser self._tile_viewer = tile_viewer self._edit_mode = edit_mode self._sprite: typing.Optional[map_objects.EditorSprite] = None self._selected_descriptor: map_objects.sprite_type_descriptor.Descriptor = ( map_objects.sprite_type_descriptor.Descriptor(-1, {})) self._current_descriptor: map_objects.sprite_type_descriptor.Descriptor = ( map_objects.sprite_type_descriptor.Descriptor(-1, {})) self._current_picnum: typing.Optional[int] = None self._current_palette: typing.Optional[int] = None self._current_status_number: typing.Optional[int] = None self._sprite_category_options = DirectGui.DirectOptionMenu( parent=self._dialog, pos=core.Vec3(0.04, 1.72), items=list(descriptors.sprite_category_descriptors.keys()), command=self._select_sprite_category, scale=constants.TEXT_SIZE, text_align=core.TextNode.A_left, ) self._sprite_type_list = sprite_type_list.SpriteTypeList( self._dialog, self._tile_viewer.tile_manager, self._select_sprite_type) self._properties: typing.Optional[ sprite_property_view.SpritePropertyView] = None self._droppables = { descriptor.name: sprite_type for sprite_type, descriptor in descriptors.sprite_types.items() if descriptor.get_is_droppable( descriptors.sprite_category_descriptors) } self._droppables["None"] = 0 DirectGui.DirectLabel( parent=self._dialog, text="Special Source:", pos=core.Vec3(1.74, 0.38), scale=constants.TEXT_SIZE, ) self._special_source_menu = DirectGui.DirectOptionMenu( parent=self._dialog, pos=core.Vec3(1.90, 0.38), items=["None", "Level Start"], scale=constants.TEXT_SIZE, ) DirectGui.DirectLabel( parent=self._dialog, text="Special Target:", pos=core.Vec3(1.74, 0.38 - constants.TEXT_SIZE - 0.02), scale=constants.TEXT_SIZE, ) self._special_target_menu = DirectGui.DirectOptionMenu( parent=self._dialog, pos=core.Vec3(1.90, 0.38 - constants.TEXT_SIZE - 0.02), items=["None", "Secret", "Next Level", "Secret Level"], scale=constants.TEXT_SIZE, ) DirectGui.DirectButton( parent=self._dialog, pos=core.Vec3(1.98, 0.07), text="Ok", scale=constants.TEXT_SIZE, command=self._save_changes, ) DirectGui.DirectButton( parent=self._dialog, pos=core.Vec3(2.1, 0.07), text="Cancel", scale=constants.TEXT_SIZE, command=self._hide, )
def __init__( self, parent: core.NodePath, audio_manager: manager.Manager, task_manager: Task.TaskManager, edit_mode_selector: edit_mode.EditMode, ): path = find_resource("sound_names.yaml") with open(path, "r") as file: self._sound_descriptors = yaml.safe_load(file.read()) self._dialog = DirectGui.DirectFrame( parent=parent, frameSize=(-1.02, 1.02, -0.95, 0.95), frameColor=(0.85, 0.85, 0.85, 1), relief=DirectGuiGlobals.RAISED, borderWidth=(0.01, 0.01), ) self._dialog.hide() self._frame = DirectGui.DirectScrolledFrame( parent=self._dialog, frameColor=(0.65, 0.65, 0.65, 1), frameSize=(-1, 1, -0.8, 0.93), canvasSize=(0, self._CANVAS_WIDTH, -1, 0), scrollBarWidth=0.04, relief=DirectGuiGlobals.SUNKEN, ) self._bind_scroll(self._frame) self._audio_manager = audio_manager self._task_manager = task_manager self._edit_mode_selector = edit_mode_selector self._preview_sound: core.AudioSound = None self._selected_sound_index = -1 self._stop_sound_callback: typing.Callable[[], None] = None self._selected_label: DirectGui.DirectButton = None self._clicked_label: DirectGui.DirectButton = None self._sound_selected: typing.Callable[[int], None] = None self._categorized_sound_names: typing.Dict[str, typing.List[int]] = defaultdict( lambda: [] ) for index, descriptor in self._sound_descriptors.items(): sounds = self._categorized_sound_names[descriptor["category"]] sounds.append(index) self._labels: typing.Dict[int, DirectGui.DirectButton] = {} half_height = self._TEXT_FRAME_SCALE / (2 * constants.TEXT_SIZE) for sound_index, descriptor in self._sound_descriptors.items(): text = f"{sound_index}. {descriptor['name']}" label = DirectGui.DirectButton( parent=self._canvas, frameSize=( 0, self._DESCRIPTION_WIDTH / constants.TEXT_SIZE, -half_height, half_height, ), frameColor=(0, 0, 0, 0), scale=constants.TEXT_SIZE, text=text, text_align=core.TextNode.A_left, text_wordwrap=(self._DESCRIPTION_WIDTH) / constants.TEXT_SIZE, ) self._bind_scroll(label) label["extraArgs"] = [label, sound_index, descriptor] label["command"] = self._select_sound self._labels[sound_index] = label self._show_category("misc") items = self._categorized_sound_names.keys() items = list(sorted(items)) DirectGui.DirectOptionMenu( parent=self._dialog, pos=core.Vec3(-1, -0.9), items=items, scale=constants.TEXT_SIZE, text_align=core.TextNode.A_left, command=self._show_category, ) DirectGui.DirectButton( parent=self._dialog, pos=core.Vec3(0.8, -0.9), text="Ok", scale=constants.TEXT_SIZE, command=self._confirm, ) DirectGui.DirectButton( parent=self._dialog, pos=core.Vec3(0.92, -0.9), text="Cancel", scale=constants.TEXT_SIZE, command=self._hide, )
def __init__(self, aspect_2d: core.NodePath, on_type_changed: typing.Callable[[], None]): self._aspect_2d = aspect_2d self._on_type_changed = on_type_changed self._frame = DirectGui.DirectFrame( parent=self._aspect_2d, frameSize=(0, 0.56, 0, 0.2), relief=DirectGuiGlobals.RAISED, borderWidth=(0.01, 0.01), frameColor=(0.85, 0.85, 0.85, 0.75), state=DirectGuiGlobals.NORMAL, ) gui.bind_gui_for_focus(self._frame) self._frame.hide() self._property_parent: core.NodePath = self._aspect_2d.attach_new_node( "properties") self._properties_frame = DirectGui.DirectFrame( parent=self._property_parent, frameSize=(-0.02, 1.02, 0.02, 1.32), relief=DirectGuiGlobals.RAISED, borderWidth=(0.01, 0.01), frameColor=(0.85, 0.85, 0.85, 0.75), state=DirectGuiGlobals.NORMAL, ) self._properties_parent: core.NodePath = self._properties_frame.attach_new_node( "properties") self._properties_parent.set_z(0.10) gui.bind_gui_for_focus(self._properties_frame) self._properties_frame.hide() self._properties: sprite_property_view.SpritePropertyView = None self._sector: map_objects.EditorSector = None self._current_sector_type: sector_type_descriptor.SectorTypeDescriptor = None self._type_lookup = { sector_type.name: type_index for type_index, sector_type in descriptors.sector_types.items() } type_names = list(self._type_lookup.keys()) self._type_selector = DirectGui.DirectOptionMenu( parent=self._frame, pos=core.Vec3(0.05, 0.08), scale=constants.BIG_TEXT_SIZE, items=type_names, command=self._type_changed, ) DirectGui.DirectLabel( parent=self._properties_frame, text="Special Source:", pos=core.Vec3(7 * constants.PADDING, 2 * constants.TEXT_SIZE + 2 * constants.PADDING), scale=constants.TEXT_SIZE, frameColor=(0, 0, 0, 0), ) self._special_source_menu = DirectGui.DirectOptionMenu( parent=self._properties_frame, pos=core.Vec3( 7 * constants.PADDING + 0.16, 2 * constants.TEXT_SIZE + 2 * constants.PADDING, ), items=["None", "Level Start"], scale=constants.TEXT_SIZE, ) DirectGui.DirectLabel( parent=self._properties_frame, text="Special Target:", pos=core.Vec3(7 * constants.PADDING, constants.TEXT_SIZE + constants.PADDING), scale=constants.TEXT_SIZE, frameColor=(0, 0, 0, 0), ) self._special_target_menu = DirectGui.DirectOptionMenu( parent=self._properties_frame, pos=core.Vec3(7 * constants.PADDING + 0.16, constants.TEXT_SIZE) + constants.PADDING, items=["None", "Secret", "Next Level", "Secret Level"], scale=constants.TEXT_SIZE, ) self._update_frame_position()
def __init__(self, parent: core.NodePath, edit_mode: edit_mode.EditMode): self._dialog = DirectGui.DirectFrame( parent=parent, pos=core.Vec3(-0.78, -0.9), frameSize=(0, 1.58, 0, 1.8), relief=DirectGuiGlobals.RAISED, borderWidth=(0.01, 0.01), ) self._dialog.hide() self._property_parent: core.NodePath = self._dialog.attach_new_node( "properties") self._property_parent.set_pos(0.04, 0, 0.38) self._edit_mode = edit_mode self._wall: map_objects.EditorWall = None self._selected_descriptor: wall_type_descriptor.WallTypeDescriptor = None self._current_descriptor: wall_type_descriptor.WallTypeDescriptor = None self._current_picnum: int = None self._current_palette: int = None self._current_status_number: int = None self._properties: sprite_property_view.SpritePropertyView = None self._type_lookup = { wall_type.name: type_index for type_index, wall_type in descriptors.wall_types.items() } type_names = list(self._type_lookup.keys()) self._type_selector = DirectGui.DirectOptionMenu( parent=self._dialog, pos=core.Vec3(0.05, 0.38), scale=constants.TEXT_SIZE, items=type_names, command=self._type_changed, ) DirectGui.DirectLabel( parent=self._dialog, text="Special Source:", pos=core.Vec3(1.12, 0.38), scale=constants.TEXT_SIZE, ) self._special_source_menu = DirectGui.DirectOptionMenu( parent=self._dialog, pos=core.Vec3(1.28, 0.38), items=["None", "Level Start"], scale=constants.TEXT_SIZE, ) DirectGui.DirectLabel( parent=self._dialog, text="Special Target:", pos=core.Vec3(1.12, 0.38 - constants.TEXT_SIZE - 0.02), scale=constants.TEXT_SIZE, ) self._special_target_menu = DirectGui.DirectOptionMenu( parent=self._dialog, pos=core.Vec3(1.28, 0.38 - constants.TEXT_SIZE - 0.02), items=["None", "Next Level", "Secret Level"], scale=constants.TEXT_SIZE, ) DirectGui.DirectButton( parent=self._dialog, pos=core.Vec3(1.36, 0.07), text="Ok", scale=constants.TEXT_SIZE, command=self._save_changes, ) DirectGui.DirectButton( parent=self._dialog, pos=core.Vec3(1.48, 0.07), text="Cancel", scale=constants.TEXT_SIZE, command=self._hide, )