diff --git a/README.md b/README.md index 2ad1c8c..789801e 100644 --- a/README.md +++ b/README.md @@ -47,6 +47,33 @@ CloseWindow() ``` +## raylib.pyray + +Wrapper around the static bindings. Makes the names snakecase and converts strings to bytes automatically. See test_pyray.py. + + +``` +from raylib.pyray import PyRay +from raylib.colors import * + +pyray = PyRay() + +pyray.init_window(800, 450, "Hello Pyray") +pyray.set_target_fps(60) + +camera = pyray.Camera3D([18.0, 16.0, 18.0], [0.0, 0.0, 0.0], [0.0, 1.0, 0.0], 45.0, 0) +pyray.set_camera_mode(camera, pyray.CAMERA_ORBITAL) + +while not pyray.window_should_close(): + pyray.update_camera(pyray.pointer(camera)) + pyray.begin_drawing() + pyray.clear_background(RAYWHITE) + pyray.draw_text("Hello world", 190, 200, 20, VIOLET) + pyray.end_drawing() +pyray.close_window() + +``` + ## raylib.dynamic In addition to the API static bindings we have CFFI ABI dynamic bindings in order to avoid the need to compile a C extension module. @@ -58,31 +85,6 @@ which we supply for Windows/Mac/Linux. See test_dynamic.py for how to use. -## raylib.static.pyray - -Wrapper around the static bindings. Makes the names snakecase and converts strings to bytes automatically. See test_pyray.py. - - -``` -from raylib.static.pyray import pyray as prl -from raylib.colors import * - -prl.init_window(800, 450, "Hello Pyray") -prl.set_target_fps(60) - -camera = prl.Camera3D([18.0, 16.0, 18.0], [0.0, 0.0, 0.0], [0.0, 1.0, 0.0], 45.0, 0) -prl.set_camera_mode(camera, prl.CAMERA_ORBITAL) - -while not prl.window_should_close(): - prl.update_camera(prl.pointer(camera)) - prl.begin_drawing() - prl.clear_background(RAYWHITE) - prl.draw_text("Hello world", 190, 200, 20, VIOLET) - prl.end_drawing() -prl.close_window() - -``` - ## raylib.richlib A very easy to use library on top of static bindings, modelled after Pygame Zero. @@ -98,4 +100,5 @@ A very easy to use library on top of static bindings, modelled after Pygame Zero * converting more examples from C to python * testing and building on more platforms * sorting out binary wheel distribution for Mac/Win and compile-from-source distributtion for Linux + * dealing with conversions to pointers in PyRay automatically diff --git a/coords_demo.py b/coords_demo.py index 01e4e7b..c2bba7c 100644 --- a/coords_demo.py +++ b/coords_demo.py @@ -1,5 +1,5 @@ from raylib.richlib import * -from raylib.static.pyray import pyray + WIDTH=1200 HEIGHT=800 diff --git a/raylib/static/pyray.py b/raylib/pyray.py similarity index 85% rename from raylib/static/pyray.py rename to raylib/pyray.py index 2e501aa..26cfa5e 100644 --- a/raylib/static/pyray.py +++ b/raylib/pyray.py @@ -1,5 +1,5 @@ -from . import rl, ffi -from ..colors import * +from .static import rl, ffi +from .colors import * from inspect import ismethod,getmembers,isbuiltin import inflection @@ -7,8 +7,6 @@ class PyRay: def pointer(self, struct): return ffi.addressof(struct) -pyray = PyRay() - def makefunc(a): #print("makefunc ",a) @@ -31,10 +29,12 @@ def makeStructHelper(struct): for name, attr in getmembers(rl): - print(name, attr) + #print(name, attr) uname = inflection.underscore(name).replace('3_d','_3d').replace('2_d','_2d') if isbuiltin(attr): - #print(attr) + #print(attr.__call__) + #print(attr.__doc__) + #print(attr.__text_signature__) #print(dir(attr)) #print(dir(attr.__repr__)) f = makefunc(attr) @@ -47,4 +47,5 @@ for name, attr in getmembers(rl): for struct in ('Vector2','Vector3','Vector4','Camera2D', 'Camera3D', 'Quaternion', 'Color'): f = makeStructHelper(struct) - setattr(PyRay, struct, f) \ No newline at end of file + setattr(PyRay, struct, f) + diff --git a/raylib/richlib/__init__.py b/raylib/richlib/__init__.py index ba97dac..12c4038 100755 --- a/raylib/richlib/__init__.py +++ b/raylib/richlib/__init__.py @@ -10,6 +10,10 @@ import sys data_dir = "" +from ..pyray import PyRay + +pyray = PyRay() + camera = ffi.new("struct Camera3D *") camera.position = (0.0, 100, 100) camera.target = (0.0, 0.0, 0.0) diff --git a/raylib/static/__init__.py b/raylib/static/__init__.py index 181d7b7..a44ef0e 100644 --- a/raylib/static/__init__.py +++ b/raylib/static/__init__.py @@ -1,7 +1,6 @@ from ._raylib_cffi import ffi, lib as rl from _raylib_cffi.lib import * from raylib.colors import * -from .helpers import * print("RAYLIB STATIC LOADED") diff --git a/raylib/static/helpers.py b/raylib/static/helpers.py deleted file mode 100644 index 76f9963..0000000 --- a/raylib/static/helpers.py +++ /dev/null @@ -1,5 +0,0 @@ -from ._raylib_cffi import ffi - -def Vector3(x, y, z): - return ffi.new("struct Vector3 *", [x, y, z])[0] - diff --git a/setup.py b/setup.py index d51bade..a549204 100644 --- a/setup.py +++ b/setup.py @@ -10,7 +10,7 @@ README = (HERE / "README.md").read_text() # This call to setup() does all the work setup( name="raylib", - version="2.5.0.post2", + version="2.5.0.post3", description="Python CFFI bindings for Raylib", long_description=README, long_description_content_type="text/markdown", diff --git a/test_pyray.py b/test_pyray.py index a86fdbd..ca2962a 100644 --- a/test_pyray.py +++ b/test_pyray.py @@ -1,30 +1,33 @@ """ This shows how to use the Pyray wrapper around the static binding. """ -from raylib.static.pyray import pyray as prl + +from raylib.pyray import PyRay from raylib.colors import * -prl.init_window(800, 450, "Raylib texture test") -prl.set_target_fps(60) +pyray = PyRay() -camera = prl.Camera3D([18.0, 16.0, 18.0], [0.0, 0.0, 0.0], [0.0, 1.0, 0.0], 45.0, 0) -image = prl.load_image("examples/models/resources/heightmap.png") -texture = prl.load_texture_from_image(image) -mesh = prl.gen_mesh_heightmap(image, (16, 8, 16)) -model = prl.load_model_from_mesh(mesh) -model.materials.maps[prl.MAP_DIFFUSE].texture = texture +pyray.init_window(800, 450, "Raylib texture test") +pyray.set_target_fps(60) -prl.unload_image(image) -prl.set_camera_mode(camera, prl.CAMERA_ORBITAL) +camera = pyray.Camera3D([18.0, 16.0, 18.0], [0.0, 0.0, 0.0], [0.0, 1.0, 0.0], 45.0, 0) +image = pyray.load_image("examples/models/resources/heightmap.png") +texture = pyray.load_texture_from_image(image) +mesh = pyray.gen_mesh_heightmap(image, (16, 8, 16)) +model = pyray.load_model_from_mesh(mesh) +model.materials.maps[pyray.MAP_DIFFUSE].texture = texture -while not prl.window_should_close(): - prl.update_camera(prl.pointer(camera)) - prl.begin_drawing() - prl.clear_background(RAYWHITE) - prl.begin_mode_3d(camera) - prl.draw_model(model, (-8.0, 0.0, -8.0), 1.0, RED) - prl.draw_grid(20, 1.0) - prl.end_mode_3d() - prl.draw_text("This mesh should be textured", 190, 200, 20, VIOLET) - prl.end_drawing() -prl.close_window() +pyray.unload_image(image) +pyray.set_camera_mode(camera, pyray.CAMERA_ORBITAL) + +while not pyray.window_should_close(): + pyray.update_camera(pyray.pointer(camera)) + pyray.begin_drawing() + pyray.clear_background(RAYWHITE) + pyray.begin_mode_3d(camera) + pyray.draw_model(model, (-8.0, 0.0, -8.0), 1.0, RED) + pyray.draw_grid(20, 1.0) + pyray.end_mode_3d() + pyray.draw_text("This mesh should be textured", 190, 200, 20, VIOLET) + pyray.end_drawing() +pyray.close_window() diff --git a/test_richlib.py b/test_richlib.py index adcda96..afb81b4 100644 --- a/test_richlib.py +++ b/test_richlib.py @@ -1,5 +1,5 @@ from raylib.richlib import * -from raylib.static.pyray import pyray + WIDTH=800 HEIGHT=640