basilisk-engine 0.1.2__py3-none-any.whl → 0.1.3__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of basilisk-engine might be problematic. Click here for more details.

Files changed (82) hide show
  1. basilisk/__init__.py +11 -11
  2. basilisk/bsk_assets/cube.obj +48 -48
  3. basilisk/collisions/broad/broad_aabb.py +102 -102
  4. basilisk/collisions/broad/broad_bvh.py +137 -137
  5. basilisk/collisions/collider.py +95 -83
  6. basilisk/collisions/collider_handler.py +225 -228
  7. basilisk/collisions/narrow/contact_manifold.py +90 -90
  8. basilisk/collisions/narrow/dataclasses.py +33 -27
  9. basilisk/collisions/narrow/deprecated.py +46 -46
  10. basilisk/collisions/narrow/epa.py +91 -91
  11. basilisk/collisions/narrow/gjk.py +66 -66
  12. basilisk/collisions/narrow/graham_scan.py +24 -24
  13. basilisk/collisions/narrow/helper.py +29 -29
  14. basilisk/collisions/narrow/line_intersections.py +106 -106
  15. basilisk/collisions/narrow/sutherland_hodgman.py +75 -75
  16. basilisk/config.py +2 -2
  17. basilisk/draw/draw.py +100 -100
  18. basilisk/draw/draw_handler.py +180 -210
  19. basilisk/draw/font_renderer.py +28 -28
  20. basilisk/engine.py +195 -195
  21. basilisk/generic/abstract_bvh.py +15 -15
  22. basilisk/generic/abstract_custom.py +133 -133
  23. basilisk/generic/collisions.py +70 -70
  24. basilisk/generic/input_validation.py +67 -28
  25. basilisk/generic/math.py +6 -6
  26. basilisk/generic/matrices.py +33 -33
  27. basilisk/generic/meshes.py +72 -72
  28. basilisk/generic/quat.py +137 -137
  29. basilisk/generic/quat_methods.py +7 -7
  30. basilisk/generic/raycast_result.py +24 -0
  31. basilisk/generic/vec3.py +143 -143
  32. basilisk/input/mouse.py +61 -59
  33. basilisk/mesh/cube.py +33 -33
  34. basilisk/mesh/mesh.py +230 -230
  35. basilisk/mesh/mesh_from_data.py +132 -132
  36. basilisk/mesh/model.py +271 -271
  37. basilisk/mesh/narrow_aabb.py +89 -89
  38. basilisk/mesh/narrow_bvh.py +91 -91
  39. basilisk/mesh/narrow_primative.py +23 -23
  40. basilisk/nodes/helper.py +29 -0
  41. basilisk/nodes/node.py +681 -617
  42. basilisk/nodes/node_handler.py +95 -118
  43. basilisk/particles/particle_handler.py +63 -54
  44. basilisk/particles/particle_renderer.py +87 -87
  45. basilisk/physics/impulse.py +112 -112
  46. basilisk/physics/physics_body.py +43 -43
  47. basilisk/physics/physics_engine.py +35 -35
  48. basilisk/render/batch.py +86 -86
  49. basilisk/render/camera.py +204 -199
  50. basilisk/render/chunk.py +99 -99
  51. basilisk/render/chunk_handler.py +154 -154
  52. basilisk/render/frame.py +181 -181
  53. basilisk/render/image.py +75 -75
  54. basilisk/render/image_handler.py +122 -122
  55. basilisk/render/light.py +96 -96
  56. basilisk/render/light_handler.py +58 -58
  57. basilisk/render/material.py +219 -219
  58. basilisk/render/material_handler.py +135 -135
  59. basilisk/render/shader.py +109 -109
  60. basilisk/render/shader_handler.py +79 -79
  61. basilisk/render/sky.py +120 -120
  62. basilisk/scene.py +250 -210
  63. basilisk/shaders/batch.frag +276 -276
  64. basilisk/shaders/batch.vert +115 -115
  65. basilisk/shaders/draw.frag +21 -21
  66. basilisk/shaders/draw.vert +21 -21
  67. basilisk/shaders/filter.frag +22 -22
  68. basilisk/shaders/frame.frag +12 -12
  69. basilisk/shaders/frame.vert +13 -13
  70. basilisk/shaders/geometry.frag +8 -8
  71. basilisk/shaders/geometry.vert +41 -41
  72. basilisk/shaders/normal.frag +59 -59
  73. basilisk/shaders/normal.vert +96 -96
  74. basilisk/shaders/particle.frag +71 -71
  75. basilisk/shaders/particle.vert +84 -84
  76. basilisk/shaders/sky.frag +9 -9
  77. basilisk/shaders/sky.vert +13 -13
  78. {basilisk_engine-0.1.2.dist-info → basilisk_engine-0.1.3.dist-info}/METADATA +45 -38
  79. basilisk_engine-0.1.3.dist-info/RECORD +97 -0
  80. {basilisk_engine-0.1.2.dist-info → basilisk_engine-0.1.3.dist-info}/WHEEL +1 -1
  81. basilisk_engine-0.1.2.dist-info/RECORD +0 -95
  82. {basilisk_engine-0.1.2.dist-info → basilisk_engine-0.1.3.dist-info}/top_level.txt +0 -0
basilisk/render/sky.py CHANGED
@@ -1,121 +1,121 @@
1
- import numpy as np
2
- from PIL import Image as PIL_Image
3
- from .shader import Shader
4
-
5
- class Sky:
6
- texture_cube=None
7
- vbo = None
8
- vao = None
9
- def __init__(self, engine, sky_texture: str | list=None):
10
- """
11
- Handler for all skybox rendering
12
- """
13
-
14
- self.scene = engine.scene
15
- self.ctx = engine.ctx
16
-
17
- if not sky_texture: sky_texture = engine.root + '/bsk_assets/skybox.png'
18
-
19
- self.set_renderer()
20
- self.set_texture(sky_texture)
21
-
22
- def render(self):
23
- """
24
- Render the skybox to current render destination
25
- """
26
- self.vao.render()
27
-
28
- def write(self):
29
- # Write the texture cube to the sky shader
30
- self.shader.program['skyboxTexture'] = 8
31
- self.texture_cube.use(location = 8)
32
-
33
- shader = self.scene.engine.shader
34
- if 'skyboxTexture' not in shader.uniforms: return
35
- shader.program['skyboxTexture'] = 8
36
- self.texture_cube.use(location = 8)
37
-
38
-
39
- def set_texture(self, skybox_images: list):
40
- """
41
- Sets the skybox texture. Can either be set with 6 images for each skybox side or a single skybox image.
42
- List items should be string paths.
43
- The six images should be should be in the following order: right, left, top, bottom, front, back
44
- """
45
-
46
- # Release any existing memory
47
- if self.texture_cube: self.texture_cube.release()
48
-
49
- # Function-Scoped data
50
- images = None
51
-
52
- # Given a sinlge image for the skybox
53
- if isinstance(skybox_images, str) or ((isinstance(skybox_images, list) or isinstance(skybox_images, tuple)) and len(skybox_images) == 1):
54
- path = skybox_images if isinstance(skybox_images, str) else skybox_images[0]
55
-
56
- # Verify the path type
57
- if not isinstance(path, str): raise ValueError(f"Skybox: Invalid image path type {type(path)}")
58
-
59
- image = PIL_Image.open(path).convert('RGB')
60
- width, height = image.size[0] // 4, image.size[1] // 3
61
-
62
- images = [image.crop((x * width, y * height, (x + 1) * width, (y + 1) * height)) for x, y in [(2, 1), (0, 1), (1, 0), (1, 2), (1, 1), (3, 1)]]
63
-
64
- # Given a list of images for the skybox
65
- elif isinstance(skybox_images, list) or isinstance(skybox_images, tuple):
66
- # Verify the correct number of images was given
67
- if len(skybox_images) != 6: raise ValueError("Skybox: Invalid number of images for skybox. Expected 1 or 6")
68
- # Verify the all image path types
69
- if not all([isinstance(path, str) for path in skybox_images]): raise ValueError(f"Skybox: Invalid image path type {type(path)}")
70
-
71
- images = [PIL_Image.open(path).convert('RGB') for path in skybox_images]
72
-
73
- else:
74
- raise ValueError(f"Skybox: Invalid skybox type {type(skybox_images)}. Expected list of string paths or a single image")
75
-
76
- # Create a texture map from the images
77
- size = min(images[0].size)
78
- size = (size, size)
79
- images = [img.resize(size) for img in images]
80
- images = [img.tobytes() for img in images]
81
- self.texture_cube = self.ctx.texture_cube(size=size, components=3, data=None)
82
- for i, data in enumerate(images):
83
- self.texture_cube.write(face=i, data=data)
84
-
85
- def set_renderer(self):
86
- """
87
-
88
- """
89
-
90
- # Release any existing memory
91
- if self.vbo: self.vbo.release()
92
- if self.vao: self.vao.release()
93
-
94
- # Get the cube vertex data
95
- vertices = [(-1, -1, 1), ( 1, -1, 1), (1, 1, 1), (-1, 1, 1),
96
- (-1, 1, -1), (-1, -1, -1), (1, -1, -1), ( 1, 1, -1)]
97
-
98
- indices = [(0, 2, 3), (0, 1, 2),
99
- (1, 7, 2), (1, 6, 7),
100
- (6, 5, 4), (4, 7, 6),
101
- (3, 4, 5), (3, 5, 0),
102
- (3, 7, 4), (3, 2, 7),
103
- (0, 6, 1), (0, 5, 6)]
104
-
105
- vertex_data = np.array([vertices[ind] for trigangle in indices for ind in trigangle], dtype='f4')
106
- vertex_data = np.flip(vertex_data, 1).copy(order='C')
107
-
108
- # Create a renderable vao
109
- self.vbo = self.ctx.buffer(vertex_data)
110
- root = self.scene.engine.root
111
- self.shader = self.scene.shader_handler.add(Shader(self.scene.engine, root + '/shaders/sky.vert', root + '/shaders/sky.frag'))
112
- self.vao = self.ctx.vertex_array(self.shader.program, [(self.vbo, '3f', 'in_position')], skip_errors=True)
113
-
114
- def __del__(self):
115
- """
116
- Releases all data used by the skybox
117
- """
118
-
119
- if self.texture_cube: self.texture_cube.release()
120
- if self.vbo: self.vbo.release()
1
+ import numpy as np
2
+ from PIL import Image as PIL_Image
3
+ from .shader import Shader
4
+
5
+ class Sky:
6
+ texture_cube=None
7
+ vbo = None
8
+ vao = None
9
+ def __init__(self, engine, sky_texture: str | list=None):
10
+ """
11
+ Handler for all skybox rendering
12
+ """
13
+
14
+ self.scene = engine.scene
15
+ self.ctx = engine.ctx
16
+
17
+ if not sky_texture: sky_texture = engine.root + '/bsk_assets/skybox.png'
18
+
19
+ self.set_renderer()
20
+ self.set_texture(sky_texture)
21
+
22
+ def render(self):
23
+ """
24
+ Render the skybox to current render destination
25
+ """
26
+ self.vao.render()
27
+
28
+ def write(self):
29
+ # Write the texture cube to the sky shader
30
+ self.shader.program['skyboxTexture'] = 8
31
+ self.texture_cube.use(location = 8)
32
+
33
+ shader = self.scene.engine.shader
34
+ if 'skyboxTexture' not in shader.uniforms: return
35
+ shader.program['skyboxTexture'] = 8
36
+ self.texture_cube.use(location = 8)
37
+
38
+
39
+ def set_texture(self, skybox_images: list):
40
+ """
41
+ Sets the skybox texture. Can either be set with 6 images for each skybox side or a single skybox image.
42
+ List items should be string paths.
43
+ The six images should be should be in the following order: right, left, top, bottom, front, back
44
+ """
45
+
46
+ # Release any existing memory
47
+ if self.texture_cube: self.texture_cube.release()
48
+
49
+ # Function-Scoped data
50
+ images = None
51
+
52
+ # Given a sinlge image for the skybox
53
+ if isinstance(skybox_images, str) or ((isinstance(skybox_images, list) or isinstance(skybox_images, tuple)) and len(skybox_images) == 1):
54
+ path = skybox_images if isinstance(skybox_images, str) else skybox_images[0]
55
+
56
+ # Verify the path type
57
+ if not isinstance(path, str): raise ValueError(f"Skybox: Invalid image path type {type(path)}")
58
+
59
+ image = PIL_Image.open(path).convert('RGB')
60
+ width, height = image.size[0] // 4, image.size[1] // 3
61
+
62
+ images = [image.crop((x * width, y * height, (x + 1) * width, (y + 1) * height)) for x, y in [(2, 1), (0, 1), (1, 0), (1, 2), (1, 1), (3, 1)]]
63
+
64
+ # Given a list of images for the skybox
65
+ elif isinstance(skybox_images, list) or isinstance(skybox_images, tuple):
66
+ # Verify the correct number of images was given
67
+ if len(skybox_images) != 6: raise ValueError("Skybox: Invalid number of images for skybox. Expected 1 or 6")
68
+ # Verify the all image path types
69
+ if not all([isinstance(path, str) for path in skybox_images]): raise ValueError(f"Skybox: Invalid image path type {type(path)}")
70
+
71
+ images = [PIL_Image.open(path).convert('RGB') for path in skybox_images]
72
+
73
+ else:
74
+ raise ValueError(f"Skybox: Invalid skybox type {type(skybox_images)}. Expected list of string paths or a single image")
75
+
76
+ # Create a texture map from the images
77
+ size = min(images[0].size)
78
+ size = (size, size)
79
+ images = [img.resize(size) for img in images]
80
+ images = [img.tobytes() for img in images]
81
+ self.texture_cube = self.ctx.texture_cube(size=size, components=3, data=None)
82
+ for i, data in enumerate(images):
83
+ self.texture_cube.write(face=i, data=data)
84
+
85
+ def set_renderer(self):
86
+ """
87
+
88
+ """
89
+
90
+ # Release any existing memory
91
+ if self.vbo: self.vbo.release()
92
+ if self.vao: self.vao.release()
93
+
94
+ # Get the cube vertex data
95
+ vertices = [(-1, -1, 1), ( 1, -1, 1), (1, 1, 1), (-1, 1, 1),
96
+ (-1, 1, -1), (-1, -1, -1), (1, -1, -1), ( 1, 1, -1)]
97
+
98
+ indices = [(0, 2, 3), (0, 1, 2),
99
+ (1, 7, 2), (1, 6, 7),
100
+ (6, 5, 4), (4, 7, 6),
101
+ (3, 4, 5), (3, 5, 0),
102
+ (3, 7, 4), (3, 2, 7),
103
+ (0, 6, 1), (0, 5, 6)]
104
+
105
+ vertex_data = np.array([vertices[ind] for trigangle in indices for ind in trigangle], dtype='f4')
106
+ vertex_data = np.flip(vertex_data, 1).copy(order='C')
107
+
108
+ # Create a renderable vao
109
+ self.vbo = self.ctx.buffer(vertex_data)
110
+ root = self.scene.engine.root
111
+ self.shader = self.scene.shader_handler.add(Shader(self.scene.engine, root + '/shaders/sky.vert', root + '/shaders/sky.frag'))
112
+ self.vao = self.ctx.vertex_array(self.shader.program, [(self.vbo, '3f', 'in_position')], skip_errors=True)
113
+
114
+ def __del__(self):
115
+ """
116
+ Releases all data used by the skybox
117
+ """
118
+
119
+ if self.texture_cube: self.texture_cube.release()
120
+ if self.vbo: self.vbo.release()
121
121
  if self.vao: self.vao.release()