basilisk-engine 0.1.23__tar.gz → 0.1.25__tar.gz

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 (151) hide show
  1. {basilisk_engine-0.1.23 → basilisk_engine-0.1.25}/PKG-INFO +1 -1
  2. {basilisk_engine-0.1.23 → basilisk_engine-0.1.25}/basilisk/__init__.py +1 -1
  3. {basilisk_engine-0.1.23 → basilisk_engine-0.1.25}/basilisk/engine.py +5 -0
  4. {basilisk_engine-0.1.23 → basilisk_engine-0.1.25}/basilisk/input_output/IO_handler.py +1 -2
  5. basilisk_engine-0.1.25/basilisk/input_output/mouse.py +90 -0
  6. {basilisk_engine-0.1.23 → basilisk_engine-0.1.25}/basilisk/mesh/mesh.py +5 -2
  7. {basilisk_engine-0.1.23 → basilisk_engine-0.1.25}/basilisk/mesh/mesh_from_data.py +23 -3
  8. {basilisk_engine-0.1.23 → basilisk_engine-0.1.25}/basilisk/nodes/node.py +7 -4
  9. {basilisk_engine-0.1.23 → basilisk_engine-0.1.25}/basilisk/render/batch.py +8 -10
  10. {basilisk_engine-0.1.23 → basilisk_engine-0.1.25}/basilisk/render/camera.py +15 -24
  11. {basilisk_engine-0.1.23 → basilisk_engine-0.1.25}/basilisk/render/chunk.py +4 -4
  12. {basilisk_engine-0.1.23 → basilisk_engine-0.1.25}/basilisk/render/frame.py +5 -9
  13. basilisk_engine-0.1.25/basilisk/render/framebuffer.py +289 -0
  14. {basilisk_engine-0.1.23 → basilisk_engine-0.1.25}/basilisk/render/shader.py +12 -3
  15. {basilisk_engine-0.1.23 → basilisk_engine-0.1.25}/basilisk_engine.egg-info/PKG-INFO +1 -1
  16. {basilisk_engine-0.1.23 → basilisk_engine-0.1.25}/basilisk_engine.egg-info/SOURCES.txt +3 -1
  17. {basilisk_engine-0.1.23 → basilisk_engine-0.1.25}/setup.py +1 -1
  18. basilisk_engine-0.1.25/tests/shaders/custom_format.frag +10 -0
  19. basilisk_engine-0.1.25/tests/shaders/custom_format.vert +55 -0
  20. basilisk_engine-0.1.23/basilisk/input_output/mouse.py +0 -62
  21. basilisk_engine-0.1.23/basilisk/render/framebuffer.py +0 -132
  22. {basilisk_engine-0.1.23 → basilisk_engine-0.1.25}/MANIFEST.in +0 -0
  23. {basilisk_engine-0.1.23 → basilisk_engine-0.1.25}/README.md +0 -0
  24. {basilisk_engine-0.1.23 → basilisk_engine-0.1.25}/basilisk/audio/__init__.py +0 -0
  25. {basilisk_engine-0.1.23 → basilisk_engine-0.1.25}/basilisk/audio/sound.py +0 -0
  26. {basilisk_engine-0.1.23 → basilisk_engine-0.1.25}/basilisk/bsk_assets/Roboto-Regular.ttf +0 -0
  27. {basilisk_engine-0.1.23 → basilisk_engine-0.1.25}/basilisk/bsk_assets/__init__.py +0 -0
  28. {basilisk_engine-0.1.23 → basilisk_engine-0.1.25}/basilisk/bsk_assets/basilisk.png +0 -0
  29. {basilisk_engine-0.1.23 → basilisk_engine-0.1.25}/basilisk/bsk_assets/cube.obj +0 -0
  30. {basilisk_engine-0.1.23 → basilisk_engine-0.1.25}/basilisk/bsk_assets/skybox.png +0 -0
  31. {basilisk_engine-0.1.23 → basilisk_engine-0.1.25}/basilisk/collisions/__init__.py +0 -0
  32. {basilisk_engine-0.1.23 → basilisk_engine-0.1.25}/basilisk/collisions/broad/__init__.py +0 -0
  33. {basilisk_engine-0.1.23 → basilisk_engine-0.1.25}/basilisk/collisions/broad/broad_aabb.py +0 -0
  34. {basilisk_engine-0.1.23 → basilisk_engine-0.1.25}/basilisk/collisions/broad/broad_bvh.py +0 -0
  35. {basilisk_engine-0.1.23 → basilisk_engine-0.1.25}/basilisk/collisions/collider.py +0 -0
  36. {basilisk_engine-0.1.23 → basilisk_engine-0.1.25}/basilisk/collisions/collider_handler.py +0 -0
  37. {basilisk_engine-0.1.23 → basilisk_engine-0.1.25}/basilisk/collisions/narrow/__init__.py +0 -0
  38. {basilisk_engine-0.1.23 → basilisk_engine-0.1.25}/basilisk/collisions/narrow/contact_manifold.py +0 -0
  39. {basilisk_engine-0.1.23 → basilisk_engine-0.1.25}/basilisk/collisions/narrow/dataclasses.py +0 -0
  40. {basilisk_engine-0.1.23 → basilisk_engine-0.1.25}/basilisk/collisions/narrow/deprecated.py +0 -0
  41. {basilisk_engine-0.1.23 → basilisk_engine-0.1.25}/basilisk/collisions/narrow/epa.py +0 -0
  42. {basilisk_engine-0.1.23 → basilisk_engine-0.1.25}/basilisk/collisions/narrow/gjk.py +0 -0
  43. {basilisk_engine-0.1.23 → basilisk_engine-0.1.25}/basilisk/collisions/narrow/graham_scan.py +0 -0
  44. {basilisk_engine-0.1.23 → basilisk_engine-0.1.25}/basilisk/collisions/narrow/helper.py +0 -0
  45. {basilisk_engine-0.1.23 → basilisk_engine-0.1.25}/basilisk/collisions/narrow/line_intersections.py +0 -0
  46. {basilisk_engine-0.1.23 → basilisk_engine-0.1.25}/basilisk/collisions/narrow/sutherland_hodgman.py +0 -0
  47. {basilisk_engine-0.1.23 → basilisk_engine-0.1.25}/basilisk/config.py +0 -0
  48. {basilisk_engine-0.1.23 → basilisk_engine-0.1.25}/basilisk/draw/__init__.py +0 -0
  49. {basilisk_engine-0.1.23 → basilisk_engine-0.1.25}/basilisk/draw/draw.py +0 -0
  50. {basilisk_engine-0.1.23 → basilisk_engine-0.1.25}/basilisk/draw/draw_handler.py +0 -0
  51. {basilisk_engine-0.1.23 → basilisk_engine-0.1.25}/basilisk/draw/font_renderer.py +0 -0
  52. {basilisk_engine-0.1.23 → basilisk_engine-0.1.25}/basilisk/generic/__init__.py +0 -0
  53. {basilisk_engine-0.1.23 → basilisk_engine-0.1.25}/basilisk/generic/abstract_bvh.py +0 -0
  54. {basilisk_engine-0.1.23 → basilisk_engine-0.1.25}/basilisk/generic/abstract_custom.py +0 -0
  55. {basilisk_engine-0.1.23 → basilisk_engine-0.1.25}/basilisk/generic/collisions.py +0 -0
  56. {basilisk_engine-0.1.23 → basilisk_engine-0.1.25}/basilisk/generic/input_validation.py +0 -0
  57. {basilisk_engine-0.1.23 → basilisk_engine-0.1.25}/basilisk/generic/math.py +0 -0
  58. {basilisk_engine-0.1.23 → basilisk_engine-0.1.25}/basilisk/generic/matrices.py +0 -0
  59. {basilisk_engine-0.1.23 → basilisk_engine-0.1.25}/basilisk/generic/meshes.py +0 -0
  60. {basilisk_engine-0.1.23 → basilisk_engine-0.1.25}/basilisk/generic/quat.py +0 -0
  61. {basilisk_engine-0.1.23 → basilisk_engine-0.1.25}/basilisk/generic/quat_methods.py +0 -0
  62. {basilisk_engine-0.1.23 → basilisk_engine-0.1.25}/basilisk/generic/raycast_result.py +0 -0
  63. {basilisk_engine-0.1.23 → basilisk_engine-0.1.25}/basilisk/generic/vec3.py +0 -0
  64. {basilisk_engine-0.1.23 → basilisk_engine-0.1.25}/basilisk/input_output/__init__.py +0 -0
  65. {basilisk_engine-0.1.23 → basilisk_engine-0.1.25}/basilisk/input_output/clock.py +0 -0
  66. {basilisk_engine-0.1.23 → basilisk_engine-0.1.25}/basilisk/input_output/keys.py +0 -0
  67. {basilisk_engine-0.1.23 → basilisk_engine-0.1.25}/basilisk/input_output/path.py +0 -0
  68. {basilisk_engine-0.1.23 → basilisk_engine-0.1.25}/basilisk/mesh/__init__.py +0 -0
  69. {basilisk_engine-0.1.23 → basilisk_engine-0.1.25}/basilisk/mesh/cube.py +0 -0
  70. {basilisk_engine-0.1.23 → basilisk_engine-0.1.25}/basilisk/mesh/model.py +0 -0
  71. {basilisk_engine-0.1.23 → basilisk_engine-0.1.25}/basilisk/mesh/narrow_aabb.py +0 -0
  72. {basilisk_engine-0.1.23 → basilisk_engine-0.1.25}/basilisk/mesh/narrow_bvh.py +0 -0
  73. {basilisk_engine-0.1.23 → basilisk_engine-0.1.25}/basilisk/mesh/narrow_primative.py +0 -0
  74. {basilisk_engine-0.1.23 → basilisk_engine-0.1.25}/basilisk/nodes/__init__.py +0 -0
  75. {basilisk_engine-0.1.23 → basilisk_engine-0.1.25}/basilisk/nodes/helper.py +0 -0
  76. {basilisk_engine-0.1.23 → basilisk_engine-0.1.25}/basilisk/nodes/node_handler.py +0 -0
  77. {basilisk_engine-0.1.23 → basilisk_engine-0.1.25}/basilisk/particles/__init__.py +0 -0
  78. {basilisk_engine-0.1.23 → basilisk_engine-0.1.25}/basilisk/particles/particle_handler.py +0 -0
  79. {basilisk_engine-0.1.23 → basilisk_engine-0.1.25}/basilisk/particles/particle_renderer.py +0 -0
  80. {basilisk_engine-0.1.23 → basilisk_engine-0.1.25}/basilisk/physics/__init__.py +0 -0
  81. {basilisk_engine-0.1.23 → basilisk_engine-0.1.25}/basilisk/physics/impulse.py +0 -0
  82. {basilisk_engine-0.1.23 → basilisk_engine-0.1.25}/basilisk/physics/physics_body.py +0 -0
  83. {basilisk_engine-0.1.23 → basilisk_engine-0.1.25}/basilisk/physics/physics_engine.py +0 -0
  84. {basilisk_engine-0.1.23 → basilisk_engine-0.1.25}/basilisk/render/__init__.py +0 -0
  85. {basilisk_engine-0.1.23 → basilisk_engine-0.1.25}/basilisk/render/chunk_handler.py +0 -0
  86. {basilisk_engine-0.1.23 → basilisk_engine-0.1.25}/basilisk/render/image.py +0 -0
  87. {basilisk_engine-0.1.23 → basilisk_engine-0.1.25}/basilisk/render/image_handler.py +0 -0
  88. {basilisk_engine-0.1.23 → basilisk_engine-0.1.25}/basilisk/render/light.py +0 -0
  89. {basilisk_engine-0.1.23 → basilisk_engine-0.1.25}/basilisk/render/light_handler.py +0 -0
  90. {basilisk_engine-0.1.23 → basilisk_engine-0.1.25}/basilisk/render/material.py +0 -0
  91. {basilisk_engine-0.1.23 → basilisk_engine-0.1.25}/basilisk/render/material_handler.py +0 -0
  92. {basilisk_engine-0.1.23 → basilisk_engine-0.1.25}/basilisk/render/post_process.py +0 -0
  93. {basilisk_engine-0.1.23 → basilisk_engine-0.1.25}/basilisk/render/shader_handler.py +0 -0
  94. {basilisk_engine-0.1.23 → basilisk_engine-0.1.25}/basilisk/render/sky.py +0 -0
  95. {basilisk_engine-0.1.23 → basilisk_engine-0.1.25}/basilisk/scene.py +0 -0
  96. {basilisk_engine-0.1.23 → basilisk_engine-0.1.25}/basilisk/shaders/__init__.py +0 -0
  97. {basilisk_engine-0.1.23 → basilisk_engine-0.1.25}/basilisk/shaders/batch.frag +0 -0
  98. {basilisk_engine-0.1.23 → basilisk_engine-0.1.25}/basilisk/shaders/batch.vert +0 -0
  99. {basilisk_engine-0.1.23 → basilisk_engine-0.1.25}/basilisk/shaders/crt.frag +0 -0
  100. {basilisk_engine-0.1.23 → basilisk_engine-0.1.25}/basilisk/shaders/draw.frag +0 -0
  101. {basilisk_engine-0.1.23 → basilisk_engine-0.1.25}/basilisk/shaders/draw.vert +0 -0
  102. {basilisk_engine-0.1.23 → basilisk_engine-0.1.25}/basilisk/shaders/filter.frag +0 -0
  103. {basilisk_engine-0.1.23 → basilisk_engine-0.1.25}/basilisk/shaders/frame.frag +0 -0
  104. {basilisk_engine-0.1.23 → basilisk_engine-0.1.25}/basilisk/shaders/frame.vert +0 -0
  105. {basilisk_engine-0.1.23 → basilisk_engine-0.1.25}/basilisk/shaders/geometry.frag +0 -0
  106. {basilisk_engine-0.1.23 → basilisk_engine-0.1.25}/basilisk/shaders/geometry.vert +0 -0
  107. {basilisk_engine-0.1.23 → basilisk_engine-0.1.25}/basilisk/shaders/normal.frag +0 -0
  108. {basilisk_engine-0.1.23 → basilisk_engine-0.1.25}/basilisk/shaders/normal.vert +0 -0
  109. {basilisk_engine-0.1.23 → basilisk_engine-0.1.25}/basilisk/shaders/particle.frag +0 -0
  110. {basilisk_engine-0.1.23 → basilisk_engine-0.1.25}/basilisk/shaders/particle.vert +0 -0
  111. {basilisk_engine-0.1.23 → basilisk_engine-0.1.25}/basilisk/shaders/sky.frag +0 -0
  112. {basilisk_engine-0.1.23 → basilisk_engine-0.1.25}/basilisk/shaders/sky.vert +0 -0
  113. {basilisk_engine-0.1.23 → basilisk_engine-0.1.25}/basilisk_engine.egg-info/dependency_links.txt +0 -0
  114. {basilisk_engine-0.1.23 → basilisk_engine-0.1.25}/basilisk_engine.egg-info/requires.txt +0 -0
  115. {basilisk_engine-0.1.23 → basilisk_engine-0.1.25}/basilisk_engine.egg-info/top_level.txt +0 -0
  116. {basilisk_engine-0.1.23 → basilisk_engine-0.1.25}/docs/images/0_boilerplate.png +0 -0
  117. {basilisk_engine-0.1.23 → basilisk_engine-0.1.25}/images/cloth.png +0 -0
  118. {basilisk_engine-0.1.23 → basilisk_engine-0.1.25}/images/floor.png +0 -0
  119. {basilisk_engine-0.1.23 → basilisk_engine-0.1.25}/images/foil.png +0 -0
  120. {basilisk_engine-0.1.23 → basilisk_engine-0.1.25}/images/mud.png +0 -0
  121. {basilisk_engine-0.1.23 → basilisk_engine-0.1.25}/setup.cfg +0 -0
  122. {basilisk_engine-0.1.23 → basilisk_engine-0.1.25}/tests/SkySkybox.png +0 -0
  123. {basilisk_engine-0.1.23 → basilisk_engine-0.1.25}/tests/brick.png +0 -0
  124. {basilisk_engine-0.1.23 → basilisk_engine-0.1.25}/tests/brick_normal.png +0 -0
  125. {basilisk_engine-0.1.23 → basilisk_engine-0.1.25}/tests/bunny.obj +0 -0
  126. {basilisk_engine-0.1.23 → basilisk_engine-0.1.25}/tests/closet_001.obj +0 -0
  127. {basilisk_engine-0.1.23 → basilisk_engine-0.1.25}/tests/cloth_albedo.png +0 -0
  128. {basilisk_engine-0.1.23 → basilisk_engine-0.1.25}/tests/cloth_normal.png +0 -0
  129. {basilisk_engine-0.1.23 → basilisk_engine-0.1.25}/tests/cube.obj +0 -0
  130. {basilisk_engine-0.1.23 → basilisk_engine-0.1.25}/tests/cubemaps_skybox.png +0 -0
  131. {basilisk_engine-0.1.23 → basilisk_engine-0.1.25}/tests/cylinder.obj +0 -0
  132. {basilisk_engine-0.1.23 → basilisk_engine-0.1.25}/tests/demo_sphere.obj +0 -0
  133. {basilisk_engine-0.1.23 → basilisk_engine-0.1.25}/tests/dirt.png +0 -0
  134. {basilisk_engine-0.1.23 → basilisk_engine-0.1.25}/tests/floor_albedo.png +0 -0
  135. {basilisk_engine-0.1.23 → basilisk_engine-0.1.25}/tests/floor_normal.png +0 -0
  136. {basilisk_engine-0.1.23 → basilisk_engine-0.1.25}/tests/foil_normal.png +0 -0
  137. {basilisk_engine-0.1.23 → basilisk_engine-0.1.25}/tests/fridge_001.obj +0 -0
  138. {basilisk_engine-0.1.23 → basilisk_engine-0.1.25}/tests/grass.jpg +0 -0
  139. {basilisk_engine-0.1.23 → basilisk_engine-0.1.25}/tests/grass_ao.jpg +0 -0
  140. {basilisk_engine-0.1.23 → basilisk_engine-0.1.25}/tests/grass_block_side.png +0 -0
  141. {basilisk_engine-0.1.23 → basilisk_engine-0.1.25}/tests/grass_block_top.png +0 -0
  142. {basilisk_engine-0.1.23 → basilisk_engine-0.1.25}/tests/grass_normal.png +0 -0
  143. {basilisk_engine-0.1.23 → basilisk_engine-0.1.25}/tests/grass_roughness.jpg +0 -0
  144. {basilisk_engine-0.1.23 → basilisk_engine-0.1.25}/tests/image.png +0 -0
  145. {basilisk_engine-0.1.23 → basilisk_engine-0.1.25}/tests/lucy.obj +0 -0
  146. {basilisk_engine-0.1.23 → basilisk_engine-0.1.25}/tests/monkey.obj +0 -0
  147. {basilisk_engine-0.1.23 → basilisk_engine-0.1.25}/tests/mud.png +0 -0
  148. {basilisk_engine-0.1.23 → basilisk_engine-0.1.25}/tests/mud_normal.png +0 -0
  149. {basilisk_engine-0.1.23 → basilisk_engine-0.1.25}/tests/oak_tree.obj +0 -0
  150. {basilisk_engine-0.1.23 → basilisk_engine-0.1.25}/tests/skybox.png +0 -0
  151. {basilisk_engine-0.1.23 → basilisk_engine-0.1.25}/tests/sphere.obj +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: basilisk-engine
3
- Version: 0.1.23
3
+ Version: 0.1.25
4
4
  Summary: Python 3D Framework
5
5
  Home-page: https://basilisk-website.vercel.app/
6
6
  Author: Name
@@ -8,7 +8,7 @@ from .render.material import Material
8
8
  from .render.shader import Shader
9
9
  from .render.shader_handler import ShaderHandler
10
10
  from .draw import draw
11
- from .render.camera import FreeCamera, StaticCamera, FollowCamera, OrbitCamera
11
+ from .render.camera import FreeCamera, StaticCamera, FollowCamera, OrbitCamera, FixedCamera
12
12
  from .render.sky import Sky
13
13
  from .render.post_process import PostProcess
14
14
  from .particles.particle_handler import ParticleHandler
@@ -41,6 +41,10 @@ class Engine():
41
41
  """Path to the root directory containing internal data"""
42
42
  current_frame_updated: bool=False
43
43
  """Flag for if the engine has been updated this frame"""
44
+ keys: list[bool]
45
+ """List of all keyboard inputs as booleans"""
46
+ previous_keys: list[bool]
47
+ """List of all keyoard inputs from the last frame as booleans"""
44
48
 
45
49
  def __init__(self, win_size=(800, 800), title="Basilisk Engine", vsync=None, max_fps=None, grab_mouse=True, headless=False, resizable=True) -> None:
46
50
  """
@@ -113,6 +117,7 @@ class Engine():
113
117
 
114
118
  if self.current_frame_updated: return
115
119
 
120
+ for fbo in self.fbos: fbo.clear()
116
121
  self.clock.update()
117
122
  self.IO.update()
118
123
 
@@ -73,8 +73,7 @@ class IO:
73
73
  self.event_resize = True
74
74
  self.engine.win_size = (event.w, event.h)
75
75
  self.engine.ctx.viewport = (0, 0, event.w, event.h)
76
- self.engine.frame.resize((event.w, event.h))
77
- # for fbo in self.fbos: fbo.resize()
76
+ for fbo in self.engine.fbos: fbo.resize()
78
77
 
79
78
  def update_caption(self) -> None:
80
79
  """
@@ -0,0 +1,90 @@
1
+ import pygame as pg
2
+
3
+
4
+ class Mouse():
5
+ def __init__(self, grab=True):
6
+ self._position = list(pg.mouse.get_pos())
7
+ self._relative = [0, 0]
8
+ self.buttons = pg.mouse.get_pressed()
9
+ self.previous_buttons = pg.mouse.get_pressed()
10
+ self.grab = grab
11
+ self.visible = not self.grab
12
+
13
+ def update(self, events):
14
+ """
15
+ Updates all mouse state variables.
16
+ Checks for mouse-related events.
17
+ """
18
+
19
+ self._position = list(pg.mouse.get_pos())
20
+ self._relative = list(pg.mouse.get_rel())
21
+ self.previous_buttons = self.buttons
22
+ self.buttons = pg.mouse.get_pressed()
23
+
24
+ for event in events:
25
+ if event.type == pg.KEYUP:
26
+ if event.key == pg.K_ESCAPE and self.grab:
27
+ # Unlock mouse
28
+ self.grab = False
29
+ self.visible = True
30
+ if event.type == pg.MOUSEBUTTONUP and not self.grab:
31
+ # Lock mouse
32
+ self.grab = True
33
+ self.visible = False
34
+
35
+ @property
36
+ def position(self): return self._position
37
+ @property
38
+ def x(self): return self._position[0]
39
+ @property
40
+ def y(self): return self._position[1]
41
+ @property
42
+ def relative(self): return self._relative
43
+ @property
44
+ def relative_x(self): return self._relative[0]
45
+ @property
46
+ def relative_y(self): return self._relative[1]
47
+ @property
48
+ def click(self): return self.buttons[0] and not self.previous_buttons[0]
49
+ @property
50
+ def left_click(self): return self.buttons[0] and not self.previous_buttons[0]
51
+ @property
52
+ def middle_click(self): return self.buttons[1] and not self.previous_buttons[1]
53
+ @property
54
+ def right_click(self): return self.buttons[2] and not self.previous_buttons[2]
55
+ @property
56
+ def left_down(self): return self.buttons[0]
57
+ @property
58
+ def middle_down(self): return self.buttons[1]
59
+ @property
60
+ def right_down(self): return self.buttons[2]
61
+ @property
62
+ def grab(self): return self._grab
63
+ @property
64
+ def visible(self): return self._visable
65
+
66
+ @position.setter
67
+ def position(self, value: tuple[int]) -> tuple[int]:
68
+ self._position = value
69
+ pg.mouse.set_pos(self._position)
70
+ return self._position
71
+ @x.setter
72
+ def x(self, value: int) -> int:
73
+ self._position[0] = value
74
+ pg.mouse.set_pos(self._position)
75
+ return self._position
76
+ @y.setter
77
+ def y(self, value: int) -> int:
78
+ self._position[1] = value
79
+ pg.mouse.set_pos(self._position)
80
+ return self._position
81
+ @grab.setter
82
+ def grab(self, value) -> bool:
83
+ self._grab = value
84
+ pg.event.set_grab(self._grab)
85
+ return self._grab
86
+ @visible.setter
87
+ def visible(self, value) -> bool:
88
+ self._visible = value
89
+ pg.mouse.set_visible(self._visible)
90
+ return self._visible
@@ -30,12 +30,14 @@ class Mesh():
30
30
  bvh: NarrowBVH
31
31
  """BVH for accessing triangle intersections with a line"""
32
32
 
33
- def __init__(self, data: str | os.PathLike | np.ndarray) -> None:
33
+ def __init__(self, data: str | os.PathLike | np.ndarray, custom_format:bool=False) -> None:
34
34
  """
35
35
  Mesh object containing all the data needed to render an object and perform physics/collisions on it
36
36
  Args:
37
37
  data: str
38
38
  path to the .obj file of the model or an array of the mesh data
39
+ custom_format: bool
40
+ makes expected changes to the given data if false. Leaves data as given if true
39
41
  """
40
42
 
41
43
  # Verify the path type
@@ -59,7 +61,7 @@ class Mesh():
59
61
  self.data = np.hstack([self.data, tangents])
60
62
 
61
63
  elif isinstance(data, np.ndarray):
62
- model = from_data(data)
64
+ model = from_data(data, custom_format)
63
65
  self.data = model.vertex_data
64
66
 
65
67
  else: # Invalid data type
@@ -70,6 +72,7 @@ class Mesh():
70
72
  self.indices = model.point_indices.copy()
71
73
 
72
74
  self.hash = hash(str(self.data))
75
+ self.custom = custom_format
73
76
 
74
77
  # generate edges from faces
75
78
  edges = [set() for _ in range(len(self.points))]
@@ -2,14 +2,20 @@ import numpy as np
2
2
  from .model import Model
3
3
  import glm
4
4
 
5
- def from_data(data: np.ndarray) -> Model:
5
+ def from_data(data: np.ndarray, custom_format:bool=False) -> Model:
6
6
  """
7
7
  Converts data given to a format compatable with basilisk models
8
+ Args:
9
+ data: np.ndarray
10
+ array of the mesh data
11
+ custom_format: bool
12
+ makes expected changes to the given data if false. Leaves data as given if true
8
13
  """
9
14
 
15
+ if custom_format: return format_raw(data)
16
+
10
17
  # Create an empty model
11
18
  model = Model()
12
- # Get the shape of the given data
13
19
 
14
20
  # Get the shape of the given data and check for a valid shape
15
21
  shape = data.shape
@@ -128,4 +134,18 @@ def get_points_and_indices(positions: np.ndarray) -> tuple[np.ndarray]:
128
134
  for triangle in index_mapping:
129
135
  indices[triangle].append(i)
130
136
 
131
- return np.array(list(points.keys()), dtype='f4'), np.array(indices, dtype='i')
137
+ return np.array(list(points.keys()), dtype='f4'), np.array(indices, dtype='i')
138
+
139
+ def format_raw(data: np.ndarray) -> np.ndarray:
140
+ # Create an empty model
141
+ model = Model()
142
+
143
+ # Get the needed data (assume position is in the first three positions)
144
+ model.vertex_data = np.array(data, dtype='f4')
145
+ if model.vertex_data.shape[1] >= 3:
146
+ model.vertex_points, model.point_indices = get_points_and_indices(model.vertex_data[:,:3])
147
+ else:
148
+ model.vertex_points = np.zeros(shape=(1, model.vertex_data.shape[1]))
149
+ model.point_indices = np.zeros(shape=(1, 3))
150
+
151
+ return model
@@ -371,13 +371,16 @@ class Node():
371
371
  if not per_vertex_mtl: node_data[-1] = self.material.index
372
372
 
373
373
  # Create an array to hold the node's data
374
- data = np.zeros(shape=(mesh_data.shape[0], 25), dtype='f4')
374
+ width = 25 if not self.mesh.custom else 11 + mesh_data.shape[1]
375
+ data = np.zeros(shape=(mesh_data.shape[0], width), dtype='f4')
375
376
 
376
377
 
377
- data[:,:14] = mesh_data
378
- data[:,14:] = node_data
378
+ data[:,:mesh_data.shape[1]] = mesh_data
379
+ data[:,mesh_data.shape[1]:] = node_data
379
380
 
380
- if per_vertex_mtl: data[:,24] = self.material
381
+ if per_vertex_mtl: data[:,-1] = self.material
382
+
383
+ if self.shader and not self.mesh.custom: data = np.take(data, self.shader.attribute_indices, axis=1)
381
384
 
382
385
  return data
383
386
 
@@ -1,14 +1,14 @@
1
1
  import numpy as np
2
2
  import moderngl as mgl
3
-
3
+ from .shader import Shader
4
4
 
5
5
  class Batch():
6
6
  chunk: ...
7
7
  """Reference to the parent chunk of the batch"""
8
8
  ctx: mgl.Context
9
9
  """Reference to the context of the parent engine"""
10
- program: mgl.Program
11
- """Reference to the program used by batches"""
10
+ shader: Shader
11
+ """Reference to the bsk.Shader used by batches"""
12
12
  vao: mgl.VertexArray
13
13
  """The vertex array of the batch. Used for rendering"""
14
14
  vbo: mgl.Buffer
@@ -23,7 +23,7 @@ class Batch():
23
23
  # Back references
24
24
  self.chunk = chunk
25
25
  self.ctx = chunk.chunk_handler.engine.ctx
26
- self.program = self.chunk.get_program()
26
+ self.shader = self.chunk.get_shader()
27
27
 
28
28
  # Set intial values
29
29
  self.vbo = None
@@ -35,7 +35,7 @@ class Batch():
35
35
  Returns True if batch was successful.
36
36
  """
37
37
 
38
- self.program = self.chunk.get_program()
38
+ self.shader = self.chunk.get_shader()
39
39
 
40
40
  # Empty list to contain all vertex data of models in the chunk
41
41
  batch_data = []
@@ -68,11 +68,9 @@ class Batch():
68
68
 
69
69
  # Create the vbo and the vao from mesh data
70
70
  self.vbo = self.ctx.buffer(batch_data)
71
- self.vao = self.ctx.vertex_array(self.program, [(self.vbo,
72
- '3f 2f 3f 3f 3f 3f 4f 3f 1f',
73
- *['in_position', 'in_uv', 'in_normal', 'in_tangent', 'in_bitangent', 'obj_position', 'obj_rotation', 'obj_scale', 'obj_material'])],
74
- skip_errors=True)
75
-
71
+ self.vao = self.ctx.vertex_array(self.shader.program, [(self.vbo, self.shader.fmt, *self.shader.attributes)], skip_errors=True)
72
+
73
+
76
74
  return True
77
75
 
78
76
  def swap_shader(self, shader):
@@ -24,7 +24,7 @@ class Camera:
24
24
  position: glm.vec3
25
25
  """Location of the camera (maters)"""
26
26
 
27
- def __init__(self, position=(0, 0, 20), rotation=(1, 0, 0, 0), yaw=-90, pitch=0) -> None:
27
+ def __init__(self, position=(0, 0, 20), rotation=(1, 0, 0, 0)) -> None:
28
28
  """
29
29
  Camera object to get view and projection matricies. Movement built in
30
30
  """
@@ -52,20 +52,6 @@ class Camera:
52
52
  # self.update_camera_vectors()
53
53
  self.m_view = self.get_view_matrix()
54
54
 
55
- # def update_camera_vectors(self) -> None:
56
- # """
57
- # Computes the forward vector based on the pitch and yaw. Computes horizontal and vertical vectors with cross product.
58
- # """
59
- # yaw, pitch = glm.radians(self.yaw), glm.radians(self.pitch)
60
-
61
- # self.forward.x = glm.cos(yaw) * glm.cos(pitch)
62
- # self.forward.y = glm.sin(pitch)
63
- # self.forward.z = glm.sin(yaw) * glm.cos(pitch)
64
-
65
- # self.forward = glm.normalize(self.forward)
66
- # self.right = glm.normalize(glm.cross(self.forward, self.UP))
67
- # self.up = glm.normalize(glm.cross(self.right, self.forward))
68
-
69
55
  def use(self):
70
56
  # Updated aspect ratio of the screen
71
57
  self.aspect_ratio = self.engine.win_size[0] / self.engine.win_size[1]
@@ -186,8 +172,8 @@ class Camera:
186
172
 
187
173
 
188
174
  class FreeCamera(Camera):
189
- def __init__(self, position=(0, 0, 20), rotation=(1, 0, 0, 0), yaw=-90, pitch=0):
190
- super().__init__(position, rotation, yaw, pitch)
175
+ def __init__(self, position=(0, 0, 20), rotation=(1, 0, 0, 0)):
176
+ super().__init__(position, rotation)
191
177
 
192
178
  def update(self) -> None:
193
179
  """
@@ -203,7 +189,7 @@ class FreeCamera(Camera):
203
189
  """
204
190
  Rotates the camera based on the amount of mouse movement.
205
191
  """
206
- rel_x, rel_y = pg.mouse.get_rel()
192
+ rel_x, rel_y = self.engine.mouse.relative
207
193
 
208
194
  yaw_rotation = glm.angleAxis(SENSITIVITY * rel_x, -self.UP)
209
195
  pitch_rotation = glm.angleAxis(SENSITIVITY * rel_y, -self.right)
@@ -231,11 +217,16 @@ class FreeCamera(Camera):
231
217
  self.position += self.UP * velocity
232
218
  if keys[pg.K_LSHIFT]:
233
219
  self.position -= self.UP * velocity
220
+
221
+ class FixedCamera(FreeCamera):
222
+ def __init__(self, position=(0, 0, 20), rotation=(1, 0, 0, 0)):
223
+ super().__init__(position, rotation)
234
224
 
225
+ def move(self): pass
235
226
 
236
227
  class FollowCamera(FreeCamera):
237
- def __init__(self, parent, position=(0, 0, 20), rotation=(1, 0, 0, 0), yaw=-90, pitch=0, offset=(0, 0, 0)):
238
- super().__init__(position, rotation, yaw, pitch)
228
+ def __init__(self, parent, position=(0, 0, 20), rotation=(1, 0, 0, 0), offset=(0, 0, 0)):
229
+ super().__init__(position, rotation)
239
230
  self.parent = parent
240
231
  self.offest = glm.vec3(offset)
241
232
 
@@ -247,11 +238,11 @@ class FollowCamera(FreeCamera):
247
238
  self.position = self.parent.position + self.offest
248
239
 
249
240
  class OrbitCamera(FreeCamera):
250
- def __init__(self, parent, position=(0, 0, 20), rotation=(1, 0, 0, 0), yaw=-90, pitch=0, distance=5, offset=(0, 0)):
241
+ def __init__(self, parent, position=(0, 0, 20), rotation=(1, 0, 0, 0), distance=5, offset=(0, 0)):
251
242
  self.parent = parent
252
243
  self.distance = distance
253
244
  self.offset = glm.vec2(offset)
254
- super().__init__(position, rotation, yaw, pitch)
245
+ super().__init__(position, rotation)
255
246
 
256
247
  def get_view_matrix(self) -> glm.mat4x4:
257
248
  return glm.lookAt(self.position, self.parent.position, self.up)
@@ -263,5 +254,5 @@ class OrbitCamera(FreeCamera):
263
254
  self.position = self.parent.position - glm.normalize(self.forward) * self.distance
264
255
 
265
256
  class StaticCamera(Camera):
266
- def __init__(self, position=(0, 0, 20), rotation=(1, 0, 0, 0), yaw=-90, pitch=0):
267
- super().__init__(position, rotation, yaw, pitch)
257
+ def __init__(self, position=(0, 0, 20), rotation=(1, 0, 0, 0)):
258
+ super().__init__(position, rotation)
@@ -79,15 +79,15 @@ class Chunk():
79
79
 
80
80
  return node
81
81
 
82
- def get_program(self):
82
+ def get_shader(self):
83
83
  """
84
- Gets the program of the chunks nodes' shader
84
+ Gets the bsk.Shader of the chunks nodes' shader
85
85
  """
86
86
 
87
87
  shader = self.shader
88
88
 
89
- if shader: return shader.program
90
- return self.chunk_handler.engine.shader.program
89
+ if shader: return shader
90
+ return self.chunk_handler.engine.shader
91
91
 
92
92
  def swap_shader(self, shader):
93
93
  """
@@ -11,7 +11,7 @@ class Frame:
11
11
  vao: mgl.VertexArray=None
12
12
  framebuffer: mgl.Framebuffer=None
13
13
 
14
- def __init__(self, engine, resolution=1, filter=(mgl.LINEAR, mgl.LINEAR)) -> None:
14
+ def __init__(self, engine, scale: float=1.0, linear_filter: bool=False) -> None:
15
15
  """
16
16
  Basilisk render destination.
17
17
  Can be used to render to the screen or for headless rendering
@@ -21,11 +21,8 @@ class Frame:
21
21
  self.ctx = engine.ctx
22
22
 
23
23
  # Load framebuffer
24
- self.resolution = resolution
25
- self.filter = filter
26
- size = tuple(map(lambda x: int(x * self.resolution), self.engine.win_size))
27
- self.framebuffer = Framebuffer(self.engine, size=size, filter=self.filter)
28
- self.ping_pong_buffer = Framebuffer(self.engine, size=size, filter=self.filter)
24
+ self.framebuffer = Framebuffer(self.engine, scale=scale, linear_filter=linear_filter)
25
+ self.ping_pong_buffer = Framebuffer(self.engine, scale=scale, linear_filter=linear_filter)
29
26
 
30
27
  # Load Shaders
31
28
  self.shader = Shader(self.engine, self.engine.root + '/shaders/frame.vert', self.engine.root + '/shaders/frame.frag')
@@ -87,9 +84,8 @@ class Frame:
87
84
  Resize the frame to the given size. None for window size
88
85
  """
89
86
 
90
- size = tuple(map(lambda x: int(x * self.resolution), self.engine.win_size))
91
- self.framebuffer.resize(size)
92
- self.ping_pong_buffer.resize(size)
87
+ self.framebuffer.resize()
88
+ self.ping_pong_buffer.resize()
93
89
 
94
90
  def __del__(self) -> None:
95
91
  """