def unregister(cls): """Unregister an action class Returns: True if the action was unregistered, false if Not """ try: ActionManager.unregister_action(cls.__registered_as) cls.__registered_as = None return True except NotRegisteredError as error: print(error) return False
def edit_actions(self): """Show the dialog to edit actions""" dialog = Actions(self) values = dialog.show_modal(self.editor_gui.editor_window, self.engine.pump) if not dialog.return_value: return False ActionManager.clear_actions() current_items = list(values["current_items"]) self.project.set("fife-rpg", "Actions", current_items) self.register_actions(current_items) self.project_changed = True
def register(cls, name): """Registers the class as an action Args: name: The name under which the class should be registered Returns: True if the action was registered, False if not. """ try: ActionManager.register_action(name, cls) cls.__registered_as = name for dependency in cls.dependencies: if not dependency.registered_as: dependency.register() return True except AlreadyRegisteredError as error: print error return False
def register(cls, name): """Registers the class as an action Args: name: The name under which the class should be registered Returns: True if the action was registered, False if not. """ try: ActionManager.register_action(name, cls) cls.__registered_as = name for dependency in cls.dependencies: if not dependency.registered_as: dependency.register() return True except AlreadyRegisteredError as error: print(error) return False
def mousePressed(self, event):#pylint: disable=W0221 application = self.gamecontroller.application player = application.world.get_or_create_entity("PlayerCharacter") if event.getButton() == fife.MouseEvent.LEFT: scr_point = application.screen_coords_to_map_coords( fife.ScreenPoint(event.getX(), event.getY()), "actors" ) fifeagent.run(player, scr_point) print player.Agent.position elif event.getButton() == fife.MouseEvent.RIGHT: if application.language == "en": application.language = "de" else: application.language = "en" world = application.world game_map = application.current_map if game_map: pt = fife.ScreenPoint(event.getX(), event.getY()) actor_instances = game_map.get_instances_at( pt, game_map.get_layer("actors")) if actor_instances: for actor in actor_instances: identifier = actor.getId() if identifier == "PlayerCharacter": continue entity = world.get_entity(identifier) possible_actions = ActionManager.get_possible_actions( player, entity) actions = {} for name, action in possible_actions.iteritems(): actions[name] = action(application, player, entity) print actions[name].menu_text if actions.has_key("MoveAgent"): fifeagent.approach_and_execute(player, entity, callback=lambda: actions["MoveAgent"].execute() ) elif actions.has_key("Read"): fifeagent.approach_and_execute(player, entity, callback=lambda: player.FifeAgent.instance.say( actions["Read"].execute(), 2000) ) elif actions.has_key("Look"): fifeagent.approach_and_execute(player, entity, callback=lambda: player.FifeAgent.instance.say( actions["Look"].execute(), 2000) )
def clear(self): """Clears all data and restores saved settings""" self._maps = {} self._current_map = None self._components = {} self._actions = {} self._systems = {} self._behaviours = {} self.changed_maps = [] self.project_changed = False self.entity_changed = False self.editor_gui.reset_layerlist() self.map_entities = None self.set_selected_object(None) tmp_settings = list(self.settings.getSettingsFromFile("fife-rpg").keys()) for setting in tmp_settings: if setting in self.editor_settings: self.settings.set("fife-rpg", setting, self.editor_settings[setting]) else: self.settings.remove("fife-rpg", setting) ComponentManager.clear_components() ComponentManager.clear_checkers() ActionManager.clear_actions() ActionManager.clear_commands() SystemManager.clear_systems() BehaviourManager.clear_behaviours() self.editor.delete_maps() self.editor.delete_objects() if self.project_source is not None: self.engine.getVFS().removeSource(self.project_source) self.project_source = None if self.project_dir is not None: sys.path.remove(self.project_dir) self.project_dir = None self.project = None for callback in self._project_cleared_callbacks: callback() self.create_world()
def test_commands_dictionary(self): test_commands = {} self.assertEqual(ActionManager.get_commands(), test_commands) self.reg_command_func(*self.reg_command_params) self.assertNotEqual(ActionManager.get_commands(), test_commands) test_commands["Test"] = None self.assertEqual(ActionManager.get_commands(), test_commands) ActionManager.clear_commands() test_commands = {} self.assertEqual(ActionManager.get_commands(), test_commands)
def test_actions_dictionary(self): test_actions = {} self.assertEqual(ActionManager.get_actions(), test_actions) self.reg_action_func(*self.reg_action_params) self.assertNotEqual(ActionManager.get_actions(), test_actions) test_actions["Test"] = TestAction self.assertEqual(ActionManager.get_actions(), test_actions) ActionManager.clear_actions() test_actions = {} self.assertEqual(ActionManager.get_actions(), test_actions)
def execute(self): """Execute the action Raises: :class:`fife_rpg.exceptions.NoSuchCommandError` if a command is detected that is not registered. """ # Check if there are special commands and execute them for command_data in self.commands: command = command_data["Command"] available_commands = ActionManager.get_commands() if command in available_commands: available_commands[command](command_data) else: raise NoSuchCommandError(command) self.executed = True
def mousePressed(self, event): application = self.gamecontroller.application player = application.world.get_entity("PlayerCharacter") if event.getButton() == fife.MouseEvent.LEFT: map_point = application.screen_coords_to_map_coords( (event.getX(), event.getY()), "actors" ) fifeagent.run(player, map_point) elif event.getButton() == fife.MouseEvent.RIGHT: game_map = application.current_map if game_map: scr_point = fife.ScreenPoint(event.getX(), event.getY()) actor_instances = game_map.get_instances_at( scr_point, game_map.get_layer("actors") ) else: actor_instances = () for actor in actor_instances: identifier = actor.getId() outliner = self.gamecontroller.outliner if identifier in outliner.outline_ignore: continue entity = application.world.get_entity(identifier) possible_actions = ActionManager.get_possible_actions( player, entity) actions = {} for name, action in possible_actions.iteritems(): actions[name] = action(application, player, entity) if actions.has_key("Look"): fifeagent.approach_and_execute(player, entity, callback=lambda: player.FifeAgent.instance.say( actions["Look"].execute(), 2000) )
def tearDown(self): ActionManager.clear_actions() ActionManager.clear_commands()