diff --git a/LICENSE.txt b/LICENSE.txt index 550e193..0109b1a 100644 --- a/LICENSE.txt +++ b/LICENSE.txt @@ -1,17 +1,19 @@ -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: +Copyright (c) 2022 shampoo.ooo -This permission notice shall be included in all copies or substantial portions -of the Software. +This software is provided 'as-is', without any express or implied warranty. In +no event will the authors be held liable for any damages arising from the use of +this software. -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. +Permission is granted to anyone to use this software for any purpose, including +commercial applications, and to alter it and redistribute it freely, subject to +the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software in a + product, an acknowledgment in the product documentation would be + appreciated but is not required. + + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + + 3. This notice may not be removed or altered from any source distribution. diff --git a/README b/README deleted file mode 100644 index b6f7d7a..0000000 --- a/README +++ /dev/null @@ -1,49 +0,0 @@ ----------------- -Pygame Framework ----------------- - -Classes to facilitate creation of Pygame projects - - -Example -------- - -Save and run to create a project that redraws a square at a random location -every second. This script is also written in the `sample.py` file. - - from time import sleep - from random import randint - - from pgfw.Game import Game - - class SampleGame(Game): - - square_width = 30 - - # instructions in the update method automatically run once every frame - def update(self): - sleep(1) - screen = self.get_screen() - bounds = screen.get_size() - screen.fill((0, 0, 0)) - screen.fill((255, 255, 255), - (randint(0, bounds[0]), randint(0, bounds[1]), - self.square_width, self.square_width)) - - - if __name__ == '__main__': - SampleGame().run() - - -License -------- - -MIT License - -see LICENSE.txt for details - - -Business --------- - -420@shampoo.ooo diff --git a/README.md b/README.md new file mode 100644 index 0000000..680a128 --- /dev/null +++ b/README.md @@ -0,0 +1,57 @@ +Pygame Framework +================ + +PGFW is a game framework that facilitates the creation and development of [Pygame][] projects. It contains a class `Game` which can be inherited and used as a project skeleton. There are also classes for features such as sprites, animations, audio, b-splines, geometry, and screen capture. It is a collection of code used in previous projects with a focus on creating 2D games. Some examples of games using it are [Picture Processing][], [Scrapeboard][], and [Cakefoot][]. + +Requirements +------------ + +* Python 3+ +* [Pygame][] 1.9+ + +Start a project +--------------- + +Clone the repository (or [download][https://git.nugget.fun/nugget/pgfw/archive/main.zip] and unzip it) + + git clone https://git.nugget.fun/nugget/spacebox + +Save the following script at the root of the repository to create a project that redraws a square at a random location every second. The project can be run with `python3 [SCRIPT]`. Maybe some cats may even like this game. This script is also available in [sample.py][]. + + from time import sleep + from random import randint + + from pgfw.Game import Game + + class SampleGame(Game): + + square_width = 30 + + # instructions in the update method automatically run once every frame + def update(self): + sleep(1) + screen = self.get_screen() + bounds = screen.get_size() + screen.fill((0, 0, 0)) + screen.fill((255, 255, 255), + (randint(0, bounds[0]), randint(0, bounds[1]), + self.square_width, self.square_width)) + + + if __name__ == '__main__': + SampleGame().run() + +To further build this example, the [Pygame API][] and classes in [pgfw/][] could be imported and used directly in the update function. + +License +------- + +Unrestricted use, under the zlib license, see [LICENSE.txt][LICENSE.txt] + +[Pygame]: https://pygame.org +[Pygame API]: https://www.pygame.org/docs +[Picture Processing]: https://ohsqueezy.itch.io/ppu +[Scrapeboard]: https://scrape.nugget.fun +[Cakefoot]: https://ohsqueezy.itch.io/cakefoot +[sample.py]: sample.py +[pgfw/]: pgfw/ diff --git a/pgfw/Audio.py b/pgfw/Audio.py index 479cb4d..6728400 100644 --- a/pgfw/Audio.py +++ b/pgfw/Audio.py @@ -114,8 +114,8 @@ class Audio(Animation): for root in sfx_location: prefix = "" root = self.get_resource(root) - print("checking {} for sound effects".format(root)) if root: + print("checking {} for sound effects".format(root)) if os.path.isfile(root): self.load_sfx_file(root) else: @@ -166,8 +166,8 @@ class Audio(Animation): for root in self.get_configuration("audio", "bgm-project-path"): # look for path in resource folders root = self.get_resource(root) - if os.path.exists(root): - print("checking {} for background music".format(root)) + if root is not None and os.path.exists(root): + print("checking {} for background music files".format(root)) if os.path.isfile(root): self.set_bgm(root) else: @@ -181,7 +181,7 @@ class Audio(Animation): # Next load BGM paths defined in the configuration. If any of these have the same name as # BGM loaded by the previous code block, they will be overwritten to give the config file # precedence over automatic BGM detection. - print("checking configuration for background music".format(root)) + print("checking configuration for background music definitions".format(root)) for name, bgm_definition in self.get_configuration("bgm").items(): bgm_definition_members = bgm_definition.split(self.CONFIG_SEPARATOR) path, volume = bgm_definition_members[0], 1.0 diff --git a/pgfw/GameChild.py b/pgfw/GameChild.py index 3f8386e..04816b0 100644 --- a/pgfw/GameChild.py +++ b/pgfw/GameChild.py @@ -70,7 +70,6 @@ class GameChild: path = join(root, rel_path) if exists(path): return normpath(path) - print("warning: couldn't find resource: {0} {1}".format(path_or_section, option)) def is_shared_mode(self): return self.check_command_line("s")