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