pigframe


Namepigframe JSON
Version 0.0.9.1 PyPI version JSON
download
home_pagehttps://github.com/passive-radio/pigframe
SummaryA minimum Python-based game-engine backend library, designed to simplify and streamline the development process of game application.
upload_time2024-03-02 09:13:52
maintainer
docs_urlNone
authorpassive-radio, Yudai Okubo
requires_python>=3.10
licenseMIT
keywords python game framework
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            ## Pigframe
![Pigframe](docs/images/pigframe-logo-rectangle-200x99.jpg)

<b>[日本語版 README](docs/README-ja.md)</b>

<b>Pigframe</b> is a minimum Python-based game-engine backend library, designed to simplify and streamline the development process of game applications. Engineered with flexibility and ease of use in mind, Pigframe provides a robust set of tools and functions that enable developers to create immersive and dynamic gaming experiences.

#### Key Features:
- <b>Component-Based Architecture</b>: Pigframe adopts a component-based approach, allowing for modular and scalable game development. This architecture facilitates easy addition, modification, and management of game elements.

- <b>Intuitive Scene Management</b>: Manage game scenes seamlessly with Pigframe's intuitive scene transition and control system. This feature allows for smooth transitions and efficient scene organization.

- <b>Efficient Entity-Component System</b>: At the heart of Pigframe is an efficient entity-component system (ECS), which promotes a clean separation of concerns and enhances performance.

- <b>Pythonic Simplicity</b>: Designed with Python's philosophy of simplicity and readability, Pigframe is ideal for those learning game development or individual developers seeking an accessible yet powerful tool.

- <b>Versatile Integration</b>: Pigframe is optimized to work seamlessly with popular Python game libraries like Pyxel and Pygame, making it a perfect choice for diverse and creative game development projects.

#### Getting Started:
To get started with Pigframe, simply install the package using pip:

```bash
pip install pigframe
```

#### Contributing:
Contributions to Pigframe are welcome! Whether it's bug reports, feature requests, or code contributions, your input is valuable in making Pigframe better for everyone.

#### User guide:

- import module
    ```python
    from pigframe.world import World, System, Event, Screen, Component
    ```

- create your own world class which has entities, components, systems, events and screens. It is the core of the game.
    ```python
    # Implement World class for your own project.
    class App(World):
        def __init__(self):
            super().__init__()
            self.init() # write initial process which is unique to the game engine and the game you develop.
        
        ... # other game engine unique methods.
    
    app = App()
    ```

- create and remove entity
    ```python
    # Create entity to world.
    entity = app.create_entity() # -> int: entity ID
    # Remove entity from world.
    app.remove_entity(entity) # deletes from entites list
    ```

- add/remove components to entity
    - add components to entity
        ```python
        # Add component to entity ID.
        # Components are recorded as values where entity ID is the key inside dict.
        # Component instance are created automatically.
        app.add_component_to_entity(entity, ComponentA, component_argsA) # ComponentA is not an instance of Component but type.
        app.add_component_to_entity(entity, ComponentB, component_argsB) # ComponentB is not an instance of Component but type.
        # getter
        app.get_component(ComponentA) # Returns the list of tuple: entity id which has ComponentA, component implementation. 
        app.get_components(ComponentA, ComponentB) # Returns the list of tuple: entity id which has ComponentA and ComponentB, component implementations. 
        ```

    - remove components from entity
        ```python
        app.add_component_to_entity(ent, ComponentA, component_argsA)
        app.add_component_to_entity(ent, ComponentB, component_argsB)
        app.remove_component_from_entity(ent, ComponentA) # remove single component instance from entity

        app.add_component_to_entity(ent, ComponentC, component_argsC)
        app.remove_components_from_entity(ent, ComponentB, ComponentC) # remove components instances from entity
        ```

- use component values inside system, event and screen
    ```python
    # Example of using get_components() method.
    class SystemA(System):
        def process(self):
            for ent, (component_a, component_b) in self.world.get_components(ComponentA, ComponentB):
                """
                Returns
                -------
                list: list of tuple: entity id, list of components
                """
                component_a.x += component_b.x
                component_a.y += component_b.x
    ```

- use entity
    ```python
    # Example of using entity object
    class EventA(Event):
        def __process(self):
            player = self.world.get_entity_object(entity = 0)
            """
            Returns
            -----------
            dict: entity object
                key: component type
                value: component
            """
    ```

- add scenes to world
    ```python
    # Add scenes to world.
    app.add_scenes(["launch", "game", "result", "settings"])
    # scenes getter
    app.sceneces # -> [["launch", "game", "result", "settings"]
    ```

- add/remove system to/from world
    ```python
    # Add screen to a scene of world. Be sure you have added scenes before adding screens.
    # System instance are created automatically.
    app.add_system_to_scenes(SystemA, "launch", priority = 0, system_args)
    # system with its lower priority than the other systems is executed in advance., by default 0.
    # For here, SystemA().process() runs first in "launch" scene.
    app.add_system_to_scenes(SystemA, "game", priority = 0, system_args)
    app.add_system_to_scenes(SystemB, "launch", priority = 1)
    # Remove system from scene.
    app.remove_system_from_scene(SystemA, ["launch", "game"], system_args = system_args)
    ```

- add/remove screen to/from world
    ```python
    # Add screen to a scene of world. Be sure you have added scenes before adding screens.
    # Screen instance are created automatically.
    app.add_screen_to_scenes(ScreenA, "launch", priority = 0)
    app.add_screen_to_scenes(ScreenB, "launch", priority = 0)
    app.add_screen_to_scenes(ScreenC, "game", priority = 0, screen_args)
    # Remove screen from scene.
    app.remove_screen_from_scene(ScreenB, "launch")
    ```

- add/remove event to/from world
    ```python
    # Add an event, event triger to a scene of world. Be sure you have added scenes before adding events.
    # Event instance are created automatically.
    app.add_event_to_scene(EventA, "game", callable_triger, priority = 0)
    # Remove event from scene.
    app.remove_event_from_scene(EventA, "game")
    ```

- add scene transitions settings
    ```python
    app.add_scene_transition(scene_from = "launch", scene_to = "game", triger = callable_triger)
    # triger has to be callable.
    ```

- execute systems, events and draw screens
    ```python
    # Pyxel Example
    class App(World):
        ...

        def run(self):
            pyxel.run(self.update, self.draw)

        def update(self):
            self.process() # World class has process method.
            # process method calls these internal methods below.
            # 1. process_systems()
            # 1. process_events()
            # 1. scene_manager.process()

        def draw(self):
            self.process_screens()
    ```

    ```python
    # Pygame Example
    class App(World):
        ...
        
        def run(self):
            while self.running:
                self.update()
                self.draw()
                
        def update(self):
            self.process()
        
        def draw(self):
            self.process_screens()
    ```

#### Examples
| game engine | example | contents |
| ---- | ----| ---- |
| Pygame | [control a ball](https://github.com/passive-radio/pigframe/tree/main/src/pigframe/examples/pygame_control_a_ball) | examples of system, event, component, entity and world implementations. |
| Pyxel | [control a ball](https://github.com/passive-radio/pigframe/tree/main/src/pigframe/examples/pyxel_control_a_ball) | examples of system, event, component, entity and world implementations. |

            

Raw data

            {
    "_id": null,
    "home_page": "https://github.com/passive-radio/pigframe",
    "name": "pigframe",
    "maintainer": "",
    "docs_url": null,
    "requires_python": ">=3.10",
    "maintainer_email": "",
    "keywords": "python,game,framework",
    "author": "passive-radio, Yudai Okubo",
    "author_email": "srccreator@gmail.com",
    "download_url": "https://files.pythonhosted.org/packages/15/16/07d706b8f9f3751fab914178ea501b5f65324cda3e8efe887810a05fcd1a/pigframe-0.0.9.1.tar.gz",
    "platform": null,
    "description": "## Pigframe\n![Pigframe](docs/images/pigframe-logo-rectangle-200x99.jpg)\n\n<b>[\u65e5\u672c\u8a9e\u7248 README](docs/README-ja.md)</b>\n\n<b>Pigframe</b> is a minimum Python-based game-engine backend library, designed to simplify and streamline the development process of game applications. Engineered with flexibility and ease of use in mind, Pigframe provides a robust set of tools and functions that enable developers to create immersive and dynamic gaming experiences.\n\n#### Key Features:\n- <b>Component-Based Architecture</b>: Pigframe adopts a component-based approach, allowing for modular and scalable game development. This architecture facilitates easy addition, modification, and management of game elements.\n\n- <b>Intuitive Scene Management</b>: Manage game scenes seamlessly with Pigframe's intuitive scene transition and control system. This feature allows for smooth transitions and efficient scene organization.\n\n- <b>Efficient Entity-Component System</b>: At the heart of Pigframe is an efficient entity-component system (ECS), which promotes a clean separation of concerns and enhances performance.\n\n- <b>Pythonic Simplicity</b>: Designed with Python's philosophy of simplicity and readability, Pigframe is ideal for those learning game development or individual developers seeking an accessible yet powerful tool.\n\n- <b>Versatile Integration</b>: Pigframe is optimized to work seamlessly with popular Python game libraries like Pyxel and Pygame, making it a perfect choice for diverse and creative game development projects.\n\n#### Getting Started:\nTo get started with Pigframe, simply install the package using pip:\n\n```bash\npip install pigframe\n```\n\n#### Contributing:\nContributions to Pigframe are welcome! Whether it's bug reports, feature requests, or code contributions, your input is valuable in making Pigframe better for everyone.\n\n#### User guide:\n\n- import module\n    ```python\n    from pigframe.world import World, System, Event, Screen, Component\n    ```\n\n- create your own world class which has entities, components, systems, events and screens. It is the core of the game.\n    ```python\n    # Implement World class for your own project.\n    class App(World):\n        def __init__(self):\n            super().__init__()\n            self.init() # write initial process which is unique to the game engine and the game you develop.\n        \n        ... # other game engine unique methods.\n    \n    app = App()\n    ```\n\n- create and remove entity\n    ```python\n    # Create entity to world.\n    entity = app.create_entity() # -> int: entity ID\n    # Remove entity from world.\n    app.remove_entity(entity) # deletes from entites list\n    ```\n\n- add/remove components to entity\n    - add components to entity\n        ```python\n        # Add component to entity ID.\n        # Components are recorded as values where entity ID is the key inside dict.\n        # Component instance are created automatically.\n        app.add_component_to_entity(entity, ComponentA, component_argsA) # ComponentA is not an instance of Component but type.\n        app.add_component_to_entity(entity, ComponentB, component_argsB) # ComponentB is not an instance of Component but type.\n        # getter\n        app.get_component(ComponentA) # Returns the list of tuple: entity id which has ComponentA, component implementation. \n        app.get_components(ComponentA, ComponentB) # Returns the list of tuple: entity id which has ComponentA and ComponentB, component implementations. \n        ```\n\n    - remove components from entity\n        ```python\n        app.add_component_to_entity(ent, ComponentA, component_argsA)\n        app.add_component_to_entity(ent, ComponentB, component_argsB)\n        app.remove_component_from_entity(ent, ComponentA) # remove single component instance from entity\n\n        app.add_component_to_entity(ent, ComponentC, component_argsC)\n        app.remove_components_from_entity(ent, ComponentB, ComponentC) # remove components instances from entity\n        ```\n\n- use component values inside system, event and screen\n    ```python\n    # Example of using get_components() method.\n    class SystemA(System):\n        def process(self):\n            for ent, (component_a, component_b) in self.world.get_components(ComponentA, ComponentB):\n                \"\"\"\n                Returns\n                -------\n                list: list of tuple: entity id, list of components\n                \"\"\"\n                component_a.x += component_b.x\n                component_a.y += component_b.x\n    ```\n\n- use entity\n    ```python\n    # Example of using entity object\n    class EventA(Event):\n        def __process(self):\n            player = self.world.get_entity_object(entity = 0)\n            \"\"\"\n            Returns\n            -----------\n            dict: entity object\n                key: component type\n                value: component\n            \"\"\"\n    ```\n\n- add scenes to world\n    ```python\n    # Add scenes to world.\n    app.add_scenes([\"launch\", \"game\", \"result\", \"settings\"])\n    # scenes getter\n    app.sceneces # -> [[\"launch\", \"game\", \"result\", \"settings\"]\n    ```\n\n- add/remove system to/from world\n    ```python\n    # Add screen to a scene of world. Be sure you have added scenes before adding screens.\n    # System instance are created automatically.\n    app.add_system_to_scenes(SystemA, \"launch\", priority = 0, system_args)\n    # system with its lower priority than the other systems is executed in advance., by default 0.\n    # For here, SystemA().process() runs first in \"launch\" scene.\n    app.add_system_to_scenes(SystemA, \"game\", priority = 0, system_args)\n    app.add_system_to_scenes(SystemB, \"launch\", priority = 1)\n    # Remove system from scene.\n    app.remove_system_from_scene(SystemA, [\"launch\", \"game\"], system_args = system_args)\n    ```\n\n- add/remove screen to/from world\n    ```python\n    # Add screen to a scene of world. Be sure you have added scenes before adding screens.\n    # Screen instance are created automatically.\n    app.add_screen_to_scenes(ScreenA, \"launch\", priority = 0)\n    app.add_screen_to_scenes(ScreenB, \"launch\", priority = 0)\n    app.add_screen_to_scenes(ScreenC, \"game\", priority = 0, screen_args)\n    # Remove screen from scene.\n    app.remove_screen_from_scene(ScreenB, \"launch\")\n    ```\n\n- add/remove event to/from world\n    ```python\n    # Add an event, event triger to a scene of world. Be sure you have added scenes before adding events.\n    # Event instance are created automatically.\n    app.add_event_to_scene(EventA, \"game\", callable_triger, priority = 0)\n    # Remove event from scene.\n    app.remove_event_from_scene(EventA, \"game\")\n    ```\n\n- add scene transitions settings\n    ```python\n    app.add_scene_transition(scene_from = \"launch\", scene_to = \"game\", triger = callable_triger)\n    # triger has to be callable.\n    ```\n\n- execute systems, events and draw screens\n    ```python\n    # Pyxel Example\n    class App(World):\n        ...\n\n        def run(self):\n            pyxel.run(self.update, self.draw)\n\n        def update(self):\n            self.process() # World class has process method.\n            # process method calls these internal methods below.\n            # 1. process_systems()\n            # 1. process_events()\n            # 1. scene_manager.process()\n\n        def draw(self):\n            self.process_screens()\n    ```\n\n    ```python\n    # Pygame Example\n    class App(World):\n        ...\n        \n        def run(self):\n            while self.running:\n                self.update()\n                self.draw()\n                \n        def update(self):\n            self.process()\n        \n        def draw(self):\n            self.process_screens()\n    ```\n\n#### Examples\n| game engine | example | contents |\n| ---- | ----| ---- |\n| Pygame | [control a ball](https://github.com/passive-radio/pigframe/tree/main/src/pigframe/examples/pygame_control_a_ball) | examples of system, event, component, entity and world implementations. |\n| Pyxel | [control a ball](https://github.com/passive-radio/pigframe/tree/main/src/pigframe/examples/pyxel_control_a_ball) | examples of system, event, component, entity and world implementations. |\n",
    "bugtrack_url": null,
    "license": "MIT",
    "summary": "A minimum Python-based game-engine backend library, designed to simplify and streamline the development process of game application.",
    "version": "0.0.9.1",
    "project_urls": {
        "Documentation": "https://github.com/passive-radio/pigframe",
        "Homepage": "https://github.com/passive-radio/pigframe",
        "Source": "https://github.com/passive-radio/pigframe"
    },
    "split_keywords": [
        "python",
        "game",
        "framework"
    ],
    "urls": [
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "1d74025cee08c84fd38535b7ca698e2c65970fb29dff121eae2a09e80b910b4d",
                "md5": "239dc8c2de4e02b8be322a66058db4c4",
                "sha256": "37637333b26a3f11aaf4d157fc564f0ae971b6391d954b4a2310d74bde9d09af"
            },
            "downloads": -1,
            "filename": "pigframe-0.0.9.1-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "239dc8c2de4e02b8be322a66058db4c4",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": ">=3.10",
            "size": 20368,
            "upload_time": "2024-03-02T09:13:16",
            "upload_time_iso_8601": "2024-03-02T09:13:16.404666Z",
            "url": "https://files.pythonhosted.org/packages/1d/74/025cee08c84fd38535b7ca698e2c65970fb29dff121eae2a09e80b910b4d/pigframe-0.0.9.1-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "151607d706b8f9f3751fab914178ea501b5f65324cda3e8efe887810a05fcd1a",
                "md5": "925409a9df5d8c549f9cf7c7c4c20689",
                "sha256": "794f1c1aa7c2882d206b660a12b9caeabb5d327a7f4143dff840bc84397fa7d0"
            },
            "downloads": -1,
            "filename": "pigframe-0.0.9.1.tar.gz",
            "has_sig": false,
            "md5_digest": "925409a9df5d8c549f9cf7c7c4c20689",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.10",
            "size": 412396,
            "upload_time": "2024-03-02T09:13:52",
            "upload_time_iso_8601": "2024-03-02T09:13:52.756561Z",
            "url": "https://files.pythonhosted.org/packages/15/16/07d706b8f9f3751fab914178ea501b5f65324cda3e8efe887810a05fcd1a/pigframe-0.0.9.1.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2024-03-02 09:13:52",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "passive-radio",
    "github_project": "pigframe",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": true,
    "lcname": "pigframe"
}
        
Elapsed time: 0.25630s