basilisk-engine 0.1.5__tar.gz → 0.1.7__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.
- {basilisk_engine-0.1.5/basilisk_engine.egg-info → basilisk_engine-0.1.7}/PKG-INFO +2 -1
- {basilisk_engine-0.1.5 → basilisk_engine-0.1.7}/basilisk/__init__.py +3 -1
- {basilisk_engine-0.1.5 → basilisk_engine-0.1.7}/basilisk/collisions/collider_handler.py +2 -3
- {basilisk_engine-0.1.5 → basilisk_engine-0.1.7}/basilisk/collisions/narrow/contact_manifold.py +6 -1
- {basilisk_engine-0.1.5 → basilisk_engine-0.1.7}/basilisk/collisions/narrow/dataclasses.py +3 -1
- {basilisk_engine-0.1.5 → basilisk_engine-0.1.7}/basilisk/collisions/narrow/gjk.py +1 -1
- {basilisk_engine-0.1.5 → basilisk_engine-0.1.7}/basilisk/collisions/narrow/helper.py +1 -1
- {basilisk_engine-0.1.5 → basilisk_engine-0.1.7}/basilisk/engine.py +7 -5
- {basilisk_engine-0.1.5 → basilisk_engine-0.1.7}/basilisk/generic/abstract_custom.py +1 -1
- {basilisk_engine-0.1.5 → basilisk_engine-0.1.7}/basilisk/generic/collisions.py +5 -3
- {basilisk_engine-0.1.5 → basilisk_engine-0.1.7}/basilisk/generic/matrices.py +6 -4
- {basilisk_engine-0.1.5 → basilisk_engine-0.1.7}/basilisk/generic/quat.py +10 -5
- {basilisk_engine-0.1.5 → basilisk_engine-0.1.7}/basilisk/nodes/node.py +9 -7
- {basilisk_engine-0.1.5 → basilisk_engine-0.1.7}/basilisk/render/camera.py +2 -0
- {basilisk_engine-0.1.5 → basilisk_engine-0.1.7}/basilisk/render/frame.py +5 -2
- {basilisk_engine-0.1.5 → basilisk_engine-0.1.7}/basilisk/render/framebuffer.py +30 -5
- {basilisk_engine-0.1.5 → basilisk_engine-0.1.7}/basilisk/render/post_process.py +1 -1
- {basilisk_engine-0.1.5 → basilisk_engine-0.1.7}/basilisk/scene.py +11 -3
- {basilisk_engine-0.1.5 → basilisk_engine-0.1.7/basilisk_engine.egg-info}/PKG-INFO +2 -1
- {basilisk_engine-0.1.5 → basilisk_engine-0.1.7}/basilisk_engine.egg-info/requires.txt +1 -0
- {basilisk_engine-0.1.5 → basilisk_engine-0.1.7}/setup.py +2 -2
- {basilisk_engine-0.1.5 → basilisk_engine-0.1.7}/MANIFEST.in +0 -0
- {basilisk_engine-0.1.5 → basilisk_engine-0.1.7}/README.md +0 -0
- {basilisk_engine-0.1.5 → basilisk_engine-0.1.7}/basilisk/bsk_assets/Roboto-Regular.ttf +0 -0
- {basilisk_engine-0.1.5 → basilisk_engine-0.1.7}/basilisk/bsk_assets/__init__.py +0 -0
- {basilisk_engine-0.1.5 → basilisk_engine-0.1.7}/basilisk/bsk_assets/basilisk.png +0 -0
- {basilisk_engine-0.1.5 → basilisk_engine-0.1.7}/basilisk/bsk_assets/cube.obj +0 -0
- {basilisk_engine-0.1.5 → basilisk_engine-0.1.7}/basilisk/bsk_assets/skybox.png +0 -0
- {basilisk_engine-0.1.5 → basilisk_engine-0.1.7}/basilisk/collisions/__init__.py +0 -0
- {basilisk_engine-0.1.5 → basilisk_engine-0.1.7}/basilisk/collisions/broad/__init__.py +0 -0
- {basilisk_engine-0.1.5 → basilisk_engine-0.1.7}/basilisk/collisions/broad/broad_aabb.py +0 -0
- {basilisk_engine-0.1.5 → basilisk_engine-0.1.7}/basilisk/collisions/broad/broad_bvh.py +0 -0
- {basilisk_engine-0.1.5 → basilisk_engine-0.1.7}/basilisk/collisions/collider.py +0 -0
- {basilisk_engine-0.1.5 → basilisk_engine-0.1.7}/basilisk/collisions/narrow/__init__.py +0 -0
- {basilisk_engine-0.1.5 → basilisk_engine-0.1.7}/basilisk/collisions/narrow/deprecated.py +0 -0
- {basilisk_engine-0.1.5 → basilisk_engine-0.1.7}/basilisk/collisions/narrow/epa.py +0 -0
- {basilisk_engine-0.1.5 → basilisk_engine-0.1.7}/basilisk/collisions/narrow/graham_scan.py +0 -0
- {basilisk_engine-0.1.5 → basilisk_engine-0.1.7}/basilisk/collisions/narrow/line_intersections.py +0 -0
- {basilisk_engine-0.1.5 → basilisk_engine-0.1.7}/basilisk/collisions/narrow/sutherland_hodgman.py +0 -0
- {basilisk_engine-0.1.5 → basilisk_engine-0.1.7}/basilisk/config.py +0 -0
- {basilisk_engine-0.1.5 → basilisk_engine-0.1.7}/basilisk/draw/__init__.py +0 -0
- {basilisk_engine-0.1.5 → basilisk_engine-0.1.7}/basilisk/draw/draw.py +0 -0
- {basilisk_engine-0.1.5 → basilisk_engine-0.1.7}/basilisk/draw/draw_handler.py +0 -0
- {basilisk_engine-0.1.5 → basilisk_engine-0.1.7}/basilisk/draw/font_renderer.py +0 -0
- {basilisk_engine-0.1.5 → basilisk_engine-0.1.7}/basilisk/generic/__init__.py +0 -0
- {basilisk_engine-0.1.5 → basilisk_engine-0.1.7}/basilisk/generic/abstract_bvh.py +0 -0
- {basilisk_engine-0.1.5 → basilisk_engine-0.1.7}/basilisk/generic/input_validation.py +0 -0
- {basilisk_engine-0.1.5 → basilisk_engine-0.1.7}/basilisk/generic/math.py +0 -0
- {basilisk_engine-0.1.5 → basilisk_engine-0.1.7}/basilisk/generic/meshes.py +0 -0
- {basilisk_engine-0.1.5 → basilisk_engine-0.1.7}/basilisk/generic/quat_methods.py +0 -0
- {basilisk_engine-0.1.5 → basilisk_engine-0.1.7}/basilisk/generic/raycast_result.py +0 -0
- {basilisk_engine-0.1.5 → basilisk_engine-0.1.7}/basilisk/generic/vec3.py +0 -0
- {basilisk_engine-0.1.5 → basilisk_engine-0.1.7}/basilisk/input/__init__.py +0 -0
- {basilisk_engine-0.1.5 → basilisk_engine-0.1.7}/basilisk/input/mouse.py +0 -0
- {basilisk_engine-0.1.5 → basilisk_engine-0.1.7}/basilisk/input/path.py +0 -0
- {basilisk_engine-0.1.5 → basilisk_engine-0.1.7}/basilisk/mesh/__init__.py +0 -0
- {basilisk_engine-0.1.5 → basilisk_engine-0.1.7}/basilisk/mesh/cube.py +0 -0
- {basilisk_engine-0.1.5 → basilisk_engine-0.1.7}/basilisk/mesh/mesh.py +0 -0
- {basilisk_engine-0.1.5 → basilisk_engine-0.1.7}/basilisk/mesh/mesh_from_data.py +0 -0
- {basilisk_engine-0.1.5 → basilisk_engine-0.1.7}/basilisk/mesh/model.py +0 -0
- {basilisk_engine-0.1.5 → basilisk_engine-0.1.7}/basilisk/mesh/narrow_aabb.py +0 -0
- {basilisk_engine-0.1.5 → basilisk_engine-0.1.7}/basilisk/mesh/narrow_bvh.py +0 -0
- {basilisk_engine-0.1.5 → basilisk_engine-0.1.7}/basilisk/mesh/narrow_primative.py +0 -0
- {basilisk_engine-0.1.5 → basilisk_engine-0.1.7}/basilisk/nodes/__init__.py +0 -0
- {basilisk_engine-0.1.5 → basilisk_engine-0.1.7}/basilisk/nodes/helper.py +0 -0
- {basilisk_engine-0.1.5 → basilisk_engine-0.1.7}/basilisk/nodes/node_handler.py +0 -0
- {basilisk_engine-0.1.5 → basilisk_engine-0.1.7}/basilisk/particles/__init__.py +0 -0
- {basilisk_engine-0.1.5 → basilisk_engine-0.1.7}/basilisk/particles/particle_handler.py +0 -0
- {basilisk_engine-0.1.5 → basilisk_engine-0.1.7}/basilisk/particles/particle_renderer.py +0 -0
- {basilisk_engine-0.1.5 → basilisk_engine-0.1.7}/basilisk/physics/__init__.py +0 -0
- {basilisk_engine-0.1.5 → basilisk_engine-0.1.7}/basilisk/physics/impulse.py +0 -0
- {basilisk_engine-0.1.5 → basilisk_engine-0.1.7}/basilisk/physics/physics_body.py +0 -0
- {basilisk_engine-0.1.5 → basilisk_engine-0.1.7}/basilisk/physics/physics_engine.py +0 -0
- {basilisk_engine-0.1.5 → basilisk_engine-0.1.7}/basilisk/render/__init__.py +0 -0
- {basilisk_engine-0.1.5 → basilisk_engine-0.1.7}/basilisk/render/batch.py +0 -0
- {basilisk_engine-0.1.5 → basilisk_engine-0.1.7}/basilisk/render/chunk.py +0 -0
- {basilisk_engine-0.1.5 → basilisk_engine-0.1.7}/basilisk/render/chunk_handler.py +0 -0
- {basilisk_engine-0.1.5 → basilisk_engine-0.1.7}/basilisk/render/image.py +0 -0
- {basilisk_engine-0.1.5 → basilisk_engine-0.1.7}/basilisk/render/image_handler.py +0 -0
- {basilisk_engine-0.1.5 → basilisk_engine-0.1.7}/basilisk/render/light.py +0 -0
- {basilisk_engine-0.1.5 → basilisk_engine-0.1.7}/basilisk/render/light_handler.py +0 -0
- {basilisk_engine-0.1.5 → basilisk_engine-0.1.7}/basilisk/render/material.py +0 -0
- {basilisk_engine-0.1.5 → basilisk_engine-0.1.7}/basilisk/render/material_handler.py +0 -0
- {basilisk_engine-0.1.5 → basilisk_engine-0.1.7}/basilisk/render/shader.py +0 -0
- {basilisk_engine-0.1.5 → basilisk_engine-0.1.7}/basilisk/render/shader_handler.py +0 -0
- {basilisk_engine-0.1.5 → basilisk_engine-0.1.7}/basilisk/render/sky.py +0 -0
- {basilisk_engine-0.1.5 → basilisk_engine-0.1.7}/basilisk/shaders/__init__.py +0 -0
- {basilisk_engine-0.1.5 → basilisk_engine-0.1.7}/basilisk/shaders/batch.frag +0 -0
- {basilisk_engine-0.1.5 → basilisk_engine-0.1.7}/basilisk/shaders/batch.vert +0 -0
- {basilisk_engine-0.1.5 → basilisk_engine-0.1.7}/basilisk/shaders/crt.frag +0 -0
- {basilisk_engine-0.1.5 → basilisk_engine-0.1.7}/basilisk/shaders/draw.frag +0 -0
- {basilisk_engine-0.1.5 → basilisk_engine-0.1.7}/basilisk/shaders/draw.vert +0 -0
- {basilisk_engine-0.1.5 → basilisk_engine-0.1.7}/basilisk/shaders/filter.frag +0 -0
- {basilisk_engine-0.1.5 → basilisk_engine-0.1.7}/basilisk/shaders/frame.frag +0 -0
- {basilisk_engine-0.1.5 → basilisk_engine-0.1.7}/basilisk/shaders/frame.vert +0 -0
- {basilisk_engine-0.1.5 → basilisk_engine-0.1.7}/basilisk/shaders/geometry.frag +0 -0
- {basilisk_engine-0.1.5 → basilisk_engine-0.1.7}/basilisk/shaders/geometry.vert +0 -0
- {basilisk_engine-0.1.5 → basilisk_engine-0.1.7}/basilisk/shaders/normal.frag +0 -0
- {basilisk_engine-0.1.5 → basilisk_engine-0.1.7}/basilisk/shaders/normal.vert +0 -0
- {basilisk_engine-0.1.5 → basilisk_engine-0.1.7}/basilisk/shaders/particle.frag +0 -0
- {basilisk_engine-0.1.5 → basilisk_engine-0.1.7}/basilisk/shaders/particle.vert +0 -0
- {basilisk_engine-0.1.5 → basilisk_engine-0.1.7}/basilisk/shaders/sky.frag +0 -0
- {basilisk_engine-0.1.5 → basilisk_engine-0.1.7}/basilisk/shaders/sky.vert +0 -0
- {basilisk_engine-0.1.5 → basilisk_engine-0.1.7}/basilisk_engine.egg-info/SOURCES.txt +0 -0
- {basilisk_engine-0.1.5 → basilisk_engine-0.1.7}/basilisk_engine.egg-info/dependency_links.txt +0 -0
- {basilisk_engine-0.1.5 → basilisk_engine-0.1.7}/basilisk_engine.egg-info/top_level.txt +0 -0
- {basilisk_engine-0.1.5 → basilisk_engine-0.1.7}/docs/images/0_boilerplate.png +0 -0
- {basilisk_engine-0.1.5 → basilisk_engine-0.1.7}/images/cloth.png +0 -0
- {basilisk_engine-0.1.5 → basilisk_engine-0.1.7}/images/floor.png +0 -0
- {basilisk_engine-0.1.5 → basilisk_engine-0.1.7}/images/foil.png +0 -0
- {basilisk_engine-0.1.5 → basilisk_engine-0.1.7}/images/mud.png +0 -0
- {basilisk_engine-0.1.5 → basilisk_engine-0.1.7}/setup.cfg +0 -0
- {basilisk_engine-0.1.5 → basilisk_engine-0.1.7}/tests/SkySkybox.png +0 -0
- {basilisk_engine-0.1.5 → basilisk_engine-0.1.7}/tests/brick.png +0 -0
- {basilisk_engine-0.1.5 → basilisk_engine-0.1.7}/tests/brick_normal.png +0 -0
- {basilisk_engine-0.1.5 → basilisk_engine-0.1.7}/tests/bunny.obj +0 -0
- {basilisk_engine-0.1.5 → basilisk_engine-0.1.7}/tests/closet_001.obj +0 -0
- {basilisk_engine-0.1.5 → basilisk_engine-0.1.7}/tests/cloth_albedo.png +0 -0
- {basilisk_engine-0.1.5 → basilisk_engine-0.1.7}/tests/cloth_normal.png +0 -0
- {basilisk_engine-0.1.5 → basilisk_engine-0.1.7}/tests/cube.obj +0 -0
- {basilisk_engine-0.1.5 → basilisk_engine-0.1.7}/tests/cubemaps_skybox.png +0 -0
- {basilisk_engine-0.1.5 → basilisk_engine-0.1.7}/tests/cylinder.obj +0 -0
- {basilisk_engine-0.1.5 → basilisk_engine-0.1.7}/tests/demo_sphere.obj +0 -0
- {basilisk_engine-0.1.5 → basilisk_engine-0.1.7}/tests/dirt.png +0 -0
- {basilisk_engine-0.1.5 → basilisk_engine-0.1.7}/tests/floor_albedo.png +0 -0
- {basilisk_engine-0.1.5 → basilisk_engine-0.1.7}/tests/floor_normal.png +0 -0
- {basilisk_engine-0.1.5 → basilisk_engine-0.1.7}/tests/foil_normal.png +0 -0
- {basilisk_engine-0.1.5 → basilisk_engine-0.1.7}/tests/fridge_001.obj +0 -0
- {basilisk_engine-0.1.5 → basilisk_engine-0.1.7}/tests/grass.jpg +0 -0
- {basilisk_engine-0.1.5 → basilisk_engine-0.1.7}/tests/grass_ao.jpg +0 -0
- {basilisk_engine-0.1.5 → basilisk_engine-0.1.7}/tests/grass_block_side.png +0 -0
- {basilisk_engine-0.1.5 → basilisk_engine-0.1.7}/tests/grass_block_top.png +0 -0
- {basilisk_engine-0.1.5 → basilisk_engine-0.1.7}/tests/grass_normal.png +0 -0
- {basilisk_engine-0.1.5 → basilisk_engine-0.1.7}/tests/grass_roughness.jpg +0 -0
- {basilisk_engine-0.1.5 → basilisk_engine-0.1.7}/tests/image.png +0 -0
- {basilisk_engine-0.1.5 → basilisk_engine-0.1.7}/tests/lucy.obj +0 -0
- {basilisk_engine-0.1.5 → basilisk_engine-0.1.7}/tests/monkey.obj +0 -0
- {basilisk_engine-0.1.5 → basilisk_engine-0.1.7}/tests/mud.png +0 -0
- {basilisk_engine-0.1.5 → basilisk_engine-0.1.7}/tests/mud_normal.png +0 -0
- {basilisk_engine-0.1.5 → basilisk_engine-0.1.7}/tests/oak_tree.obj +0 -0
- {basilisk_engine-0.1.5 → basilisk_engine-0.1.7}/tests/skybox.png +0 -0
- {basilisk_engine-0.1.5 → basilisk_engine-0.1.7}/tests/sphere.obj +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: basilisk-engine
|
|
3
|
-
Version: 0.1.
|
|
3
|
+
Version: 0.1.7
|
|
4
4
|
Summary: Python 3D Framework
|
|
5
5
|
Home-page: https://basilisk-website.vercel.app/
|
|
6
6
|
Author: Name
|
|
@@ -12,6 +12,7 @@ Requires-Dist: pygame-ce
|
|
|
12
12
|
Requires-Dist: moderngl
|
|
13
13
|
Requires-Dist: PyGLM
|
|
14
14
|
Requires-Dist: numba
|
|
15
|
+
Requires-Dist: PyOpenAL
|
|
15
16
|
|
|
16
17
|
# Basilisk Engine
|
|
17
18
|

|
|
@@ -10,4 +10,6 @@ from .render.shader_handler import ShaderHandler
|
|
|
10
10
|
from .draw import draw
|
|
11
11
|
from .render.camera import FreeCamera, StaticCamera, FollowCamera, OrbitCamera
|
|
12
12
|
from .render.sky import Sky
|
|
13
|
-
from .render.post_process import PostProcess
|
|
13
|
+
from .render.post_process import PostProcess
|
|
14
|
+
from .render.framebuffer import Framebuffer
|
|
15
|
+
from .audio.sound import Sound
|
|
@@ -141,7 +141,6 @@ class ColliderHandler():
|
|
|
141
141
|
for point in incoming:
|
|
142
142
|
incoming_indices.add(point.index)
|
|
143
143
|
if point.index not in existing or glm.length2(point.vertex - existing[point.index]) > 1e-5: existing[point.index] = glm.vec3(point.vertex)
|
|
144
|
-
# if glm.length2(point.vertex - existing[point.index]) != 0: print(point.vertex - existing[point.index])
|
|
145
144
|
|
|
146
145
|
# remove changed stored points
|
|
147
146
|
remove_indices = []
|
|
@@ -195,7 +194,7 @@ class ColliderHandler():
|
|
|
195
194
|
points1 = [ContactPoint(p.index1, p.vertex1) for p in polytope]
|
|
196
195
|
points2 = [ContactPoint(p.index2, p.vertex2) for p in polytope]
|
|
197
196
|
|
|
198
|
-
if glm.dot(vec, node2.position - node1.position) > 0: vec *= -1
|
|
197
|
+
if glm.dot(vec, node2.position.data - node1.position.data) > 0: vec *= -1
|
|
199
198
|
|
|
200
199
|
# add collision data to colliders
|
|
201
200
|
collider1.collisions.append(Collision(node2, vec))
|
|
@@ -210,7 +209,7 @@ class ColliderHandler():
|
|
|
210
209
|
|
|
211
210
|
collider_tuple = (collider1, collider2)
|
|
212
211
|
manifold = get_contact_manifold(
|
|
213
|
-
node1.position - vec,
|
|
212
|
+
node1.position.data - vec,
|
|
214
213
|
vec,
|
|
215
214
|
self.contact_manifolds[collider_tuple].contact_points1.values(),
|
|
216
215
|
self.contact_manifolds[collider_tuple].contact_points2.values()
|
{basilisk_engine-0.1.5 → basilisk_engine-0.1.7}/basilisk/collisions/narrow/contact_manifold.py
RENAMED
|
@@ -4,6 +4,10 @@ from .line_intersections import line_line_intersect, line_poly_intersect
|
|
|
4
4
|
from .graham_scan import graham_scan
|
|
5
5
|
from .sutherland_hodgman import sutherland_hodgman
|
|
6
6
|
from .dataclasses import ContactPoint
|
|
7
|
+
from ...generic.vec3 import Vec3
|
|
8
|
+
from ...generic.quat import Quat
|
|
9
|
+
|
|
10
|
+
|
|
7
11
|
|
|
8
12
|
# sutherland hodgman clipping algorithm
|
|
9
13
|
def get_contact_manifold(contact_plane_point:glm.vec3, contact_plane_normal:glm.vec3, points1:list[glm.vec3], points2:list[glm.vec3]) -> list[glm.vec3]:
|
|
@@ -47,6 +51,7 @@ def separate_polytope(points1: list[ContactPoint], points2: list[ContactPoint],
|
|
|
47
51
|
"""
|
|
48
52
|
Determines the potential contact manifold points of each shape based on their position along the penetrating axis
|
|
49
53
|
"""
|
|
54
|
+
|
|
50
55
|
proj1 = [(glm.dot(point.vertex, contact_plane_normal), point) for point in points1]
|
|
51
56
|
proj2 = [(glm.dot(point.vertex, contact_plane_normal), point) for point in points2]
|
|
52
57
|
|
|
@@ -63,7 +68,7 @@ def distance_to_plane(contact_plane_point:glm.vec3, contact_plane_normal:glm.vec
|
|
|
63
68
|
"""gets the smallest distance a point is from a plane"""
|
|
64
69
|
return glm.dot(point - contact_plane_point, contact_plane_normal) #TODO check this formula
|
|
65
70
|
|
|
66
|
-
def project_points(contact_plane_point:glm.vec3, contact_plane_normal:glm.vec3, points:list[
|
|
71
|
+
def project_points(contact_plane_point:glm.vec3, contact_plane_normal:glm.vec3, points:list[Vec3]) -> list[glm.vec3]:
|
|
67
72
|
"""gets the projected positions of the given points onto the given plane"""
|
|
68
73
|
return [point - glm.dot(point - contact_plane_point, contact_plane_normal) * contact_plane_normal for point in points]
|
|
69
74
|
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
import glm
|
|
2
2
|
from dataclasses import dataclass
|
|
3
|
+
|
|
4
|
+
from basilisk.generic.vec3 import Vec3
|
|
3
5
|
# from ...nodes.node import Node
|
|
4
6
|
|
|
5
7
|
# frozen because data does not need to be mutable
|
|
@@ -18,7 +20,7 @@ class SupportPoint():
|
|
|
18
20
|
@dataclass(frozen=True)
|
|
19
21
|
class ContactPoint():
|
|
20
22
|
index: int
|
|
21
|
-
vertex:
|
|
23
|
+
vertex: Vec3
|
|
22
24
|
|
|
23
25
|
# contact manifold object used in the contact handler list
|
|
24
26
|
@dataclass
|
|
@@ -10,7 +10,7 @@ def collide_gjk(node1: Node, node2: Node, iterations: int=20) -> tuple: # TODO f
|
|
|
10
10
|
Determines if two convex polyhedra collide, returns the polytope if there is a collision.
|
|
11
11
|
"""
|
|
12
12
|
# generate starting values
|
|
13
|
-
dir_vec = node1.position - node2.position
|
|
13
|
+
dir_vec = node1.position.data - node2.position.data
|
|
14
14
|
simplex = [get_support_point(node1, node2, dir_vec)]
|
|
15
15
|
dir_vec = -simplex[0].support_point # set direction to point away from starting simplex point
|
|
16
16
|
|
|
@@ -15,7 +15,7 @@ def get_furthest_point(node: Node, dir_vec: glm.vec3) -> glm.vec3:
|
|
|
15
15
|
Determines the furthest point in a given direction
|
|
16
16
|
"""
|
|
17
17
|
# determine furthest point by using untransformed mesh
|
|
18
|
-
node_dir_vec = node.rotation * dir_vec # rotate the world space vector to node space
|
|
18
|
+
node_dir_vec = node.rotation.data * dir_vec # rotate the world space vector to node space
|
|
19
19
|
index = node.collider.mesh.get_best_dot(node_dir_vec)
|
|
20
20
|
vertex = node.collider.mesh.points[index]
|
|
21
21
|
vertex = node.model_matrix * glm.vec4(vertex, 1.0)
|
|
@@ -10,7 +10,8 @@ from .config import Config
|
|
|
10
10
|
from .input.mouse import Mouse
|
|
11
11
|
from .mesh.cube import Cube
|
|
12
12
|
from .render.shader import Shader
|
|
13
|
-
|
|
13
|
+
import glcontext
|
|
14
|
+
import openal
|
|
14
15
|
|
|
15
16
|
class Engine():
|
|
16
17
|
win_size: tuple
|
|
@@ -83,10 +84,9 @@ class Engine():
|
|
|
83
84
|
# Global attributes referenced by the handlers
|
|
84
85
|
self.headless = headless
|
|
85
86
|
self.set_configurations()
|
|
86
|
-
# self.root = get_root()
|
|
87
|
-
# self.root = getattr(sys, '_MEIPASS', os.getcwd()) + '/basilisk'
|
|
88
87
|
self.root = os.path.dirname(__file__)
|
|
89
88
|
self.cube = Cube(self)
|
|
89
|
+
self.fbos = []
|
|
90
90
|
|
|
91
91
|
# Update the icon
|
|
92
92
|
pg.display.set_icon(pg.image.load(self.root + '/bsk_assets/basilisk.png'))
|
|
@@ -111,7 +111,7 @@ class Engine():
|
|
|
111
111
|
# Set the scene to running
|
|
112
112
|
self.running = True
|
|
113
113
|
|
|
114
|
-
def update(self) -> None:
|
|
114
|
+
def update(self, render=True) -> None:
|
|
115
115
|
"""
|
|
116
116
|
Updates all input, physics, and time variables. Renders the current scene.
|
|
117
117
|
"""
|
|
@@ -132,6 +132,7 @@ class Engine():
|
|
|
132
132
|
# Loop through all pygame events
|
|
133
133
|
for event in self.events:
|
|
134
134
|
if event.type == pg.QUIT: # Quit the engine
|
|
135
|
+
openal.oalQuit()
|
|
135
136
|
self.quit()
|
|
136
137
|
return
|
|
137
138
|
if event.type == pg.VIDEORESIZE:
|
|
@@ -140,12 +141,13 @@ class Engine():
|
|
|
140
141
|
self.ctx.viewport = (0, 0, event.w, event.h)
|
|
141
142
|
self.scene.camera.use()
|
|
142
143
|
self.scene.frame.resize()
|
|
144
|
+
for fbo in self.fbos: fbo.resize()
|
|
143
145
|
|
|
144
146
|
|
|
145
147
|
# Update the scene if possible
|
|
146
148
|
if self.scene: self.scene.update()
|
|
147
149
|
# Render after the scene and engine has been updated
|
|
148
|
-
self.render()
|
|
150
|
+
if render: self.render()
|
|
149
151
|
|
|
150
152
|
|
|
151
153
|
def render(self) -> None:
|
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
import glm
|
|
2
|
+
from ..generic.vec3 import Vec3
|
|
3
|
+
from ..generic.quat import Quat
|
|
2
4
|
|
|
3
5
|
|
|
4
6
|
def collide_aabb_aabb(top_right1: glm.vec3, bottom_left1: glm.vec3, top_right2: glm.vec3, bottom_left2: glm.vec3, epsilon:float=1e-7) -> bool:
|
|
@@ -53,13 +55,13 @@ def moller_trumbore(point:glm.vec3, vec:glm.vec3, triangle:list[glm.vec3], epsil
|
|
|
53
55
|
if t > epsilon: return point + vec * t
|
|
54
56
|
return None
|
|
55
57
|
|
|
56
|
-
def get_sat_axes(rotation1:
|
|
58
|
+
def get_sat_axes(rotation1: Quat, rotation2: Quat) -> list[glm.vec3]:
|
|
57
59
|
"""
|
|
58
60
|
Gets the axes for SAT from obb rotation matrices
|
|
59
61
|
"""
|
|
60
62
|
axes = []
|
|
61
|
-
axes.extend(glm.transpose(glm.mat3_cast(rotation1)))
|
|
62
|
-
axes.extend(glm.transpose(glm.mat3_cast(rotation2)))
|
|
63
|
+
axes.extend(glm.transpose(glm.mat3_cast(rotation1.data)))
|
|
64
|
+
axes.extend(glm.transpose(glm.mat3_cast(rotation2.data)))
|
|
63
65
|
|
|
64
66
|
# crossed roots
|
|
65
67
|
for i in range(0, 3):
|
|
@@ -1,14 +1,16 @@
|
|
|
1
1
|
import glm
|
|
2
|
+
from ..generic.vec3 import Vec3
|
|
3
|
+
from ..generic.quat import Quat
|
|
2
4
|
|
|
3
5
|
|
|
4
6
|
# transform matrices
|
|
5
|
-
def get_model_matrix(position:
|
|
7
|
+
def get_model_matrix(position: Vec3, scale: Vec3, rotation: Quat) -> glm.mat4x4:
|
|
6
8
|
"""
|
|
7
9
|
Gets projection matrix from object data
|
|
8
10
|
"""
|
|
9
|
-
translation_matrix = glm.translate(glm.mat4(1.0), position)
|
|
10
|
-
rotation_matrix = glm.mat4_cast(rotation)
|
|
11
|
-
scale_matrix = glm.scale(glm.mat4(1.0), scale)
|
|
11
|
+
translation_matrix = glm.translate(glm.mat4(1.0), position.data)
|
|
12
|
+
rotation_matrix = glm.mat4_cast(rotation.data)
|
|
13
|
+
scale_matrix = glm.scale(glm.mat4(1.0), scale.data)
|
|
12
14
|
model_matrix = translation_matrix * glm.transpose(rotation_matrix) * scale_matrix
|
|
13
15
|
return model_matrix
|
|
14
16
|
|
|
@@ -82,10 +82,10 @@ class Quat(Custom):
|
|
|
82
82
|
|
|
83
83
|
# override str operators
|
|
84
84
|
def __repr__(self):
|
|
85
|
-
return str(self.data)
|
|
86
|
-
|
|
87
|
-
def
|
|
88
|
-
return
|
|
85
|
+
return 'bsk' + str(self.data)
|
|
86
|
+
|
|
87
|
+
def __str__(self):
|
|
88
|
+
return 'bsk ' + str(self.data)
|
|
89
89
|
|
|
90
90
|
@property
|
|
91
91
|
def data(self): return self._data
|
|
@@ -108,6 +108,7 @@ class Quat(Custom):
|
|
|
108
108
|
if self.callback and (abs(cur.w - prev.w) > thresh or abs(cur.x - prev.x) > thresh or abs(cur.y - prev.y) > thresh or abs(cur.z - prev.z) > thresh):
|
|
109
109
|
self.prev_data = glm.quat(self._data)
|
|
110
110
|
self.callback()
|
|
111
|
+
self.normalize()
|
|
111
112
|
|
|
112
113
|
@w.setter
|
|
113
114
|
def w(self, value):
|
|
@@ -115,6 +116,7 @@ class Quat(Custom):
|
|
|
115
116
|
if self.callback and abs(value - self.prev_data.w) > 1e-6:
|
|
116
117
|
self.prev_data.w = value
|
|
117
118
|
self.callback()
|
|
119
|
+
self.normalize()
|
|
118
120
|
|
|
119
121
|
@x.setter
|
|
120
122
|
def x(self, value):
|
|
@@ -122,6 +124,7 @@ class Quat(Custom):
|
|
|
122
124
|
if self.callback and abs(value - self.prev_data.x) > 1e-6:
|
|
123
125
|
self.prev_data.x = value
|
|
124
126
|
self.callback()
|
|
127
|
+
self.normalize()
|
|
125
128
|
|
|
126
129
|
@y.setter
|
|
127
130
|
def y(self, value):
|
|
@@ -129,10 +132,12 @@ class Quat(Custom):
|
|
|
129
132
|
if self.callback and abs(value - self.prev_data.y) > 1e-6:
|
|
130
133
|
self.prev_data.y = value
|
|
131
134
|
self.callback()
|
|
135
|
+
self.normalize()
|
|
132
136
|
|
|
133
137
|
@z.setter
|
|
134
138
|
def z(self, value):
|
|
135
139
|
self._data.z = value
|
|
136
140
|
if self.callback and abs(value - self.prev_data.z) > 1e-6:
|
|
137
141
|
self.prev_data.z = value
|
|
138
|
-
self.callback()
|
|
142
|
+
self.callback()
|
|
143
|
+
self.normalize()
|
|
@@ -217,7 +217,7 @@ class Node():
|
|
|
217
217
|
"""
|
|
218
218
|
# update based on physical properties
|
|
219
219
|
if any(self.velocity): self.position += dt * self.velocity
|
|
220
|
-
if any(self.rotational_velocity): self.rotation = glm.normalize(self.rotation - dt / 2 * self.rotation * glm.quat(0, *self.rotational_velocity))
|
|
220
|
+
if any(self.rotational_velocity): self.rotation = glm.normalize(self.rotation.data - dt / 2 * self.rotation.data * glm.quat(0, *self.rotational_velocity))
|
|
221
221
|
|
|
222
222
|
if self.physics_body:
|
|
223
223
|
self.velocity += self.physics_body.get_delta_velocity(dt)
|
|
@@ -344,7 +344,7 @@ class Node():
|
|
|
344
344
|
if self.physics_body: inertia_tensor *= self.physics_body.mass
|
|
345
345
|
|
|
346
346
|
# rotation
|
|
347
|
-
rotation_matrix = glm.mat3_cast(self.rotation)
|
|
347
|
+
rotation_matrix = glm.mat3_cast(self.rotation.data)
|
|
348
348
|
inertia_tensor = rotation_matrix * inertia_tensor * glm.transpose(rotation_matrix)
|
|
349
349
|
|
|
350
350
|
return glm.inverse(inertia_tensor)
|
|
@@ -405,11 +405,11 @@ class Node():
|
|
|
405
405
|
return f'<Bailisk Node | {self.name}, {self.mesh}, ({self.position})>'
|
|
406
406
|
|
|
407
407
|
@property
|
|
408
|
-
def position(self): return self.internal_position
|
|
408
|
+
def position(self): return self.internal_position
|
|
409
409
|
@property
|
|
410
|
-
def scale(self): return self.internal_scale
|
|
410
|
+
def scale(self): return self.internal_scale
|
|
411
411
|
@property
|
|
412
|
-
def rotation(self): return self.internal_rotation
|
|
412
|
+
def rotation(self): return self.internal_rotation
|
|
413
413
|
@property
|
|
414
414
|
def forward(self): return self._forward
|
|
415
415
|
@property
|
|
@@ -492,6 +492,7 @@ class Node():
|
|
|
492
492
|
@position.setter
|
|
493
493
|
def position(self, value: tuple | list | glm.vec3 | np.ndarray):
|
|
494
494
|
if isinstance(value, glm.vec3): self.internal_position.data = value
|
|
495
|
+
elif isinstance(value, Vec3): self.internal_position.data = value.data
|
|
495
496
|
elif isinstance(value, tuple) or isinstance(value, list) or isinstance(value, np.ndarray):
|
|
496
497
|
if len(value) != 3: raise ValueError(f'Node: Invalid number of values for position. Expected 3, got {len(value)}')
|
|
497
498
|
self.internal_position.data = glm.vec3(value)
|
|
@@ -503,6 +504,7 @@ class Node():
|
|
|
503
504
|
@scale.setter
|
|
504
505
|
def scale(self, value: tuple | list | glm.vec3 | np.ndarray):
|
|
505
506
|
if isinstance(value, glm.vec3): self.internal_scale.data = value
|
|
507
|
+
elif isinstance(value, Vec3): self.internal_scale.data = value.data
|
|
506
508
|
elif isinstance(value, tuple) or isinstance(value, list) or isinstance(value, np.ndarray):
|
|
507
509
|
if len(value) != 3: raise ValueError(f'Node: Invalid number of values for scale. Expected 3, got {len(value)}')
|
|
508
510
|
self.internal_scale.data = glm.vec3(value)
|
|
@@ -514,6 +516,7 @@ class Node():
|
|
|
514
516
|
@rotation.setter
|
|
515
517
|
def rotation(self, value: tuple | list | glm.vec3 | glm.quat | glm.vec4 | np.ndarray):
|
|
516
518
|
if isinstance(value, glm.quat) or isinstance(value, glm.vec4) or isinstance(value, glm.vec3): self.internal_rotation.data = glm.quat(value)
|
|
519
|
+
elif isinstance(value, Quat): self.internal_rotation.data = value.data
|
|
517
520
|
elif isinstance(value, tuple) or isinstance(value, list) or isinstance(value, np.ndarray):
|
|
518
521
|
if len(value) == 3: self.internal_rotation.data = glm.quat(glm.vec3(*value))
|
|
519
522
|
elif len(value) == 4: self.internal_rotation.data = glm.quat(*value)
|
|
@@ -677,5 +680,4 @@ class Node():
|
|
|
677
680
|
if self.node_handler: self.collider.collider_handler = self.node_handler.scene.collider_handler
|
|
678
681
|
elif not self.collider:
|
|
679
682
|
self.collider = Collider(self)
|
|
680
|
-
if self.node_handler: self.collider.collider_handler = self.node_handler.scene.collider_handler
|
|
681
|
-
|
|
683
|
+
if self.node_handler: self.collider.collider_handler = self.node_handler.scene.collider_handler
|
|
@@ -101,6 +101,8 @@ class Camera:
|
|
|
101
101
|
def direction(self): return self.forward
|
|
102
102
|
@property
|
|
103
103
|
def horizontal(self): return glm.normalize(self.forward.xz)
|
|
104
|
+
@property
|
|
105
|
+
def rotation(self): return glm.conjugate(glm.quatLookAt(self.forward, self.UP))
|
|
104
106
|
|
|
105
107
|
@scene.setter
|
|
106
108
|
def scene(self, value):
|
|
@@ -46,7 +46,7 @@ class Frame:
|
|
|
46
46
|
"""
|
|
47
47
|
|
|
48
48
|
for process in self.post_processes:
|
|
49
|
-
process.apply(self.framebuffer, self.ping_pong_buffer)
|
|
49
|
+
self.ping_pong_buffer = process.apply(self.framebuffer, self.ping_pong_buffer)
|
|
50
50
|
|
|
51
51
|
temp = self.framebuffer
|
|
52
52
|
self.framebuffer = self.ping_pong_buffer
|
|
@@ -64,7 +64,7 @@ class Frame:
|
|
|
64
64
|
"""
|
|
65
65
|
|
|
66
66
|
self.framebuffer.use()
|
|
67
|
-
self.
|
|
67
|
+
self.clear()
|
|
68
68
|
|
|
69
69
|
def add_post_process(self, post_process: PostProcess) -> PostProcess:
|
|
70
70
|
"""
|
|
@@ -81,6 +81,9 @@ class Frame:
|
|
|
81
81
|
|
|
82
82
|
self.framebuffer.save(destination)
|
|
83
83
|
|
|
84
|
+
def clear(self):
|
|
85
|
+
self.framebuffer.clear()
|
|
86
|
+
|
|
84
87
|
def resize(self, size: tuple[int]=None) -> None:
|
|
85
88
|
"""
|
|
86
89
|
Resize the frame to the given size. None for window size
|
|
@@ -1,6 +1,7 @@
|
|
|
1
|
+
import numpy as np
|
|
1
2
|
import moderngl as mgl
|
|
2
3
|
from PIL import Image
|
|
3
|
-
|
|
4
|
+
from ..render.shader import Shader
|
|
4
5
|
|
|
5
6
|
|
|
6
7
|
class Framebuffer:
|
|
@@ -15,7 +16,7 @@ class Framebuffer:
|
|
|
15
16
|
size: tuple[int]
|
|
16
17
|
"""The dimensions of the framebuffer (x, y)"""
|
|
17
18
|
|
|
18
|
-
def __init__(self, engine, size: tuple[int]=None, components: int=4, filter=(mgl.LINEAR, mgl.LINEAR)) -> None:
|
|
19
|
+
def __init__(self, engine, size: tuple[int]=None, resolution_scale: float=1.0, components: int=4, filter=(mgl.LINEAR, mgl.LINEAR)) -> None:
|
|
19
20
|
"""
|
|
20
21
|
Abstraction to the mgl framebuffer
|
|
21
22
|
Args:
|
|
@@ -28,18 +29,38 @@ class Framebuffer:
|
|
|
28
29
|
# Set attributes
|
|
29
30
|
self.engine = engine
|
|
30
31
|
self.ctx = engine.ctx
|
|
31
|
-
self.size = size if size else engine.win_size
|
|
32
32
|
self.components = components
|
|
33
33
|
|
|
34
|
+
# Set the size
|
|
35
|
+
self.resolution_scale = resolution_scale
|
|
36
|
+
self._size = size
|
|
37
|
+
self.size = self._size if self._size else self.engine.win_size
|
|
38
|
+
self.size = (int(self.size[0] * resolution_scale), int(self.size[1] * resolution_scale))
|
|
39
|
+
|
|
34
40
|
# Create the fbo
|
|
35
41
|
self.texture = self.ctx.texture(self.size, components=self.components)
|
|
36
42
|
self.depth = self.ctx.depth_texture(self.size)
|
|
37
43
|
self.fbo = self.ctx.framebuffer([self.texture], self.depth)
|
|
38
44
|
|
|
39
|
-
|
|
45
|
+
# Load Shaders
|
|
46
|
+
self.shader = Shader(self.engine, self.engine.root + '/shaders/frame.vert', self.engine.root + '/shaders/frame.frag')
|
|
47
|
+
self.engine.scene.shader_handler.add(self.shader)
|
|
48
|
+
|
|
49
|
+
# Load VAO
|
|
50
|
+
self.vbo = self.ctx.buffer(np.array([[-1, -1, 0, 0, 0], [1, -1, 0, 1, 0], [1, 1, 0, 1, 1], [-1, 1, 0, 0, 1], [-1, -1, 0, 0, 0], [1, 1, 0, 1, 1]], dtype='f4'))
|
|
51
|
+
self.vao = self.ctx.vertex_array(self.shader.program, [(self.vbo, '3f 2f', 'in_position', 'in_uv')], skip_errors=True)
|
|
40
52
|
|
|
53
|
+
# Save the filter
|
|
41
54
|
self.filter = filter
|
|
42
55
|
|
|
56
|
+
# Add to the engine for updates
|
|
57
|
+
self.engine.fbos.append(self)
|
|
58
|
+
|
|
59
|
+
def render(self) -> None:
|
|
60
|
+
self.shader.program['screenTexture'] = 0
|
|
61
|
+
self.texture.use(location=0)
|
|
62
|
+
self.vao.render()
|
|
63
|
+
|
|
43
64
|
def use(self) -> None:
|
|
44
65
|
"""
|
|
45
66
|
Select this framebuffer for use
|
|
@@ -74,7 +95,11 @@ class Framebuffer:
|
|
|
74
95
|
self.__del__()
|
|
75
96
|
|
|
76
97
|
# Set/get size attribute
|
|
77
|
-
|
|
98
|
+
if size:
|
|
99
|
+
self.size = size
|
|
100
|
+
else:
|
|
101
|
+
self.size = self._size if self._size else self.engine.win_size
|
|
102
|
+
self.size = (int(self.size[0] * self.resolution_scale), int(self.size[1] * self.resolution_scale))
|
|
78
103
|
|
|
79
104
|
# Create the fbo
|
|
80
105
|
self.texture = self.ctx.texture(self.size, components=self.components)
|
|
@@ -18,6 +18,7 @@ from .nodes.node import Node
|
|
|
18
18
|
from .generic.collisions import moller_trumbore
|
|
19
19
|
from .generic.raycast_result import RaycastResult
|
|
20
20
|
from .render.post_process import PostProcess
|
|
21
|
+
from .render.framebuffer import Framebuffer
|
|
21
22
|
|
|
22
23
|
class Scene():
|
|
23
24
|
engine: any
|
|
@@ -54,19 +55,26 @@ class Scene():
|
|
|
54
55
|
if self.engine.delta_time < 0.5: # TODO this will cause physics to slow down when on low frame rate, this is probabl;y acceptable
|
|
55
56
|
self.collider_handler.resolve_collisions()
|
|
56
57
|
|
|
57
|
-
def render(self) -> None:
|
|
58
|
+
def render(self, render_target: Framebuffer|Frame=None) -> None:
|
|
58
59
|
"""
|
|
59
60
|
Renders all the nodes with meshes in the scene
|
|
60
61
|
"""
|
|
61
62
|
|
|
62
|
-
|
|
63
|
+
if render_target:
|
|
64
|
+
show = False
|
|
65
|
+
else:
|
|
66
|
+
render_target = self.frame
|
|
67
|
+
show = True
|
|
68
|
+
|
|
69
|
+
render_target.use()
|
|
70
|
+
render_target.clear()
|
|
63
71
|
self.shader_handler.write()
|
|
64
72
|
if self.sky: self.sky.render()
|
|
65
73
|
self.node_handler.render()
|
|
66
74
|
self.particle.render()
|
|
67
75
|
self.draw_handler.render()
|
|
68
76
|
|
|
69
|
-
if self.engine.headless: return
|
|
77
|
+
if self.engine.headless or not show: return
|
|
70
78
|
self.frame.render()
|
|
71
79
|
|
|
72
80
|
def add(self, *objects: Node | None) -> None | Node | list:
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: basilisk-engine
|
|
3
|
-
Version: 0.1.
|
|
3
|
+
Version: 0.1.7
|
|
4
4
|
Summary: Python 3D Framework
|
|
5
5
|
Home-page: https://basilisk-website.vercel.app/
|
|
6
6
|
Author: Name
|
|
@@ -12,6 +12,7 @@ Requires-Dist: pygame-ce
|
|
|
12
12
|
Requires-Dist: moderngl
|
|
13
13
|
Requires-Dist: PyGLM
|
|
14
14
|
Requires-Dist: numba
|
|
15
|
+
Requires-Dist: PyOpenAL
|
|
15
16
|
|
|
16
17
|
# Basilisk Engine
|
|
17
18
|

|
|
@@ -7,7 +7,7 @@ with open(path.join(working_directory, 'README.md'), encoding='utf-8') as f:
|
|
|
7
7
|
|
|
8
8
|
setup(
|
|
9
9
|
name = 'basilisk-engine', # Name of folder containing scripts and __init__
|
|
10
|
-
version = '0.1.
|
|
10
|
+
version = '0.1.7',
|
|
11
11
|
url = 'https://basilisk-website.vercel.app/',
|
|
12
12
|
author = 'Name',
|
|
13
13
|
author_email = 'basiliskengine@gmail.com',
|
|
@@ -16,5 +16,5 @@ setup(
|
|
|
16
16
|
long_description_content_type = 'text/markdown',
|
|
17
17
|
packages=find_packages(),
|
|
18
18
|
include_package_data=True,
|
|
19
|
-
install_requires=['numpy', 'pillow', 'pygame-ce', 'moderngl', 'PyGLM', 'numba'], # Include all used packages
|
|
19
|
+
install_requires=['numpy', 'pillow', 'pygame-ce', 'moderngl', 'PyGLM', 'numba', 'PyOpenAL'], # Include all used packages
|
|
20
20
|
)
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{basilisk_engine-0.1.5 → basilisk_engine-0.1.7}/basilisk/collisions/narrow/line_intersections.py
RENAMED
|
File without changes
|
{basilisk_engine-0.1.5 → basilisk_engine-0.1.7}/basilisk/collisions/narrow/sutherland_hodgman.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{basilisk_engine-0.1.5 → basilisk_engine-0.1.7}/basilisk_engine.egg-info/dependency_links.txt
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|