A python game engine.

Overview

PursuedPyBear

stable: Documentation Status

canon: Documentation Status

PursuedPyBear, also known as ppb, exists to be an educational resource. Most obviously used to teach computer science, it can be a useful tool for any topic that a simulation can be helpful.

A Game Engine

At its core, ppb provides a number of features that make it perfect for video games. The GameEngine itself provides a pluggable subsystem architecture where adding new features is as simple as subclassing and extending System. Additionally, it contains a state stack of Scenes simple containers that let you organize game scenes and UI screens in a simple way.

The entire system uses an event system which is as extensible as the rest of the system. Register new values to existing event types, and even overwrite the defaults. Adding a new event type to the system is as simple as firing an instance of your new event class with signal. Instead of a publisher system, the engine knows everything in its own scope and only calls objects with appropriate callbacks. The most basic event is Update and your handlers should match the signature on_update(self, update_event, signal).

Guiding Principles

Because ppb started to be a game framework great for learning with, the project has a few longterm goals:

Education Friendly

Non-technical educators should feel comfortable after very little training. While some programming knowledge is required, the ability to think in objects and responses to events allows educators to only focus on their lessons.

Idiomatic Python

A project built on ppb should look like idiomatic Python. It also should look like modern Python. As such, we often add new language features as soon as they're available, letting a new user always know ppb runs on the latest Python.

Object Oriented and Event Driven

ppb games are built out of instances of objects. Each object only has enough information to respond to the event provided, which always includes the current Scene. Because ppb doesn't have a master list of events, you can provide new ones simply to add more granular control over your game.

Hardware Library Agnostic

Because ppb strongly tries to be extensible and pluggable, each hardware extension can provide its own hooks to ppb, and you can nearly seamlessly switch between various Python libraries.

Fun

One of the maintainers put it best:

If it’s not fun to use, we should redo it

ppb is about filing off the rough edges so that the joy of creation and discovery are both emphasized. A new user should be able to build their first game in a few hours, and continue exploring beyond that.

Try it

Install ppb in the standard method:

pip install ppb

ppb provides a run function that makes it simple to start single screen games.

To make a very simple game, make a directory and add an image file called ship.png to it. Then add the following to a python file and run it.

import ppb
from ppb.features.default_sprites import TargetSprite


class Ship(TargetSprite):
    target = ppb.Vector(0, 40)


def setup(scene):
    scene.add(Ship(position=(0, -7)))


ppb.run(setup=setup)

Depending on your operating system, you may need to install additional packages (see installation guide).

Compatibility

ppb is guaranteed compatible with Python 3.6 or later.

Get Involved

The fastest way to get involved is to check out the ongoing discussions. If you're already using ppb feel free to report bugs, suggest enhancements, or ask for new features.

If you want to contribute code, definitely read the relevant portions of Contributing.MD

Comments
  • Move to PySDL

    Move to PySDL

    Completely replace PyGame with PySDL, per #377.

    This should cleanly and completely replace PPB's use of PyGame with PySDL.

    • [x] Rendering
    • [x] Sound
    • [x] Input
    • [x] Abstract shapes

    Closes #377

    Closes #197

    opened by AstraLuma 31
  • Layering (Render Order)

    Layering (Render Order)

    At some point, we're going to need the ability to have a well-defined render order. I see a few ways to do this:

    • Layers: Scenes declare layers by name and order, and sprites declare what layer they're part of
    • Z axis: Sprites grow a z-index, and sprites are sorted based on their z-index
    • Ordered Sprites: Sprites in a scene become ordered and are rendered in that order. Scenes grow methods to reorder sprites.

    My personal opinions: Layers are semantic and meaningful, but require a bit more work in the renderer. Z axis is simple and easily nuanced, but lacks in intrinsic meaning. Ordered Sprites seems awkward to work with and would be more challenging to implement with #229.

    enhancement discussion Renderer Rebuild 
    opened by AstraLuma 18
  • Migrate away from PyGame

    Migrate away from PyGame

    PyGame has been broken on Python 3.8 since 3.8 started its release process (we removed 3.8 support 9mo ago). The PyGame project has no plans to fix this:

    PPB:

    Hey @pygame_org! Any chance of a Py3.8-compatible release? This has become a serious problem for us.

    PyGame:

    No.

    The background is that PyGame has abandoned any PyGame 1 development or maintenance and is devoting all of their effort to PyGame 2. However, there is currently no indications if or when PyGame 2 will have a release of any kind.

    PyGame is causing us to break our own support goals (always the latest Python, tracking the PSF's own support timelines), and they have no plans to fix this.

    This is untennable for PPB, so we must consider our options.

    1. Get PyGame to fix it (This would require extraordinary measures)
    2. Fix PyGame for them (we'd be investing in an external project for an indeterminate amount of time to limp it along until its actual maintainers decides to do their job)
    3. Change PPB's backend engine (proven extremely doable by the pyglet spike, there's just no slam-dunk backends available)

    My assessment is that Option 3 will get us the most long-term value. Before discussing possible backends, a quick run through criteria:

    • Stable on Linux, Windows, and Mac
    • Supports Python versions roughly following PSF's Python lifetime schedules
    • Installable through the Python ecosystem with no additional steps
    • Must not compromise our own goals (eg, force us to apologize about gotchas)

    The backend options we're aware of are:

    • Pyglet: A pure-python system with its own platform code for Windows, Mac, and Linux/X11
    • Thin SDL bindings: There are several projects in this category, some are C, some are ctypes
    • Write our own platform code: While this is technically an option, none of us want to do it and we lack expertise to execute on 3-platform support

    Pyglet's major problem is that there are crashing bugs on mac. (https://github.com/pyglet/pyglet/issues/5 https://bitbucket.org/pyglet/pyglet/issues/199/attempting-to-resize-or-close-pyglet https://bitbucket.org/pyglet/pyglet/issues/229/closing-window-causes-a-crash-on-mac-os) However, I would guess that after these problems are fixed, we would need to invest little-to-none in Pyglet for it to continue to work.

    The SDL bindings currently have primarily shipping problems--they don't ship 3 platforms of binary wheels with SDL bundled. This is something that can be fixed with the application of CI/CD. We may even find it beneficial to adopt or fork one of the projects. I expect on-going upkeep to be low, just keeping up with CPython and SDL releases.

    What direction we go in is a high-level strategic decision.

    discussion 
    opened by AstraLuma 17
  • What do we want in 0.7?

    What do we want in 0.7?

    0.6 is coming to a close, which means we need to start discussing our next release. Since there's a lot more stakeholders this time around, I'm making an explicit issue here to discuss this. This discussion will become the basis for the 0.7 project board.

    If you're suggesting a topic, please put it in a separate message, and everyone who cares can vote up or vote down with a reaction.

    Discussion can go between suggestions. I'll try to keep this OP up to date with all of the suggestions.

    discussion wishlist 
    opened by pathunstrom 15
  • Update Docs Homepage

    Update Docs Homepage

    I'm working on updating the docs homepage to be a bit more concise and readable. I also updated the theme to Alabaster. I have to go, but I will update this with a full list of changes in a little while. This PR closes #409

    hacktoberfest-accepted 
    opened by gideongrinberg 14
  • Program does not load

    Program does not load

    HI I get the following error:

    WARNING:ppb.assetlib:File not found: 'ship.png'

    When the program loads it loads with a blank screen.

    Please advise next steps?

    question not enough info 
    opened by Milan-Chicago 13
  • Mechanized Release Process

    Mechanized Release Process

    Implements a mechanized release process. Under this, the release process would be:

    1. Go to GitHub Release pages
    2. Look at the diff since last version, compile changelog
    3. On the GitHub site, create a tag/release with the changelog and any other release notes
    4. Cirrus CI is responsible for building and uploading to PyPI and GitHub

    Additionally, dev releases are uploaded to PyPI test every time master is updated.

    Version numbers are no longer explicitly listed in the repo, instead being calculated based on the git tags.

    This code is a pretty direct copy from https://github.com/gqlmod/gqlmod (which is in part based on code that @duckinator wrote).

    @nbraud originally proposed this for PPB.

    opened by AstraLuma 12
  • Move things, break loops

    Move things, break loops

    Grab a u-haul! :truck:

    Generally moving things and reducing imports to improve the import loop situation

    • Break up "the machinery implementing a thing" and "a pile of things that use the thing"
    • Prefer module imports to individual imports, so any unavoidable loops don't wreck everything.

    Depends on #306 because I didn't feel like dealing with the merge conflict.

    No docs changes because this doesn't touch anything publicly documented.

    bors 
    opened by AstraLuma 12
  • Resource path extension breaks

    Resource path extension breaks

    If you override resource_path you get the following error, stack trace anonymized:

    Traceback (most recent call last):
      File "scratch.py", line 11, in <module>
        run(scene_kwargs={"set_up": setup})
      File ".venv/lib/python3.7/site-packages/ppb/__init__.py", line 13, in run
        eng.run()
      File ".venv/lib/python3.7/site-packages/ppb/engine.py", line 78, in run
        self.main_loop()
      File ".venv/lib/python3.7/site-packages/ppb/engine.py", line 92, in main_loop
        self.publish()
      File ".venv/lib/python3.7/site-packages/ppb/engine.py", line 113, in publish
        entity.__event__(event, self.signal)
      File ".venv/lib/python3.7/site-packages/ppb/events.py", line 62, in __event__
        meth(bag, fire_event)
      File ".venv/lib/python3.7/site-packages/ppb/systems.py", line 149, in on_render
        resource = self.prepare_resource(game_object)
      File ".venv/lib/python3.7/site-packages/ppb/systems.py", line 164, in prepare_resource
        self.register_renderable(game_object)
      File "/.venv/lib/python3.7/site-packages/ppb/systems.py", line 191, in register_renderable
        self.register(source_path / image_name, image_name)
    TypeError: unsupported operand type(s) for /: 'str' and 'str'
    

    Here's the minimum sample to reproduce:

    from ppb import BaseSprite, run
    
    
    class Player(BaseSprite):
        resource_path = "./resources/"
    
    
    def setup(scene):
        scene.add(Player())
    
    run(scene_kwargs={"set_up": setup})
    
    $ python --version
    Python 3.7.0
    
    bug 
    opened by pathunstrom 11
  • Immutable vectors

    Immutable vectors

    Refactor the sides APIs to not mutate Vectors anymore.

    Closes #188

    (Note: This is WIP because it depends on Vector 1.0 APIs. It is otherwise ready for review.)

    opened by AstraLuma 10
  • Documentation: Fail to generate screen on Mac Mojave (PyGame)

    Documentation: Fail to generate screen on Mac Mojave (PyGame)

    When using Python 3.7 on Mojave, ppb will run but generate a blank window.

    This is not an issue with PPB itself, but will trip up a PPB user. The steps to unblock a user are not complicated - I resolved by using pip3 and python3 - but could be difficult to debug for programmers new to PyGame and unfamiliar with the problem. Problems they may face are what should they searching for, why do they need to specify python3 if their .venv specifies python 3.7 and the python repl successfully loads, etc.

    Docs in a "Known Issues" section (either on readthedocs, here, or both) could help these users.

    Sources:

    https://stackoverflow.com/questions/52718921/problems-getting-pygame-to-show-anything-but-a-blank-screen-on-macos-mojave

    https://github.com/pygame/pygame/issues/555

    docs 
    opened by CaseyFaist 9
  • Crash on exit

    Crash on exit "Error calling SDL_DestroyWindow: Window data not set"

    Summary

    On exit of any ppb example, python crashes with error: "Error calling SDL_DestroyWindow: Window data not set". Traceback below. The examples all appear to run correctly until the the window is closed at which time it looks like Renderer.__exit__ triggers the exception when attempting to call sdl_call(SDL_DestroyWindow, self.window). If pysdl2-dll is downgraded to the last version, the exception is not raised.

    Configuration:

    platform=MacOS 10.15.7 python=3.10.5 ppb=1.1 pysdl2=0.9.14 pysdl2-dll=2.24.0

    All code is running in a dedicated venv and was installed with pip install ppb

    Example code to trigger the problem:

    Problem is triggered on exit of any ppb example in pursuedpybear/examples. The examples appear to run correctly but when the window is closed, the exception is raised and traceback triggered.

    The following is the minimum code required to trigger the exception:

    import ppb
    
    def setup(scene):
        pass
    
    ppb.run(setup)
    

    On running, this opens a blank blue window. Closing the window triggers the traceback.

    Other relevant details:

    On the suggestion of @AstraLuma on Discord, I downgraded pysdl2-dll to the last release (2.0.22.post1) and the examples appear to run correctly without triggering the exception. I will continue to use pysdl2-dll==2.0.22.post1 for now unless I run into other issues with it.

    As an aside, what appears to be an unnecessary warning is printed to stderr when running the code:

    $ python bug.py
    UserWarning: Using SDL2 binaries from pysdl2-dll 2.0.22.post1
    

    Traceback

    UserWarning: Using SDL2 binaries from pysdl2-dll 2.24.0
    Traceback (most recent call last):
      File "/Users/rhet/Dropbox/Code/ppb/bug.py", line 6, in <module>
        ppb.run(setup)
      File "/Users/rhet/.pyenv/versions/3.10.5/envs/ppb-3-105/lib/python3.10/site-packages/ppb/__init__.py", line 152, in run
        with make_engine(setup, starting_scene=starting_scene, title=title, **engine_opts) as eng:
      File "/Users/rhet/.pyenv/versions/3.10.5/envs/ppb-3-105/lib/python3.10/site-packages/ppb/engine.py", line 299, in __exit__
        self.children.__exit__(*exc)
      File "/Users/rhet/.pyenv/versions/3.10.5/envs/ppb-3-105/lib/python3.10/site-packages/ppb/engine.py", line 220, in __exit__
        self._stack.close()
      File "/Users/rhet/.pyenv/versions/3.10.5/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/contextlib.py", line 584, in close
        self.__exit__(None, None, None)
      File "/Users/rhet/.pyenv/versions/3.10.5/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/contextlib.py", line 576, in __exit__
        raise exc_details[1]
      File "/Users/rhet/.pyenv/versions/3.10.5/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/contextlib.py", line 561, in __exit__
        if cb(*exc_details):
      File "/Users/rhet/.pyenv/versions/3.10.5/envs/ppb-3-105/lib/python3.10/site-packages/ppb/systems/renderer.py", line 170, in __exit__
        sdl_call(SDL_DestroyWindow, self.window)
      File "/Users/rhet/.pyenv/versions/3.10.5/envs/ppb-3-105/lib/python3.10/site-packages/ppb/systems/sdl_utils.py", line 54, in sdl_call
        raise SdlError(f"Error calling {func.__name__}: {err.decode('utf-8')}")
    ppb.systems.sdl_utils.SdlError: Error calling SDL_DestroyWindow: Window data not set
    
    opened by RhetTbull 3
  • SDLmixererror when invoking ppb.run()

    SDLmixererror when invoking ppb.run()

    consistently when I invoke ppb.run() it immediately throws a

    ppb.systems.sdl_utils.SdlMixerError: Error calling Mix_Init: Failed loading ModPlug_Tell: The specified procedure could not be found. error

    opened by ace510 4
  • Update Getting Started

    Update Getting Started

    image From Getting Started there are a couple of things that might be confusing to newbies:

    1. It is a bit confusing to say "find a ticket you want to work on and create a PR with just your name changed in contributions." For one, newbies may not know what PR stands for. (Or maybe I don't understand the "WIP" part?) For another, people may just do that and then never complete the issue they said they wanted to work on.
    2. Is the code that has the git clone command for a unix machine? (I never have to do that source part on a Windows machine.)
    3. The code section has people doing a clone of the main repo and not their fork,

    image Also found that the line to install requirements is missing an s

    opened by ProsperousHeart 5
  • Relatively Positioned Sprites

    Relatively Positioned Sprites

    Requires #666

    Specifically intended as subsprites (#577), a RelativeSprite uses a separate attribute for its position. We'll call it relative_position. RelativeSprite.position becomes a property that returns the relative position in relation to the position and rotation of its parent.

    For now, we'll leave RelativeSprite's own rotation alone, but if testing proves it necessary, rotation will need a similar split.

    The basic idea:

    return self.relative_position.rotate(self._parent.rotation) + self.parent.position

    The goal is so that things like skeleton sprites (sprites who are made up of multiple sprites for animations), subordinate sprites (think r-types support ships), and particle systems don't need to worry about where they are in relation to the rest of their objects and can just move themselves, then get places appropriately by the renderer.

    opened by pathunstrom 0
Releases(v1.1)
  • v1.1(Dec 31, 2021)

    The primary win this release cycle is a bunch of fixes of automated delivery systems. We fixed some failures in our documentation pipeline, added an extra badge to the README so we can catch documentation build failures much sooner. We also got some documentation updates thanks to some new contributors!

    We improved our test suites (more new contributors!) by adding test failers to prevent time outs and long test times.

    We did a bunch of fixes to our CI pipeline, fixing configuration failures and fixing our upload scripts!

    Finally, we added a diagnostic tool so you can check which SDL libraries are available on your machine, which should help us hunt down the source of bugs more effectively.

    What's Changed

    • Fixed a issue in viztest/main.py by @abhijeetgupto in https://github.com/ppb/pursuedpybear/pull/638
    • Fixes doc builds on Python 3.7 and earlier. by @pathunstrom in https://github.com/ppb/pursuedpybear/pull/635
    • Adding sjames1958gm - me to CONTRIBUTORs.md by @sjames1958gm in https://github.com/ppb/pursuedpybear/pull/642
    • added instructions on how to do an editable installation by @elenajp in https://github.com/ppb/pursuedpybear/pull/641
    • Added failer to test_contexts to avoid CI timeout by @sgavil in https://github.com/ppb/pursuedpybear/pull/644
    • Deprecation warning for python3.6 by @MichaelCduBois in https://github.com/ppb/pursuedpybear/pull/640
    • Fixed references to Ellipse, free(), and load() in Asset System reference by @tran-dy in https://github.com/ppb/pursuedpybear/pull/639
    • Adds a second docs status badge for canon by @pathunstrom in https://github.com/ppb/pursuedpybear/pull/645
    • Added python3.10 to CI by @sgavil in https://github.com/ppb/pursuedpybear/pull/646
    • Fix #637 by @AstraLuma in https://github.com/ppb/pursuedpybear/pull/647
    • Fix CI by @AstraLuma in https://github.com/ppb/pursuedpybear/pull/629
    • Add sdlinfo tool by @AstraLuma in https://github.com/ppb/pursuedpybear/pull/628
    • Update-gitignore by @avarice-m in https://github.com/ppb/pursuedpybear/pull/653
    • Adds doc-utils pin for read the docs. by @pathunstrom in https://github.com/ppb/pursuedpybear/pull/651
    • updating all events by @phileinSophos in https://github.com/ppb/pursuedpybear/pull/649
    • Update GitHub deploy token by @AstraLuma in https://github.com/ppb/pursuedpybear/pull/655
    • Fix the examples zip job by @pathunstrom in https://github.com/ppb/pursuedpybear/pull/656
    • Fixes list dist uploads. by @pathunstrom in https://github.com/ppb/pursuedpybear/pull/657
    • Version 1.1 by @pathunstrom in https://github.com/ppb/pursuedpybear/pull/658

    New Contributors

    • @abhijeetgupto made their first contribution in https://github.com/ppb/pursuedpybear/pull/638
    • @sjames1958gm made their first contribution in https://github.com/ppb/pursuedpybear/pull/642
    • @elenajp made their first contribution in https://github.com/ppb/pursuedpybear/pull/641
    • @sgavil made their first contribution in https://github.com/ppb/pursuedpybear/pull/644
    • @MichaelCduBois made their first contribution in https://github.com/ppb/pursuedpybear/pull/640
    • @tran-dy made their first contribution in https://github.com/ppb/pursuedpybear/pull/639
    • @avarice-m made their first contribution in https://github.com/ppb/pursuedpybear/pull/653
    • @phileinSophos made their first contribution in https://github.com/ppb/pursuedpybear/pull/649

    Full Changelog: https://github.com/ppb/pursuedpybear/compare/v1.0...v1.1

    Source code(tar.gz)
    Source code(zip)
    examples.zip(178.49 KB)
    ppb-1.1-py3-none-any.whl(52.85 KB)
    ppb-1.1.tar.gz(2.37 MB)
  • v1.1rc3(Dec 30, 2021)

    More fixes to the upload pipeline!

    What's Changed

    • Fixed a issue in viztest/main.py by @abhijeetgupto in https://github.com/ppb/pursuedpybear/pull/638
    • Fixes doc builds on Python 3.7 and earlier. by @pathunstrom in https://github.com/ppb/pursuedpybear/pull/635
    • Adding sjames1958gm - me to CONTRIBUTORs.md by @sjames1958gm in https://github.com/ppb/pursuedpybear/pull/642
    • added instructions on how to do an editable installation by @elenajp in https://github.com/ppb/pursuedpybear/pull/641
    • Added failer to test_contexts to avoid CI timeout by @sgavil in https://github.com/ppb/pursuedpybear/pull/644
    • Deprecation warning for python3.6 by @MichaelCduBois in https://github.com/ppb/pursuedpybear/pull/640
    • Fixed references to Ellipse, free(), and load() in Asset System reference by @tran-dy in https://github.com/ppb/pursuedpybear/pull/639
    • Adds a second docs status badge for canon by @pathunstrom in https://github.com/ppb/pursuedpybear/pull/645
    • Added python3.10 to CI by @sgavil in https://github.com/ppb/pursuedpybear/pull/646
    • Fix #637 by @AstraLuma in https://github.com/ppb/pursuedpybear/pull/647
    • Fix CI by @AstraLuma in https://github.com/ppb/pursuedpybear/pull/629
    • Add sdlinfo tool by @AstraLuma in https://github.com/ppb/pursuedpybear/pull/628
    • Update-gitignore by @avarice-m in https://github.com/ppb/pursuedpybear/pull/653
    • Adds doc-utils pin for read the docs. by @pathunstrom in https://github.com/ppb/pursuedpybear/pull/651
    • updating all events by @phileinSophos in https://github.com/ppb/pursuedpybear/pull/649
    • Update GitHub deploy token by @AstraLuma in https://github.com/ppb/pursuedpybear/pull/655
    • Fix the examples zip job by @pathunstrom in https://github.com/ppb/pursuedpybear/pull/656
    • Fixes list dist uploads. by @pathunstrom in https://github.com/ppb/pursuedpybear/pull/657

    New Contributors

    • @abhijeetgupto made their first contribution in https://github.com/ppb/pursuedpybear/pull/638
    • @sjames1958gm made their first contribution in https://github.com/ppb/pursuedpybear/pull/642
    • @elenajp made their first contribution in https://github.com/ppb/pursuedpybear/pull/641
    • @sgavil made their first contribution in https://github.com/ppb/pursuedpybear/pull/644
    • @MichaelCduBois made their first contribution in https://github.com/ppb/pursuedpybear/pull/640
    • @tran-dy made their first contribution in https://github.com/ppb/pursuedpybear/pull/639
    • @avarice-m made their first contribution in https://github.com/ppb/pursuedpybear/pull/653
    • @phileinSophos made their first contribution in https://github.com/ppb/pursuedpybear/pull/649

    Full Changelog: https://github.com/ppb/pursuedpybear/compare/v1.0...v1.1rc3

    Source code(tar.gz)
    Source code(zip)
    examples.zip(178.49 KB)
    ppb-1.1rc3-py3-none-any.whl(52.89 KB)
    ppb-1.1rc3.tar.gz(2.37 MB)
  • v1.1rc2(Dec 30, 2021)

    Second release candidate (failure was our automated build pipeline.)

    What's Changed

    • Fixed a issue in viztest/main.py by @abhijeetgupto in https://github.com/ppb/pursuedpybear/pull/638
    • Fixes doc builds on Python 3.7 and earlier. by @pathunstrom in https://github.com/ppb/pursuedpybear/pull/635
    • Adding sjames1958gm - me to CONTRIBUTORs.md by @sjames1958gm in https://github.com/ppb/pursuedpybear/pull/642
    • added instructions on how to do an editable installation by @elenajp in https://github.com/ppb/pursuedpybear/pull/641
    • Added failer to test_contexts to avoid CI timeout by @sgavil in https://github.com/ppb/pursuedpybear/pull/644
    • Deprecation warning for python3.6 by @MichaelCduBois in https://github.com/ppb/pursuedpybear/pull/640
    • Fixed references to Ellipse, free(), and load() in Asset System reference by @tran-dy in https://github.com/ppb/pursuedpybear/pull/639
    • Adds a second docs status badge for canon by @pathunstrom in https://github.com/ppb/pursuedpybear/pull/645
    • Added python3.10 to CI by @sgavil in https://github.com/ppb/pursuedpybear/pull/646
    • Fix #637 by @AstraLuma in https://github.com/ppb/pursuedpybear/pull/647
    • Fix CI by @AstraLuma in https://github.com/ppb/pursuedpybear/pull/629
    • Add sdlinfo tool by @AstraLuma in https://github.com/ppb/pursuedpybear/pull/628
    • Update-gitignore by @avarice-m in https://github.com/ppb/pursuedpybear/pull/653
    • Adds doc-utils pin for read the docs. by @pathunstrom in https://github.com/ppb/pursuedpybear/pull/651
    • updating all events by @phileinSophos in https://github.com/ppb/pursuedpybear/pull/649
    • Update GitHub deploy token by @AstraLuma in https://github.com/ppb/pursuedpybear/pull/655
    • Fix the examples zip job by @pathunstrom in https://github.com/ppb/pursuedpybear/pull/656

    New Contributors

    • @abhijeetgupto made their first contribution in https://github.com/ppb/pursuedpybear/pull/638
    • @sjames1958gm made their first contribution in https://github.com/ppb/pursuedpybear/pull/642
    • @elenajp made their first contribution in https://github.com/ppb/pursuedpybear/pull/641
    • @sgavil made their first contribution in https://github.com/ppb/pursuedpybear/pull/644
    • @MichaelCduBois made their first contribution in https://github.com/ppb/pursuedpybear/pull/640
    • @tran-dy made their first contribution in https://github.com/ppb/pursuedpybear/pull/639
    • @avarice-m made their first contribution in https://github.com/ppb/pursuedpybear/pull/653
    • @phileinSophos made their first contribution in https://github.com/ppb/pursuedpybear/pull/649

    Full Changelog: https://github.com/ppb/pursuedpybear/compare/v1.0...v1.1rc2

    Source code(tar.gz)
    Source code(zip)
  • v1.1rc1(Dec 29, 2021)

    What's Changed

    • Fixed a issue in viztest/main.py by @abhijeetgupto in https://github.com/ppb/pursuedpybear/pull/638
    • Fixes doc builds on Python 3.7 and earlier. by @pathunstrom in https://github.com/ppb/pursuedpybear/pull/635
    • Adding sjames1958gm - me to CONTRIBUTORs.md by @sjames1958gm in https://github.com/ppb/pursuedpybear/pull/642
    • added instructions on how to do an editable installation by @elenajp in https://github.com/ppb/pursuedpybear/pull/641
    • Added failer to test_contexts to avoid CI timeout by @sgavil in https://github.com/ppb/pursuedpybear/pull/644
    • Deprecation warning for python3.6 by @MichaelCduBois in https://github.com/ppb/pursuedpybear/pull/640
    • Fixed references to Ellipse, free(), and load() in Asset System reference by @tran-dy in https://github.com/ppb/pursuedpybear/pull/639
    • Adds a second docs status badge for canon by @pathunstrom in https://github.com/ppb/pursuedpybear/pull/645
    • Added python3.10 to CI by @sgavil in https://github.com/ppb/pursuedpybear/pull/646
    • Fix #637 by @AstraLuma in https://github.com/ppb/pursuedpybear/pull/647
    • Fix CI by @AstraLuma in https://github.com/ppb/pursuedpybear/pull/629
    • Add sdlinfo tool by @AstraLuma in https://github.com/ppb/pursuedpybear/pull/628
    • Update-gitignore by @avarice-m in https://github.com/ppb/pursuedpybear/pull/653
    • Adds doc-utils pin for read the docs. by @pathunstrom in https://github.com/ppb/pursuedpybear/pull/651
    • updating all events by @phileinSophos in https://github.com/ppb/pursuedpybear/pull/649
    • Update GitHub deploy token by @AstraLuma in https://github.com/ppb/pursuedpybear/pull/655

    New Contributors

    • @abhijeetgupto made their first contribution in https://github.com/ppb/pursuedpybear/pull/638
    • @sjames1958gm made their first contribution in https://github.com/ppb/pursuedpybear/pull/642
    • @elenajp made their first contribution in https://github.com/ppb/pursuedpybear/pull/641
    • @sgavil made their first contribution in https://github.com/ppb/pursuedpybear/pull/644
    • @MichaelCduBois made their first contribution in https://github.com/ppb/pursuedpybear/pull/640
    • @tran-dy made their first contribution in https://github.com/ppb/pursuedpybear/pull/639
    • @avarice-m made their first contribution in https://github.com/ppb/pursuedpybear/pull/653
    • @phileinSophos made their first contribution in https://github.com/ppb/pursuedpybear/pull/649

    Full Changelog: https://github.com/ppb/pursuedpybear/compare/v1.0...v1.1rc1

    Source code(tar.gz)
    Source code(zip)
    ppb-1.1rc1-py3-none-any.whl(52.89 KB)
    ppb-1.1rc1.tar.gz(2.37 MB)
  • v1.1b1(Dec 28, 2021)

    Draft release using the autogenerated release notes.

    What's Changed

    • Fixed a issue in viztest/main.py by @abhijeetgupto in https://github.com/ppb/pursuedpybear/pull/638
    • Fixes doc builds on Python 3.7 and earlier. by @pathunstrom in https://github.com/ppb/pursuedpybear/pull/635
    • Adding sjames1958gm - me to CONTRIBUTORs.md by @sjames1958gm in https://github.com/ppb/pursuedpybear/pull/642
    • added instructions on how to do an editable installation by @elenajp in https://github.com/ppb/pursuedpybear/pull/641
    • Added failer to test_contexts to avoid CI timeout by @sgavil in https://github.com/ppb/pursuedpybear/pull/644
    • Deprecation warning for python3.6 by @MichaelCduBois in https://github.com/ppb/pursuedpybear/pull/640
    • Fixed references to Ellipse, free(), and load() in Asset System reference by @tran-dy in https://github.com/ppb/pursuedpybear/pull/639
    • Adds a second docs status badge for canon by @pathunstrom in https://github.com/ppb/pursuedpybear/pull/645
    • Added python3.10 to CI by @sgavil in https://github.com/ppb/pursuedpybear/pull/646
    • Fix #637 by @AstraLuma in https://github.com/ppb/pursuedpybear/pull/647
    • Fix CI by @AstraLuma in https://github.com/ppb/pursuedpybear/pull/629
    • Add sdlinfo tool by @AstraLuma in https://github.com/ppb/pursuedpybear/pull/628
    • Update-gitignore by @avarice-m in https://github.com/ppb/pursuedpybear/pull/653
    • Adds doc-utils pin for read the docs. by @pathunstrom in https://github.com/ppb/pursuedpybear/pull/651
    • updating all events by @phileinSophos in https://github.com/ppb/pursuedpybear/pull/649

    New Contributors

    • @abhijeetgupto made their first contribution in https://github.com/ppb/pursuedpybear/pull/638
    • @sjames1958gm made their first contribution in https://github.com/ppb/pursuedpybear/pull/642
    • @elenajp made their first contribution in https://github.com/ppb/pursuedpybear/pull/641
    • @sgavil made their first contribution in https://github.com/ppb/pursuedpybear/pull/644
    • @MichaelCduBois made their first contribution in https://github.com/ppb/pursuedpybear/pull/640
    • @tran-dy made their first contribution in https://github.com/ppb/pursuedpybear/pull/639
    • @avarice-m made their first contribution in https://github.com/ppb/pursuedpybear/pull/653
    • @phileinSophos made their first contribution in https://github.com/ppb/pursuedpybear/pull/649

    Full Changelog: https://github.com/ppb/pursuedpybear/compare/v1.0...v1.1b1

    Source code(tar.gz)
    Source code(zip)
    ppb-1.1b1-py3-none-any.whl(52.88 KB)
    ppb-1.1b1.tar.gz(2.37 MB)
  • v1.0(Aug 29, 2021)

    It's time:

    ppb is officially 1.0.

    What this means:

    The core utilities all exist, games can be made (and published!) using ppb. Sprites, rendering, sound, text, and scene management are all built in and good to go.

    We've shipped a number of helpful utilities as well in the features library over the last few years as well.

    As a note: We still do not have all the tutorials we would want, but those can be included with future patch and minor version releases.

    Change Notes

    Library

    • #620: Be more helpful when removing a non-child
    • #618: Add a blessed way to handle deprecations.
    • #627: Fix up some annotation issues
    • #625: Fix sound
    • #624: Fix asset caching
    • #634: Replace print calls with logging calls.

    Documentation

    • #609: Add a docstring to ppb.engine
    • #610: Updates maintenance-schedules documentation for 1.0 release.
    • #611: changed pos to position in README
    • #621: Publish examples
    • #622: Nix the last of the posers
    • #632: Removed references to the tutorial project.
    • #633: Add install instructions for pacman managed systems.

    Testing

    • #616: Adding Failer to test_signal
    • #617: Adding Failer to test_signal_once
    Source code(tar.gz)
    Source code(zip)
    ppb-1.0-py3-none-any.whl(52.39 KB)
    ppb-1.0.tar.gz(2.37 MB)
  • v1.0b1(May 27, 2021)

    1.0!!! :partying_face:

    Piper and Jamie are both ridiculously excited to reach this milestone. However, you won't see any big, sweeping changes. Just tidying up and cleaning house.

    Library

    • #620: Be more helpful when removing a non-child
    • #618: Add a blessed way to handle deprecations.
    • #627: Fix up some annotation issues
    • #625: Fix sound
    • #624: Fix asset caching

    Documentation

    • #609: Add a docstring to ppb.engine
    • #610: Updates maintenance-schedules documentation for 1.0 release.
    • #611: changed pos to position in README
    • #621: Publish examples
    • #622: Nix the last of the posers

    Testing

    • #616: Adding Failer to test_signal
    • #617: Adding Failer to test_signal_once
    Source code(tar.gz)
    Source code(zip)
    examples.zip(180.87 KB)
    ppb-1.0b1-py3-none-any.whl(52.38 KB)
    ppb-1.0b1.tar.gz(2.37 MB)
  • v1.0a1(May 13, 2021)

  • v0.12.0(Mar 22, 2021)

    This release is less focused than the past because ppb was able to participate in multiple sprints! That means we've had 18 PRs approved and merged with six new contributors!

    The biggest new feature is a change to the shapes assets: We now have Rectangle and Ellipse available for use. They work just like their original counterparts Square and Circle, but accept a new keyword argument: aspect_ratio. It accepts a tuple of (width, height) and will render the appropriate shape. Triangle got this power as well, so now you can get new interesting shapes out of that, too! And for completion sake, while Rectangle(r, g, b) still outputs a square, we kept Circle and Square to keep your existing games working as expected!

    New

    • Rectangle and Ellipse shape assets added! #576
    • New example demonstrating building a RectangleSprite with an image. #581 (New Contributor!)
    • Module docstring added to default_sprites feature module. #591
    • Module docstring added to systemslib #592
    • Module docstring added to clocks module. #594

    Changed

    • Triangle shape asset now accepts an aspect_ratio keyword argument. #576
    • Added a Failer subsystem to some tests. This doesn't break the tests, but protects us from timeouts. #586 #587
    • Renamed BaseScene to Scene. Don't worry, not breaking, but BaseScene is now deprecated. #583 (New Contributor!)
    • Improved the warning thrown by the asset loading system when an image isn't found. #584 (New Contributor!)
    • Removed the use of deprecated attributes in test_gom.py #557

    Removed

    • Removed ROADMAP.md (It was stale and we have changed how we determine our roadmap.) #597

    Fixed

    • Fixed the position keyword in the external_event_loop_integration example. #572 (New Contributor!)

    Docs

    • Fixed the getting started documentation for Windows. We referenced the wrong virtual environment directory! #570 (New Contributor!)
    • Type fixes throughout the documentation. #579 (New Contributor!)
    • Adds documentation for installing the latest ppb code from canon. #540
    • Added a note that some systems have extra install instructions to the README #588
    • Fixed titles casing in the CONTRIBUTING.md #590 (New Contributor!)
    • New cookbook entry demonstrating the basics of using keyword args to run for engine configuration. #598
    • Modify prerequisites to mention 3.7. We still support 3.6 but the end is approaching. #595
    Source code(tar.gz)
    Source code(zip)
    ppb-0.12.0-py3-none-any.whl(51.49 KB)
    ppb-0.12.0.tar.gz(2.37 MB)
  • v0.12.0b1(Mar 13, 2021)

    This release is less focused than the past because ppb was able to participate in multiple sprints! That means we've had 18 PRs approved and merged with six new contributors!

    The biggest new feature is a change to the shapes assets: We now have Rectangle and Ellipse available for use. They work just like their original counterparts Square and Circle, but accept a new keyword argument: aspect_ratio. It accepts a tuple of (width, height) and will render the appropriate shape. Triangle got this power as well, so now you can get new interesting shapes out of that, too! And for completion sake, while Rectangle(r, g, b) still outputs a square, we kept Circle and Square to keep your existing games working as expected!

    New

    • Rectangle and Ellipse shape assets added! #576
    • New example demonstrating building a RectangleSprite with an image. #581 (New Contributor!)
    • Module docstring added to default_sprites feature module. #591
    • Module docstring added to systemslib #592
    • Module docstring added to clocks module. #594

    Changed

    • Triangle shape asset now accepts an aspect_ratio keyword argument. #576
    • Added a Failer subsystem to some tests. This doesn't break the tests, but protects us from timeouts. #586 #587
    • Renamed BaseScene to Scene. Don't worry, not breaking, but BaseScene is now deprecated. #583 (New Contributor!)
    • Improved the warning thrown by the asset loading system when an image isn't found. #584 (New Contributor!)

    Removed

    • Removed ROADMAP.md (It was stale and we have changed how we determine our roadmap.) #597

    Fixed

    • Fixed the position keyword in the external_event_loop_integration example. #572 (New Contributor!)

    Docs

    • Fixed the getting started documentation for Windows. We references the wrong virtual environment directory! #570 (New Contributor!)
    • Type fixes throughout the documentation. #579 (New Contributor!)
    • Adds documentation for installing the latest ppb code from canon. #540
    • Added a note that some systems have extra install instructions to the README #588
    • Fixed titles casing in the CONTRIBUTING.md #590 (New Contributor!)
    • New cookbook entry demonstrating the basics of using keyword args to run for engine configuration. #598
    • Modify prerequisites to mention 3.7. We still support 3.6 but the end is approaching. #595
    Source code(tar.gz)
    Source code(zip)
    ppb-0.12.0b1-py3-none-any.whl(51.52 KB)
    ppb-0.12.0b1.tar.gz(2.37 MB)
  • v0.11.0(Dec 30, 2020)

    This release is fairly small, but has a much bigger number of new contributors thanks to Hacktoberfest 2020.

    The biggest additional feature is targeted events: Provide a list or tuple to the 'targets' keyword of the signal function and the engine will only send the event to those objects. Leave out for existing behavior.

    Special thanks to our new contributors!

    Example:

    signal(MyEvent, targets=[self.sibling1, self.sibling2, self.sibling3])
    

    New

    • Targeted events! (#538)

    Changed

    • GameObjects now use deque instead of list for their walk implementation. (#541)

    Removed

    • Mouse events no longer have a screen_position attribute. (#535, #539) New Contibutor!
    • We no longer support pos as a keyword argument on sprites. Use position instead. (#543)

    Fixed

    • Attempted fix of OGG race condition. (#527) New Contributor!

    Docs

    • An update to the docs homepage. (#529) New Contributor!
    • Added maintanence schedule documentation. (#554)
    • Added default branch documentation. (#556)
    Source code(tar.gz)
    Source code(zip)
    ppb-0.11.0-py3-none-any.whl(50.53 KB)
    ppb-0.11.0.tar.gz(2.37 MB)
  • v0.11.0b1(Dec 6, 2020)

    It's that time again: We're freezing our feature set for the v0.11.0 release! This release is fairly small, but has a much bigger number of new contributors thanks to Hacktoberfest 2020.

    The biggest additional feature is targeted events: Provide a 'targets' keyword to the signal function and the engine will only send the event to those objects. Leave out for existing behavior.

    Example:

    signal(MyEvent, targets=[self.sibling1, self.sibling2, self.sibling3])
    

    New

    • Targeted events! (#538)

    Changed

    • GameObjects now use deque instead of list for their walk implementation. (#541)

    Removed

    • Mouse events no longer have a screen_position attribute. (#535, #539) New Contibutor!
    • We no longer support pos as a keyword argument on sprites. Use position instead. (#543)

    Fixed

    • Attempted fix of OGG race condition. (#527) New Contributor!

    Docs

    • An update to the docs homepage. (#529) New Contributor!
    • Added maintanence schedule documentation. (#554)
    • Added default branch documentation. (#556)
    Source code(tar.gz)
    Source code(zip)
    ppb-0.11.0b1-py3-none-any.whl(50.55 KB)
    ppb-0.11.0b1.tar.gz(2.37 MB)
  • v0.10.0(Oct 2, 2020)

    Changelog

    We've updated ppb with a new Game Object Model. All objects can now have children that respond to events, including Systems and Sprites.

    New

    • Game Object Model (gomlib) (#500)
    • You can now show or hide the cursor using scene.show_cursor attribute. (#504)
    • Improved error when adding a type to GameObject. (#511) New Contributor!

    Changed

    • scenes.GameObjectContainer redesigned to be gomlib.Children (#500)
    • BaseScene now inherits from gomlib.GameObject (#500)
    • sprites.BaseSprite now inherits from gomlib.GameObject (#500)
    • systemslib.System now inherits from gomlib.GameObject (#500)
    • _sdl_utils has been renamed sdl_utils (#503)
    • Event loop now walks the GOM (#507)
    • PreRender events now include a time_delta attribute. (#487)
    • GameEngine can now take an instantiated scene as its first scene (#516)
    • GameEngine is now a GameObject with a stack for scene management. (#519)

    Docs

    • Fixed indentation in the Getting Started guide. (#494) New contributor!
    • Assets docs fixed (#506)
    • The example in the README.md updated (#505)
    • Improved install documentation for RHEL systems. (#515) New Contributor!

    Operational

    • We've started testing ppb against Python 3.9 (#509)
    • Switched to the duckinator/bork container for building wheels. (#499)
    Source code(tar.gz)
    Source code(zip)
    ppb-0.10.0-py3-none-any.whl(50.43 KB)
    ppb-0.10.0.tar.gz(2.34 MB)
  • v0.10.0b1(Sep 13, 2020)

    Changelog

    This is the first beta for v0.10.0.

    Lots of activity: Documentation touch ups, new APIs, improved error messages.

    Big thing is the Game Object Model (GOM), which effectively lets us add objects that respond to events at any level of the graph, including as children to sprites!

    New

    • Game Object Model (gomlib) (#500)
    • You can now show or hide the cursor using scene.show_cursor attribute. (#504)
    • Improved error when adding a type to GameObject. (#511) New Contributor!

    Changed

    • scenes.GameObjectContainer redesigned to be gomlib.Children (#500)
    • BaseScene now inherits from gomlib.GameObject (#500)
    • sprites.BaseSprite now inherits from gomlib.GameObject (#500)
    • systemslib.System now inherits from gomlib.GameObject (#500)
    • _sdl_utils has been renamed sdl_utils (#503)
    • Event loop now walks the GOM (#507)
    • PreRender events now include a time_delta attribute. (#487)
    • GameEngine can now take an instantiated scene as its first scene (#516)
    • GameEngine is now a GameObject with a stack for scene management. (#519)

    Docs

    • Fixed indentation in the Getting Started guide. (#494) New contributor!
    • Assets docs fixed (#506)
    • The example in the README.md updated (#505)
    • Improved install documentation for RHEL systems. (#515) New Contributor!

    Operational

    • We've started testing ppb against Python 3.9 (#509)
    • Switched to the duckinator/bork container for building wheels. (#499)
    Source code(tar.gz)
    Source code(zip)
    ppb-0.10.0b1-py3-none-any.whl(48.44 KB)
    ppb-0.10.0b1.tar.gz(2.34 MB)
  • v0.9.0(Jun 20, 2020)

    Better Rendering

    The biggest feature of note is that we now support Text rendering! As part of supporting that, we did a full revamp on the asset loading pipeline, improving the background loading and processing and allowing assets that depend on other assets (ChainedAsset).

    We also spend some time fixing the Camera API: You no longer need to calculate your pixel ratios directly! Tell the camera how many game units you want visible in frame and it'll handle the rest. A last minute addition to the feature list is support for opacity and tint on sprites!

    Sprites received a long waiting refactor and now we can support both square shaped sprites and rectangle shaped sprites. This means we have ppb.sprites.Sprite and ppb.sprites.RectangleSprite as concrete options when building your games. We removed the Sides magic object that supported Sprite.top.left and replaced it with a more pythonic Sprite.top_left and similar. Our root shape mix-in now is RectangleShapeMixin, but our default sprite is still a square and Sprite.size still works as expected.

    Outside of those things, we spent a lot of effort on improving our documentation: a lot more detail on a bunch of new pages. We also added default sprite behaviors in features which allow you to do basic motion without writing your own handlers.

    This release is the feature freeze for v0.9.0, no new features will be accepted and only fixes to features included in this release can be accepted.

    New

    • Chained Assets (#436)
    • Fonts and Text assets (#443)
    • TargetSprite (#456, #458)
    • RectangleShapeMixin (#376)
    • Ordinal direction named unit vectors (#463)
    • Added Hypothesis profiles for local testing. (#469)
    • Rectangular sprite rendering (#466)
    • Support for Sprite.opacity and Sprite.tint in Renderer (#474)

    Changed

    • Assets API changed to support better background loading. (#432)
    • Shape assets now setup in the background (#435)
    • Camera interface has had an entire overhaul. (#439)
    • SquareShapeMixin now extended RectangleShapeMixin (#376)
    • Replaced github actions with Binny (#465)
    • sprite_in_viewport replaced with sprite_in_view (#467)
    • Switched from time.monotonic to time.perf_counter across the library. (#431)
    • We now treat sphinx warning as errors. This should mean less time with broken docs. (#476)

    Removed

    • Sides interface (#376)
    • Stale changelog removed from README.md (#472)
    • DoNotRender flag (#477)
    • ppb.BaseSprite finally removed! (#478)

    Fixed

    • Asset loading when using REPLs or Jupyter notebooks fixed. (#446)

    Docs

    • Better docs about the core ppb name space, including run and make_engine (#451)
    • Text rendering docs (#454)
    • Specific install instructions for RHEL and derivatives. (From a new contributor!) (#455)
    • Improved Event docs (#459)
    • Improved Sprite docs (#471)
    Source code(tar.gz)
    Source code(zip)
    ppb-0.9.0-py3-none-any.whl(48.41 KB)
    ppb-0.9.0.tar.gz(2.34 MB)
  • v0.9.0rc1(Jun 13, 2020)

    Better Rendering

    The biggest feature of note is that we now support Text rendering! As part of supporting that, we did a full revamp on the asset loading pipeline, improving the background loading and processing and allowing assets that depend on other assets (ChainedAsset).

    We also spend some time fixing the Camera API: You no longer need to calculate your pixel ratios directly! Tell the camera how many game units you want visible in frame and it'll handle the rest. A last minute addition to the feature list is support for opacity and tint on sprites!

    Sprites received a long waiting refactor and now we can support both square shaped sprites and rectangle shaped sprites. This means we have ppb.sprites.Sprite and ppb.sprites.RectangleSprite as concrete options when building your games. We removed the Sides magic object that supported Sprite.top.left and replaced it with a more pythonic Sprite.top_left and similar. Our root shape mix-in now is RectangleShapeMixin, but our default sprite is still a square and Sprite.size still works as expected.

    Outside of those things, we spent a lot of effort on improving our documentation: a lot more detail on a bunch of new pages. We also added default sprite behaviors in features which allow you to do basic motion without writing your own handlers.

    This release is the feature freeze for v0.9.0, no new features will be accepted and only fixes to features included in this release can be accepted.

    New

    • Chained Assets (#436)
    • Fonts and Text assets (#443)
    • TargetSprite (#456, #458)
    • RectangleShapeMixin (#376)
    • Ordinal direction named unit vectors (#463)
    • Added Hypothesis profiles for local testing. (#469)
    • Rectangular sprite rendering (#466)
    • Support for Sprite.opacity and Sprite.tint in Renderer (#474)

    Changed

    • Assets API changed to support better background loading. (#432)
    • Shape assets now setup in the background (#435)
    • Camera interface has had an entire overhaul. (#439)
    • SquareShapeMixin now extended RectangleShapeMixin (#376)
    • Replaced github actions with Binny (#465)
    • sprite_in_viewport replaced with sprite_in_view (#467)
    • Switched from time.monotonic to time.perf_counter across the library. (#431)
    • We now treat sphinx warning as errors. This should mean less time with broken docs. (#476)

    Removed

    • Sides interface (#376)
    • Stale changelog removed from README.md (#472)
    • DoNotRender flag (#477)
    • ppb.BaseSprite finally removed! (#478)

    Fixed

    • Asset loading when using REPLs or Jupyter notebooks fixed. (#446)

    Docs

    • Better docs about the core ppb name space, including run and make_engine (#451)
    • Text rendering docs (#454)
    • Specific install instructions for RHEL and derivatives. (From a new contributor!) (#455)
    • Improved Event docs (#459)
    • Improved Sprite docs (#471)

    Changes since v0.9.0b2

    This release is identical to Beta 2.

    Source code(tar.gz)
    Source code(zip)
    ppb-0.9.0rc1-py3-none-any.whl(48.44 KB)
    ppb-0.9.0rc1.tar.gz(2.34 MB)
  • v0.9.0b2(Jun 6, 2020)

    Better Rendering

    The biggest feature of note is that we now support Text rendering! As part of supporting that, we did a full revamp on the asset loading pipeline, improving the background loading and processing and allowing assets that depend on other assets (ChainedAsset).

    We also spend some time fixing the Camera API: You no longer need to calculate your pixel ratios directly! Tell the camera how many game units you want visible in frame and it'll handle the rest. A last minute addition to the feature list is support for opacity and tint on sprites!

    Sprites received a long waiting refactor and now we can support both square shaped sprites and rectangle shaped sprites. This means we have ppb.sprites.Sprite and ppb.sprites.RectangleSprite as concrete options when building your games. We removed the Sides magic object that supported Sprite.top.left and replaced it with a more pythonic Sprite.top_left and similar. Our root shape mix-in now is RectangleShapeMixin, but our default sprite is still a square and Sprite.size still works as expected.

    Outside of those things, we spent a lot of effort on improving our documentation: a lot more detail on a bunch of new pages. We also added default sprite behaviors in features which allow you to do basic motion without writing your own handlers.

    This release is the feature freeze for v0.9.0, no new features will be accepted and only fixes to features included in this release can be accepted.

    New

    • Chained Assets (#436)
    • Fonts and Text assets (#443)
    • TargetSprite (#456, #458)
    • RectangleShapeMixin (#376)
    • Ordinal direction named unit vectors (#463)
    • Added Hypothesis profiles for local testing. (#469)
    • Rectangular sprite rendering (#466)
    • Support for Sprite.opacity and Sprite.tint in Renderer (#474)

    Changed

    • Assets API changed to support better background loading. (#432)
    • Shape assets now setup in the background (#435)
    • Camera interface has had an entire overhaul. (#439)
    • SquareShapeMixin now extended RectangleShapeMixin (#376)
    • Replaced github actions with Binny (#465)
    • sprite_in_viewport replaced with sprite_in_view (#467)
    • Switched from time.monotonic to time.perf_counter across the library. (#431)
    • We now treat sphinx warning as errors. This should mean less time with broken docs. (#476)

    Removed

    • Sides interface (#376)
    • Stale changelog removed from README.md (#472)
    • DoNotRender flag (#477)
    • ppb.BaseSprite finally removed! (#478)

    Fixed

    • Asset loading when using REPLs or Jupyter notebooks fixed. (#446)

    Docs

    • Better docs about the core ppb name space, including run and make_engine (#451)
    • Text rendering docs (#454)
    • Specific install instructions for RHEL and derivatives. (From a new contributor!) (#455)
    • Improved Event docs (#459)
    • Improved Sprite docs (#471)

    Changes since v0.9.0b1

    • Fixed Text rendering when sharing the same Font object.
    Source code(tar.gz)
    Source code(zip)
    ppb-0.9.0b2-py3-none-any.whl(48.42 KB)
    ppb-0.9.0b2.tar.gz(2.34 MB)
  • v0.9.0b1(May 23, 2020)

    Better Rendering

    The biggest feature of note is that we now support Text rendering! As part of supporting that, we did a full revamp on the asset loading pipeline, improving the background loading and processing and allowing assets that depend on other assets (ChainedAsset).

    We also spend some time fixing the Camera API: You no longer need to calculate your pixel ratios directly! Tell the camera how many game units you want visible in frame and it'll handle the rest. A last minute addition to the feature list is support for opacity and tint on sprites!

    Sprites received a long waiting refactor and now we can support both square shaped sprites and rectangle shaped sprites. This means we have ppb.sprites.Sprite and ppb.sprites.RectangleSprite as concrete options when building your games. We removed the Sides magic object that supported Sprite.top.left and replaced it with a more pythonic Sprite.top_left and similar. Our root shape mix-in now is RectangleShapeMixin, but our default sprite is still a square and Sprite.size still works as expected.

    Outside of those things, we spent a lot of effort on improving our documentation: a lot more detail on a bunch of new pages. We also added default sprite behaviors in features which allow you to do basic motion without writing your own handlers.

    This release is the feature freeze for v0.9.0, no new features will be accepted and only fixes to features included in this release can be accepted.

    New

    • Chained Assets (#436)
    • Fonts and Text assets (#443)
    • TargetSprite (#456, #458)
    • RectangleShapeMixin (#376)
    • Ordinal direction named unit vectors (#463)
    • Added Hypothesis profiles for local testing. (#469)
    • Rectangular sprite rendering (#466)
    • Support for Sprite.opacity and Sprite.tint in Renderer (#474)

    Changed

    • Assets API changed to support better background loading. (#432)
    • Shape assets now setup in the background (#435)
    • Camera interface has had an entire overhaul. (#439)
    • SquareShapeMixin now extended RectangleShapeMixin (#376)
    • Replaced github actions with Binny (#465)
    • sprite_in_viewport replaced with sprite_in_view (#467)
    • Switched from time.monotonic to time.perf_counter across the library. (#431)
    • We now treat sphinx warning as errors. This should mean less time with broken docs. (#476)

    Removed

    • Sides interface (#376)
    • Stale changelog removed from README.md (#472)
    • DoNotRender flag (#477)
    • ppb.BaseSprite finally removed! (#478)

    Fixed

    • Asset loading when using REPLs or Jupyter notebooks fixed. (#446)

    Docs

    • Better docs about the core ppb name space, including run and make_engine (#451)
    • Text rendering docs (#454)
    • Specific install instructions for RHEL and derivatives. (From a new contributor!) (#455)
    • Improved Event docs (#459)
    • Improved Sprite docs (#471)
    Source code(tar.gz)
    Source code(zip)
    ppb-0.9.0b1-py3-none-any.whl(48.37 KB)
    ppb-0.9.0b1.tar.gz(2.34 MB)
  • v0.9.0a1(May 2, 2020)

    This is a development release. All APIs subject to change. If you want to help test, you can target the latest alpha release to test new features.

    Since v0.8.0:

    The big change is that PPB now supports basic text rendering (no wrapping, single style). This is available via the ppb.Text and ppb.Font assets. (docs)

    As part of this, the asset framework underwent significant refactoring. The data flow is now much simpler, many of the aspects have been turned into mixins, and we've added support for chained assets: assets which do additional background processing after other needed assets are loaded.

    The other major feature change that you need to worry about is the Camera. The important details are that the idea of a viewport has gone away. The camera's borders (left, right, top, bottom) will match the edge of the screen. Additionally, the Camera does not initialize with the wrong aspect ratio. To do this, we have the Renderer insert the camera on_scene_started. If you do any initial positioning of the Camera, do it in the scene or a sprite on_scene_started handler. If all of your camera manipulation happens in on_pre_render this detail won't affect you.

    New

    • Chained Assets (#436)
    • Fonts and Text assets (#443)

    Changed

    • Assets API changed to support better background loading. (#432)
    • Shape assets now setup in the background (#435)
    • Camera interface has had an entire overhaul. (#439)

    Docs

    • Better docs about the core ppb name space, including run and make_engine (#451)
    • Text rendering docs (#454)
    • Specific install instructions for RHEL and derivatives. (From a new contributor!) (#455)
    Source code(tar.gz)
    Source code(zip)
    ppb-0.9.0a1-py3-none-any.whl(44.62 KB)
    ppb-0.9.0a1.tar.gz(2.33 MB)
  • v0.8.0(Apr 20, 2020)

    This release does only two things: dramatically optimizes event dispatch and replaces PyGame with PySDL2.

    First, the simple one: event dispatch performance was dramatically optimized, because the performance of the previous method was just bad.

    The big thing is that PursuedPyBear no longer depends on PyGame and uses PySDL2 instead. This was done because PyGame has never supported Python 3.8 in a final release, despite 3.8 being released in October, 2019. We are now using PySDL2 instead. This should require no changes from our uses, although Linux uses will require additional steps to install the SDL libraries (Debian: libsdl2-2.0-0 libsdl2-mixer-2.0-0 libsdl2-image-2.0-0 libsdl2-gfx-1.0-0).

    Additionally, a pass was made at improving the docs: Double checking the accuracy of existing documentation, adding detailed documentation to ppb.engine.GameEngine and adding our first discussion pages. One discussing the design and constraints of the Asset system and another outlining the principles of ppb as a project.

    We anticipate this release to have no impact on the vast majority of users, and minimal impact on the rest.

    Added:

    • Python 3.8 is now supported
    • Asset.free(): Function that can be called by __del__() to release resources held. (#387)
    • Sounds now supports .wav, AIFF, VOC, OGG (Vorbis & Opus), MP3, and FLAC, as well as potentially more depending on the system configuration. (#387)
    • Documentation pages. (#416, #375, #423)

    Fixed:

    • The initial scene now gets its SceneStarted event (rolled in to #387, 6e96280685d1ab2668f900d0c3374ef650380de1)

    Changed:

    • BadEventHandlerException was moved from ppb.eventlib to ppb.errors. (#402)
    • Documentation updates (#404)
    • Various performance improvements. (#402, #415)

    Removed:

    • ppb.eventlib, EventMixin, and __event__(). Everything they used to do has been inlined into the Engine. (#402)

    Internal:

    • The release process was changed to be more automatic with significantly fewer human steps. (#380)
    • One of the visual tests wasn't working. It was an error with the test, now fixed. (#434)
    Source code(tar.gz)
    Source code(zip)
    ppb-0.8.0-py3-none-any.whl(40.90 KB)
    ppb-0.8.0.tar.gz(261.88 KB)
  • v0.8.0rc2(Apr 18, 2020)

    This release does only two things: dramatically optimizes event dispatch and replaces PyGame with PySDL2.

    First, the simple one: event dispatch performance was dramatically optimized, because the performance of the previous method was just bad.

    The big thing is that PursuedPyBear no longer depends on PyGame and uses PySDL2 instead. This was done because PyGame has never supported Python 3.8 in a final release, despite 3.8 being released in October, 2019. We are now using PySDL2 instead. This should require no changes from our uses, although Linux uses will require additional steps to install the SDL libraries (Debian: libsdl2-2.0-0 libsdl2-mixer-2.0-0 libsdl2-image-2.0-0 libsdl2-gfx-1.0-0).

    Additionally, a pass was made at improving the docs: Double checking the accuracy of existing documentation, adding detailed documentation to ppb.engine.GameEngine and adding our first discussion pages. One discussing the design and constraints of the Asset system and another outlining the principles of ppb as a project.

    We anticipate this release to have no impact on the vast majority of users, and minimal impact on the rest.

    Added:

    • Python 3.8 is now supported
    • Asset.free(): Function that can be called by __del__() to release resources held. (#387)
    • Sounds now supports .wav, AIFF, VOC, OGG/Vorbis, MP3, and FLAC, as well as potentially more depending on the system configuration. (#387)
    • Documentation pages. (#416, #375, #423)

    Fixed:

    • The initial scene now gets its SceneStarted event (rolled in to #387, 6e96280685d1ab2668f900d0c3374ef650380de1)
    • One of the visual tests wasn't working. It was an error with the test, now fixed. (#434)
    • Sound volume controls require integers, we now cast the value you provide to an integer. (#427)

    Changed:

    • BadEventHandlerException was moved from ppb.eventlib to ppb.errors. (#402)
    • Documentation updates (#404)
    • Various performance improvements. (#402, #415)

    Removed:

    • ppb.eventlib, EventMixin, and __event__(). Everything they used to do has been inlined into the Engine. (#402)

    Internal:

    • The release process was changed to be more automatic with significantly fewer human steps. (#380)
    Source code(tar.gz)
    Source code(zip)
  • v0.8.0rc1(Apr 16, 2020)

    This release does only two things: dramatically optimizes event dispatch and replaces PyGame with PySDL2.

    First, the simple one: event dispatch performance was dramatically optimized, because the performance of the previous method was just bad.

    The big thing is that PursuedPyBear no longer depends on PyGame and uses PySDL2 instead. This was done because PyGame has never supported Python 3.8 in a final release, despite 3.8 being released in October, 2019. We are now using PySDL2 instead. This should require no changes from our uses, although Linux uses will require additional steps to install the SDL libraries (Debian: libsdl2-2.0-0 libsdl2-mixer-2.0-0 libsdl2-image-2.0-0 libsdl2-gfx-1.0-0).

    Additionally, a pass was made at improving the docs: Double checking the accuracy of existing documentation, adding detailed documentation to ppb.engine.GameEngine and adding our first discussion pages. One discussing the design and constraints of the Asset system and another outlining the principles of ppb as a project.

    We anticipate this release to have no impact on the vast majority of users, and minimal impact on the rest.

    Added:

    • Python 3.8 is now supported
    • Asset.free(): Function that can be called by __del__() to release resources held. (#387)
    • Sounds now supports .wav, AIFF, VOC, OGG/Vorbis, MP3, and FLAC, as well as potentially more depending on the system configuration. (#387)
    • Documentation pages. (#416, #375, #423)

    Fixed:

    • The initial scene now gets its SceneStarted event (rolled in to #387, 6e96280685d1ab2668f900d0c3374ef650380de1)

    Changed:

    • BadEventHandlerException was moved from ppb.eventlib to ppb.errors. (#402)
    • Documentation updates (#404)
    • Various performance improvements. (#402, #415)

    Removed:

    • ppb.eventlib, EventMixin, and __event__(). Everything they used to do has been inlined into the Engine. (#402)

    Internal:

    • The release process was changed to be more automatic with significantly fewer human steps. (#380)
    Source code(tar.gz)
    Source code(zip)
    ppb-0.8.0rc1-py3-none-any.whl(40.93 KB)
    ppb-0.8.0rc1.tar.gz(261.95 KB)
  • v0.8.0b1(Mar 30, 2020)

    This release does only two things: dramatically optimizes event dispatch and replaces PyGame with PySDL2.

    First, the simple one: event dispatch performance was dramatically optimized, because the performance of the previous method was just bad.

    The big thing is that PursuedPyBear no longer depends on PyGame and uses PySDL2 instead. This was done because PyGame has never supported Python 3.8 in a final release, despite 3.8 being released in October, 2019. We are now using PySDL2 instead. This should require no changes from our uses, although Linux uses will require additional steps to install the SDL libraries (Debian: libsdl2-2.0-0 libsdl2-mixer-2.0-0 libsdl2-image-2.0-0 libsdl2-gfx-1.0-0).

    We anticipate this release to have no impact on the vast majority of users, and minimal impact on the rest.

    Added:

    • Python 3.8 is now supported
    • Asset.free(): Function that can be called by __del__() to release resources held. (#387)
    • Sounds now supports .wav, AIFF, VOC, OGG/Vorbis, MP3, and FLAC, as well as potentially more depending on the system configuration. (#387)

    Fixed:

    • The initial scene now gets its SceneStarted event (rolled in to #387, 6e96280685d1ab2668f900d0c3374ef650380de1)

    Changed:

    • BadEventHandlerException was moved from ppb.eventlib to ppb.errors. (#402)

    Removed:

    • ppb.eventlib, EventMixin, and __event__(). Everything they used to do has been inlined into the Engine. (#402)

    Internal:

    • The release process was changed to be more automatic with significantly fewer human steps. (#380)
    Source code(tar.gz)
    Source code(zip)
    ppb-0.8.0b1-py3-none-any.whl(39.12 KB)
    ppb-0.8.0b1.tar.gz(252.39 KB)
  • 0.7.0(Sep 24, 2019)

    The big headline is the Asset Revamp. Instead of just passing around strings (and the whole resource path concept), actual Asset objects are given to systems. (api reference) These are a mechanism for eager background loading of data.

    As part of this, we've introduced the concept of a Virtual File System (VFS). The VFS allows assets to be loaded from the Python Path (sys.path), using the same structure as python modules. This simplifies the usage of asset packs (like ppb-mutant) and allows assets not tied to a sprite (namely sound effects) to work.

    As a quick example this v0.6 code:

    class MySprite(ppb.BaseSprite):
        image = 'thingy.png'
        resource_path = 'resources/sprites'
    

    becomes this v0.7 code:

    class MySprite(ppb.Sprite):
        image = ppb.Image('resources/sprites/thingy.png')
    

    You may also notice that ppb.BaseSprite became ppb.Sprite. This is the result of a bunch of refactoring, and the old name is now deprecated and will be removed in a future release.

    Also part of this effort is that there's three generated image assets available: ppb.Circle, ppb.Square, and ppb.Triangle. Instead of loading data from a file, these generate basic shapes in memory.

    The lesser headline is the addition of sound effects! (api reference) These are just simply signal(ppb.events.PlaySound(ppb.Sound('path/to/sound.ogg'))). Other types of sounds (namely background music) and more advanced control will come in future releases, as we develop the APIs.

    Note that the warning about PyGame and Python version compatibility from the v0.6 release notes still apply. In summary: Do not use PyGame 2 or Python 3.8 at this time.

    Changes since v0.6:

    Added:

    • ppb.vfs module - Enables loading of files from Python packages (#306)
    • Asset system - Enables eager, background loading of assets (#306)
      • AbstractAsset ABC (#329)
      • AssetLoaded event (#315)
      • Loading Screen feature (#336)
    • Two Phase Update feature (#273)
    • Sound! (#326)
    • Sprite Layering! (#350, #322)
    • Add ppb.Circle, ppb.Square, and ppb.Triangle generated images (#363)
    • ppb.Sprite is now the base sprite class (#357)
    • ppb.run() accepts arbitrary engine and subsystem arguments (#307)

    Changed:

    • ppb.BaseSprite is now deprecated in favor of ppb.Sprite (#357)
    • Deprecate string filenames in favor of assets (#306)
    • Significant file rearrangement. (#316)
    • Animations now based on Asset system. (#308)

    Removed:

    • __resource_path__() protocol removed in favor of ppb.vfs (#306)

    Invisible:

    • ppb.sprites.BaseSprite now truly just a base class, using mixins to provide features. (#357)
      • ppb.sprites.SquareShapeMixin (#357)
      • ppb.sprites.RenderableMixin (#357)
    • Accept only stable versions of ppb_vector (#303)
    • Renderer no longer tracks resources (#306)
    • Tolerances on Camera dimensions loosened. (#319)
    • Manual Tests (#328)
    • Updated Contributing.md (#324)
    Source code(tar.gz)
    Source code(zip)
    ppb-0.7.0-py3-none-any.whl(37.24 KB)
    ppb-0.7.0.tar.gz(28.43 KB)
  • 0.7.0b1(Sep 20, 2019)

    The big headline is the Asset Revamp. Instead of just passing around strings (and the whole resource path concept), actual Asset objects are given to systems. (api reference, ) These are a mechanism for eager background loading of data.

    As part of this, we've introduced the concept of a Virtual File System (VFS). The VFS allows assets to be loaded from the Python Path (sys.path), using the same structure as python modules. This simplifies the usage of asset packs (like ppb-mutant) and allows assets not tied to a sprite (namely sound effects) to work.

    As a quick example this v0.6 code:

    class MySprite(ppb.BaseSprite):
        image = 'thingy.png`
        resource_path = 'resources/sprites'
    

    becomes this v0.7 code:

    class MySprite(ppb.Sprite):
        image = ppb.Image('resources/sprites/thingy.png`)
    

    You may also notice that ppb.BaseSprite became ppb.Sprite. This is the result of a bunch of refactoring, and the old name is now deprecated and will be removed in a future release.

    Also part of this effort is that there's three generated image assets available: ppb.Circle, ppb.Square, and ppb.Triangle. Instead of loading data from a file, these generate basic shapes in memory.

    The lesser headline is the addition of sound effects! (, ) These are just simply signal(ppb.events.PlaySound(ppb.Sound('path/to/sound.ogg'))). Other types of sounds (namely background music) and more advanced control will come in future releases, as we develop the APIs.

    Note that the warning about PyGame and Python version compatibility from the v0.6 release notes still apply. In summary: Do not use PyGame 2 or Python 3.8 at this time.

    Changes since v0.6:

    Added:

    • ppb.vfs module - Enables loading of files from Python packages (#306)
    • Asset system - Enables eager, background loading of assets (#306)
      • AbstractAsset ABC (#329)
      • AssetLoaded event (#315)
      • Loading Screen feature (#336)
    • Two Phase Update feature (#273)
    • Sound! (#326)
    • Sprite Layering! (#350, #322)
    • Add ppb.Circle, ppb.Square, and ppb.Triangle generated images (#363)
    • ppb.Sprite is now the base sprite class (#357)
    • ppb.run() accepts arbitrary engine and subsystem arguments (#307)

    Changed:

    • ppb.BaseSprite is now deprecated in favor of ppb.Sprite (#357)
    • Deprecate string filenames in favor of assets (#306)
    • Significant file rearrangement. (#316)
    • Animations now based on Asset system. (#308)

    Removed:

    • __resource_path__() protocol removed in favor of ppb.vfs (#306)

    Invisible:

    • ppb.sprites.BaseSprite now truly just a base class, using mixins to provide features. (#357)
      • ppb.sprites.SquareShapeMixin (#357)
      • ppb.sprites.RenderableMixin (#357)
    • Accept only stable versions of ppb_vector (#303)
    • Renderer no longer tracks resources (#306)
    • Tolerances on Camera dimensions loosened. (#319)
    • Manual Tests (#328)
    • Updated Contributing.md (#324)
    Source code(tar.gz)
    Source code(zip)
    ppb-0.7.0b1-py3-none-any.whl(37.26 KB)
    ppb-0.7.0b1.tar.gz(28.44 KB)
  • v0.7.0a1(Sep 9, 2019)

    The big headline is the Asset Revamp. Instead of just passing around strings (and the whole resource path concept), actual Asset objects and given to systems. (api reference, ) These are a mechanism for eager background loading of data.

    As part of this, we've introduced the concept of a Virtual File System (VFS). The VFS allows assets to be loaded from the Python Path (sys.path), using the same structure as python modules. This simplifies the usage of asset packs (like ppb-mutant) and allows assets not tied to a sprite (namely sound effects) to work.

    As a quick example this v0.6 code:

    class MySprite(ppb.BaseSprite):
        image = 'thingy.png`
        resource_path = 'resources/sprites'
    

    becomes this v0.7 code:

    class MySprite(ppb.Sprite):
        image = ppb.Image('resources/sprites/thingy.png`)
    

    You may also notice that ppb.BaseSprite became ppb.Sprite. This is the result of a bunch of refactoring, and the old name is now deprecated and will be removed in a future release.

    Also part of this effort is that there's three generated image assets available: ppb.Circle, ppb.Square, and ppb.Triangle. Instead of loading data from a file, these generate basic shapes in memory.

    The lesser headline is the addition of sound effects! (, ) These are just simply signal(ppb.events.PlaySound(ppb.Sound('path/to/sound.ogg'))). Other types of sounds (namely background music) and more advanced control will come in future releases, as we develop the APIs.

    Note that the warning about PyGame and Python version compatibility from the v0.6 release notes still apply. In summary: Do not use PyGame 2 or Python 3.8 at this time.

    Changes since v0.6:

    Added:

    • ppb.vfs module - Enables loading of files from Python packages (#306)
    • Asset system - Enables eager, background loading of assets (#306)
      • AbstractAsset ABC (#329)
      • AssetLoaded event (#315)
      • Loading Screen feature (#336)
    • Two Phase Update feature (#273)
    • Sound! (#326)
    • Sprite Layering! (#350, #322)
    • Add ppb.Circle, ppb.Square, and ppb.Triangle generated images (#363)
    • ppb.Sprite is now the base sprite class (#357)
    • ppb.run() accepts arbitrary engine and subsystem arguments (#307)

    Changed:

    • ppb.BaseSprite is now deprecated in favor of ppb.Sprite (#357)
    • Deprecate string filenames in favor of assets (#306)
    • Significant file rearrangement. (#316)
    • Animations now based on Asset system. (#308)

    Removed:

    • __resource_path__() protocol removed in favor of ppb.vfs (#306)

    Invisible:

    • ppb.sprites.BaseSprite now truly just a base class, using mixins to provide features. (#357)
      • ppb.sprites.SquareShapeMixin (#357)
      • ppb.sprites.RenderableMixin (#357)
    • Accept only stable versions of ppb_vector (#303)
    • Renderer no longer tracks resources (#306)
    • Tolerances on Camera dimensions loosened. (#319)
    • Manual Tests (#328)
    • Updated Contributing.md (#324)
    Source code(tar.gz)
    Source code(zip)
    ppb-0.7.0a1-py3-none-any.whl(34.96 KB)
    ppb-0.7.0a1.tar.gz(28.22 KB)
  • v0.6.0(Jul 7, 2019)

    The Summer Solstice 2019 release has finally come! :tada: :confetti_ball:

    Note that because of incompatibilities, PyGame 1 and Python 3.6 & 3.7 are the only supported versions. Neither Python 3.8 nor PyGame 2 are supported in this release. (This will hopefully be fixed for our Fall Equinox 2019 release, but its largely out of our hands.)

    New since 0.5.1

    • Online docs! https://ppb.readthedocs.io/ (#195)
    • Sprites can rotate (#214)
    • An Idle event has been added, fired each iteration through the event loop (#221)
    • An animation feature has been added (#230) and an example (#235)
    • A title argument has been added to ppb.run() (#258)
    • ppb.make_engine() has been added to simplify customization (#255)
    • GameEngine.loop_once() has been added to allow for external loops (#255)
    • The sprite sides API now implements full numerical methods (#272)
    • GameEngine() now accepts systems and basic_systems arguments (you probably want the former) (#295)

    Breaking Changes since 0.5.1

    • The Y axis has been flipped so that +Y is up (#237, #275)
    • ppb.Vector has changed significantly; see the ppb-vector changes (#204, #280)
    • The deprecated scene change API (Scene.running, Scene.next) has been removed (#259)
    • System.activate() has been removed (#221)
    • GameEngine.register() now accepts callables instead of simple values (#228)
    • ppb.abc has been completely removed (#284)

    Fixes since 0.5.1

    • ppb.utils.LoggingMixin now works with subclasses (based on the file the calling code is in) (#202)
    • StartScene no longer requires an empty kwargs when passed a scene class (#236)
    • GameObjectCollection (and its subclass Scene) work correctly with subclasses of children (#241)
    • Simplified the rendering event flow (#256)
    • Sprite.size of less than or equal to 0 no longer causes error (#262)
    • Defining sprites in a REPL no longer causes problems (#270)
    • Camera data is updated before PreRender fires (#274)

    Development changes

    Source code(tar.gz)
    Source code(zip)
    ppb-0.6.0-py3-none-any.whl(26.08 KB)
    ppb-0.6.0.tar.gz(21.99 KB)
  • v0.6.0b1(Jun 26, 2019)

    First beta of our Summer Solstice 2019 release.

    Note that because of incompatibilities, PyGame 1 and Python 3.6 & 3.7 are the only supported versions. Neither Python 3.8 nor PyGame 2 are supported in this release. (This will hopefully be fixed for our Fall Equinox 2019 release, but its largely out of our hands.)

    New since 0.5.1

    • Online docs! https://ppb.readthedocs.io/ (#195)
    • Sprites can rotate (#214)
    • An Idle event has been added, fired each iteration through the event loop (#221)
    • An animation feature has been added (#230) and an example (#235)
    • A title argument has been added to ppb.run() (#258)
    • ppb.make_engine() has been added to simplify customization (#255)
    • GameEngine.loop_once() has been added to allow for external loops (#255)
    • The sprite sides API now implements full numerical methods (#272)
    • GameEngine() now accepts systems and basic_systems arguments (you probably want the former) (#295)

    Breaking Changes since 0.5.1

    • The Y axis has been flipped so that +Y is up (#237, #275)
    • ppb.Vector has changed significantly; see the ppb-vector changes (#204, #280)
    • The deprecated scene change API (Scene.running, Scene.next) has been removed (#259)
    • System.activate() has been removed (#221)
    • GameEngine.register() now accepts callables instead of simple values (#228)
    • ppb.abc has been completely removed (#284)

    Fixes since 0.5.1

    • ppb.utils.LoggingMixin now works with subclasses (based on the file the calling code is in) (#202)
    • StartScene no longer requires an empty kwargs when passed a scene class (#236)
    • GameObjectCollection (and its subclass Scene) work correctly with subclasses of children (#241)
    • Simplified the rendering event flow (#256)
    • Sprite.size of less than or equal to 0 no longer causes error (#262)
    • Defining sprites in a REPL no longer causes problems (#270)
    • Camera data is updated before PreRender fires (#274)

    Development changes

    Source code(tar.gz)
    Source code(zip)
    ppb-0.6.0b1-py3-none-any.whl(25.91 KB)
    ppb-0.6.0b1.tar.gz(21.87 KB)
  • v0.5.1(May 6, 2019)

  • v0.5.0(Dec 20, 2018)

    We went for a smaller release, but we got a lot done for it only being a few months. The most important bits are that all of the input events are in! Some cool stuff includes sprites scaling automatically and a new way to move between scenes that uses the event system. That means the old method is officially deprecated.

    New stuff:

    • MouseButton events
    • Key events
    • Add a title to the game window
    • Sprite scaling based on game unit size
    • Keycodes flags
    • New scene change mechanism that uses the event system

    Changed stuff:

    • Scene defaults are now class attributes
    • Most Sprite defaults are now class attributes
    • Flags can now be type hinted properly
    • Scenes no longer infinitely respawn their child scenes if running is True.
    • Fixed an issue with the frame being different dimensions to the viewport.
    • Fixed a bug in the Camera.point_in_viewport function
    • Default pixel ratio is now 64:1 (64 pixels to 1 game unit)
    • New (better) run function
    • Other type hinting fixes

    Removed stuff:

    • bb attribute removed from sprites
    Source code(tar.gz)
    Source code(zip)
Owner
PPB
The PursuedPyBear game library and related projects
PPB
Lint game data metafiles against GTA5.xsd for Rockstar's game engine (RAGE)

rage-lint Lint RAGE (only GTA5 at the moment) meta/XML files for validity based off of the GTA5.xsd generated from game code. This script accepts a se

GoatGeek 11 Sep 18, 2022
Minecraft clone using Python Ursina game engine!

Minecraft clone using Python Ursina game engine!

Taehee Lee 35 Jan 3, 2023
An easy to use game engine/framework for python.

A game engine powered by python and panda3d.

Petter Amland 1.6k Jan 5, 2023
Pyxel is a retro game engine for Python.

Pyxel is open source and free to use. Let's start making a retro game with Pyxel!

Takashi Kitao 11.2k Jan 9, 2023
A python game engine.

PursuedPyBear, also known as ppb, exists to be an educational resource. Most obviously used to teach computer science, it can be a useful tool for any topic that a simulation can be helpful.

PPB 235 Jan 8, 2023
A Game Engine Made in Python with the Pygame Module

MandawEngine A Game Engine Made in Python with the Pygame Module Discord: https://discord.gg/MPPqj9PNt3 Installation To Get The Latest Version of Mand

Mandaw 14 Jun 24, 2022
Hagia is a 2D game engine and toolset for Python.

HAGIA What is Hagia? Hagia is a 2D game engine and toolset for Python. Hagia has

star 3 Jun 1, 2022
Python game engine for 2D multiplayer online games.

LAN-Caster The goal of LAN-Caster is to provide an easy-to-use code base (game engine) for developing 2D multiplayer online games. LAN-Caster original

Douglas Bakewell 1 Feb 11, 2022
Open-source project written in the ursina engine, simulating the popular game Minecraft.

Voxelcraft is an open-source project written in the ursina engine, simulating the popular game Minecraft.

Calinescu Mihai 21 Oct 6, 2022
AXI Combat is a networked multiplayer game built on the AXI Visualizer 3D engine.

AXI_Combat AXI Combat is a networked multiplayer game built on the AXI Visualizer 3D engine. https://axi.x10.mx/Combat AXI Combat is released under th

. 0 Aug 2, 2022
Average Clicker Game (AVG) is a Python made game using tkinter

Average-Clicker-Game Average Clicker Game (AVG) is a Python clicker game not made with pygame but with tkinter, it has worker, worker upgrades, times

Zacky2613 1 Dec 21, 2021
Ice-Walker-Game - This repository is about the Ice Walker game made in Python.

Ice-Walker-Game Ce dépot contient le jeu Ice Walker programmé en Python. Les différentes grilles du jeu sont contenues dans le sous-dossier datas. Vou

Mohamed Amine SABIL 1 Jan 2, 2022
Adventure-Game - Adventure Game which is created using Python

Adventure Game ?? This is a Adventure Game which is created using Python. Featur

ArinjoyTheDev 1 Mar 19, 2022
Game-of-life - A simple python program to simulate and visualise the Conway's Game of life

Conway's game of life A simple python program to simulate and visualise the Conw

Dhravya Shah 3 Feb 20, 2022
Snake game mixed with Conway's Game of Life

SnakeOfLife Snake game mixed with Conway's Game of Life The rules are the same than a normal snake game but you have to avoid cells created by Conway'

Aidan 5 May 26, 2022
HTTP API for FGO game data. Transform the raw game data into something a bit more manageable.

FGO game data API HTTP API for FGO game data. Transform the raw game data into something a bit more manageable. View the API documentation here: https

Atlas Academy 51 Dec 26, 2022
A near-exact clone of google chrome's no internet game, or the "google dinosaur game", with some additions and extras.

dinoGame A near-exact clone of google chrome's no internet game, or the "google dinosaur game", with some additions and extras. Installation Download

null 1 Oct 26, 2021
Quantum version of the classical Nim game. An automatic opponent allows to game to not be as easy as it seems.

Nim game Running the game To run the program just launch : python3 game.py Rules This game is inspiring from the Nim game. You are 2 players face to f

Michaël 1 Jan 8, 2022
Deal Or No Deal was a very popular game show. Even now, for a family party, it's a fun game to pass time

Deal Or No Deal was a very popular game show. Even now, for a family party, it's a fun game to pass time. I made a code to play the game right in your terminal/console. This isn't made to be a game which can be installed by everyone and played, I just made it as a fun project as I just started out with python. So if you have python installed and wanna have some fun, or just curious to see how I did this, feel free to check the code out!

null 1 Feb 15, 2022