def _setup_difficulties_menu(self): game = default_database.default_prime2_game_description() for i, trick_level in enumerate(LayoutTrickLevel): if trick_level not in { LayoutTrickLevel.NO_TRICKS, LayoutTrickLevel.MINIMAL_RESTRICTIONS }: difficulty_action = QAction(self) difficulty_action.setText(trick_level.long_name) self.menu_difficulties.addAction(difficulty_action) difficulty_action.triggered.connect( functools.partial(self._open_difficulty_details_popup, trick_level)) configurable_tricks = TrickLevelConfiguration.all_possible_tricks() tricks_in_use = used_tricks(game.world_list) for trick in sorted(game.resource_database.trick, key=lambda _trick: _trick.long_name): if trick.index not in configurable_tricks or trick not in tricks_in_use: continue trick_menu = QMenu(self) trick_menu.setTitle(trick.long_name) self.menu_trick_details.addAction(trick_menu.menuAction()) used_difficulties = difficulties_for_trick(game.world_list, trick) for i, trick_level in enumerate(LayoutTrickLevel): if trick_level in used_difficulties: difficulty_action = QAction(self) difficulty_action.setText(trick_level.long_name) trick_menu.addAction(difficulty_action) difficulty_action.triggered.connect( functools.partial(self._open_trick_details_popup, trick, trick_level))
def static_resources_for_layout_logic( configuration: TrickLevelConfiguration, resource_database: ResourceDatabase, ) -> Tuple[int, CurrentResources]: """ :param configuration: :param resource_database: :return: """ all_used_tricks = TrickLevelConfiguration.all_possible_tricks() static_resources = {} for trick in resource_database.trick: if trick.index in all_used_tricks: static_resources[trick] = configuration.level_for_trick( trick).as_number # Exclude from Room Rando static_resources[resource_database.get_by_type_and_index( ResourceType.TRICK, 18)] = 5 return configuration.global_level.as_number, static_resources
def setup_trick_level_elements(self): # logic_combo_box for i, trick_level in enumerate(LayoutTrickLevel): self.logic_combo_box.setItemData(i, trick_level) self.logic_combo_box.currentIndexChanged.connect(self._on_trick_level_changed) self.trick_difficulties_layout = QtWidgets.QGridLayout() self._checkbox_for_trick = {} self._slider_for_trick = {} configurable_tricks = TrickLevelConfiguration.all_possible_tricks() used_tricks = _used_tricks(self.world_list) size_policy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Preferred) self._create_difficulty_details_row() row = 2 for trick in sorted(self.resource_database.trick, key=lambda _trick: _trick.long_name): if trick.index not in configurable_tricks or trick not in used_tricks: continue if row > 1: self.trick_difficulties_layout.addItem(QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding)) trick_configurable = QtWidgets.QCheckBox(self.trick_level_scroll_contents) trick_configurable.setFixedWidth(16) trick_configurable.stateChanged.connect(functools.partial(self._on_check_trick_configurable, trick)) self._checkbox_for_trick[trick] = trick_configurable self.trick_difficulties_layout.addWidget(trick_configurable, row, 0, 1, 1) trick_label = QtWidgets.QLabel(self.trick_level_scroll_contents) trick_label.setSizePolicy(size_policy) trick_label.setWordWrap(True) trick_label.setFixedWidth(80) trick_label.setText(trick.long_name) self.trick_difficulties_layout.addWidget(trick_label, row, 1, 1, 1) slider_layout = QtWidgets.QGridLayout() slider_layout.setHorizontalSpacing(0) for i in range(12): slider_layout.setColumnStretch(i, 1) horizontal_slider = QtWidgets.QSlider(self.trick_level_scroll_contents) horizontal_slider.setMaximum(5) horizontal_slider.setPageStep(2) horizontal_slider.setOrientation(QtCore.Qt.Horizontal) horizontal_slider.setTickPosition(QtWidgets.QSlider.TicksBelow) horizontal_slider.setEnabled(False) horizontal_slider.valueChanged.connect(functools.partial(self._on_slide_trick_slider, trick)) self._slider_for_trick[trick] = horizontal_slider slider_layout.addWidget(horizontal_slider, 0, 1, 1, 10) difficulties_for_trick = _difficulties_for_trick(self.world_list, trick) for i, trick_level in enumerate(LayoutTrickLevel): if trick_level == LayoutTrickLevel.NO_TRICKS or trick_level in difficulties_for_trick: difficulty_label = QtWidgets.QLabel(self.trick_level_scroll_contents) difficulty_label.setAlignment(QtCore.Qt.AlignHCenter) difficulty_label.setText(trick_level.long_name) slider_layout.addWidget(difficulty_label, 1, 2 * i, 1, 2) self.trick_difficulties_layout.addLayout(slider_layout, row, 2, 1, 1) tool_button = QtWidgets.QToolButton(self.trick_level_scroll_contents) tool_button.setText("?") tool_button.clicked.connect(functools.partial(self._open_trick_details_popup, trick)) self.trick_difficulties_layout.addWidget(tool_button, row, 3, 1, 1) row += 1 self.trick_level_layout.addLayout(self.trick_difficulties_layout)