Exemple #1
0
    def register(cls, name, auto_register=True):
        """Registers the class as a component

        Args:
            name: The name under which the class should be registered

            auto_register: This sets whether components this component
            derives from will have their registered_as property set to the same
            name as this class.

        Returns:
            True if the component was registered, False if not.
        """
        try:
            ComponentManager.register_component(name, cls())
            cls.__registered_as = name
            if auto_register:
                for sub_cls in inspect.getmro(cls):
                    if ((not (sub_cls is cls or sub_cls is Base))
                            and issubclass(sub_cls, Base)):
                        # pylint: disable=W0212
                        sub_cls.__registered_as = name
                        # pylint: enable=W0212
            for dependency in cls.dependencies:
                if not dependency.registered_as:
                    dependency.register()
            return True
        except AlreadyRegisteredError as error:
            print(error)
            return False
Exemple #2
0
    def register(cls, name, auto_register=True):
        """Registers the class as a component

        Args:
            name: The name under which the class should be registered

            auto_register: This sets whether components this component
            derives from will have their registered_as property set to the same
            name as this class.

        Returns:
            True if the component was registered, False if not.
        """
        try:
            ComponentManager.register_component(name, cls())
            cls.__registered_as = name
            if auto_register:
                for sub_cls in inspect.getmro(cls):
                    if ((not (sub_cls is cls or sub_cls is Base))
                         and issubclass(sub_cls, Base)):
                        # pylint: disable-msg=W0212
                        sub_cls.__registered_as = name
                        # pylint: enable-msg=W0212
            for dependency in cls.dependencies:
                if not dependency.registered_as:
                    dependency.register()
            return True
        except AlreadyRegisteredError as error:
            print error
            return False
Exemple #3
0
def register_checkers():
    """Registers the components checkers"""
    if not Lockable.registered_as:
        raise NotRegisteredError("Lockable")
    if FifeAgent.registered_as:
        ComponentManager.register_checker(
            (FifeAgent.registered_as, Lockable.registered_as),
            check_lockable_fifeagent)
Exemple #4
0
def register_checkers():
    """Registers the components checkers"""
    if not Lockable.registered_as:
        raise NotRegisteredError("Lockable")
    if FifeAgent.registered_as:
        ComponentManager.register_checker(
            (FifeAgent.registered_as, Lockable.registered_as),
            check_lockable_fifeagent)
Exemple #5
0
    def create_entity_dictionary(cls, entity, remove_default=True):
        """Creates a dictionary containing the values of the Entity

        Args:
            entity: The Entity instance

            remove_default: Skips fields whose value is the same as the
            default value.

        Returns:
            The created dictionary
        """
        entity_dict = {}
        components_data = entity_dict["Components"] = {}
        components = ComponentManager.get_components()
        for name, component in components.items():
            component_values = getattr(entity, name)
            if component_values:
                component_data = None
                for field in component.saveable_fields:
                    fields = component.fields
                    if not component_data:
                        component_data = components_data[name] = {}
                    value = getattr(component_values, field)
                    if remove_default and value == fields[field].default():
                        continue
                    component_data[field] = value
        return entity_dict
Exemple #6
0
    def step(self, time_delta):
        """Performs actions every frame

        Args:
            time_delta: Time that passed since the last call
        """
        World.step(self, time_delta)
        checkers = ComponentManager.get_checkers()
        for names, callback in checkers:
            for components in self.components.join(*names):
                callback(*components)
Exemple #7
0
 def configure(self):
     """Configure the worlds components and systems"""
     World.configure(self)
     components = ComponentManager.get_components()
     for name, component in components.iteritems():
         setattr(self.components, name, component)
     systems = SystemManager.get_systems()
     for name, system in systems.iteritems():
         setattr(self.systems, name, system)
     if not General.registered_as:
         General.register()
Exemple #8
0
    def step(self, time_delta):
        """Performs actions every frame

        Args:
            time_delta: Time that passed since the last call
        """
        World.step(self, time_delta)
        checkers = ComponentManager.get_checkers()
        for names, callback in checkers:
            for components in self.components.join(*names):
                callback(*components)
Exemple #9
0
 def configure(self):
     """Configure the worlds components and systems"""
     World.configure(self)
     components = ComponentManager.get_components()
     for name, component in components.items():
         setattr(self.components, name, component)
     systems = SystemManager.get_systems()
     for name, system in systems.items():
         setattr(self.systems, name, system)
     if not General.registered_as:
         General.register()
Exemple #10
0
 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()
Exemple #11
0
    def edit_components(self):
        """Show the dialog to edit components"""
        dialog = Components(self)
        values = dialog.show_modal(self.editor_gui.editor_window,
                                   self.engine.pump)
        if not dialog.return_value:
            return False
        entities_hidden = self.map_entities is not None
        entity = get_entity(self.world, self.selected_object)
        tmp_entity_id = None
        if entity is not None:
            tmp_entity_id = entity.identifier
        if entities_hidden:
            self.show_map_entities(self.current_map.name)
        tmp_file = StringIO()
        self.dump_entities(tmp_file)

        for entity in tuple(self.world.entities):
            entity.delete()
        ComponentManager.clear_components()
        ComponentManager.clear_checkers()
        current_items = list(values["current_items"])
        self.project.set("fife-rpg", "Components", current_items)
        self.world.register_mandatory_components()
        self.register_components(current_items)
        tmp_file.seek(0)
        self.reset_world(tmp_file)
        for game_map in self.maps.values():
            game_map.update_entities()
            self.update_agents(game_map)
        if tmp_entity_id is not None:
            tmp_entity = self.world.get_entity(tmp_entity_id)
            fife_agent = getattr(tmp_entity, FifeAgent.registered_as)
            self.set_selected_object(fife_agent.instance)
        if entities_hidden:
            self.hide_map_entities(self.current_map.name)

        self.project_changed = True
Exemple #12
0
    def unregister(cls, auto_unregister=True):
        """Unregister a component class

        Args:
            auto_register: This sets whether components this component
            derives from will have their registered_as property unset as well

        Returns:
            True if the component was unregistered, false if Not
        """
        try:
            ComponentManager.unregister_component(cls.__registered_as)
            cls.__registered_as = None
            if auto_unregister:
                for sub_cls in inspect.getmro(cls):
                    if ((not (sub_cls is cls or sub_cls is Base))
                            and issubclass(sub_cls, Base)):
                        # pylint: disable=W0212
                        sub_cls.__registered_as = None
                        # pylint: enable=W0212
            return True
        except NotRegisteredError as error:
            print(error)
            return False
Exemple #13
0
    def create_entity_dictionary(cls, entity):
        """Creates a dictionary containing the values of the Entity

        Args:
            entity: The Entity instance

        Returns:
            The created dictionary
        """
        entity_dict = {}
        components_data = entity_dict["components"] = {}
        components = ComponentManager.get_components()
        for name, component in components.iteritems():
            component_values = getattr(entity, name)
            if component_values:
                component_data = None
                for field in component.saveable_fields:
                    if not component_data:
                        component_data = components_data[name] = {}
                    component_data[field] = getattr(component_values, field)
        return entity_dict