diff --git a/.gitignore b/.gitignore index 4617ab1..0c4a4cc 100644 --- a/.gitignore +++ b/.gitignore @@ -5,7 +5,9 @@ vitrix/lib/weapons/__pycache__/ vitrix/lib/items/__pycache__/ vitrix/lib/UI/__pycache__/ vitrix/lib/entities/__pycache__/ +vitrix/lib/classes/__pycache__/ vitrix/test.py +vitrix_engine.egg-info/ venvs-config/ data.txt build/ diff --git a/build.py b/build.py index 130fb84..15c7b15 100644 --- a/build.py +++ b/build.py @@ -8,7 +8,6 @@ from os.path import join - def run(command, output=1): proc = subprocess.Popen(command, shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT) @@ -94,9 +93,9 @@ def print_seperator(): shutil.copytree(join(dir_path, "vitrix"), join(build_path, "vitrix"), ignore=shutil.ignore_patterns("__pycache__")) -os.remove(build_path + "/src/.unbuilt") +os.remove(f"{build_path}/src/.unbuilt") -pkg_name = "Vitrix-vX.X.X-" + operating_sys +pkg_name = f"Vitrix-vX.X.X-{operating_sys}" shutil.make_archive(pkg_name, "zip", build_path) @@ -108,4 +107,4 @@ def print_seperator(): print_seperator() print("Build Successfully Completed!") print("Finished On: " + d.strftime("%I:%M %p %A %B %Y")) -print("\nTotal Build Time: " + str(time.time() - start_time) + " seconds") \ No newline at end of file +print(f"\nTotal Build Time: {str(time.time() - start_time)} seconds") \ No newline at end of file diff --git a/requirements.txt b/requirements.txt index 3bbb194..2a06195 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,6 +1,2 @@ -panda3d==1.10.11 -panda3d-gltf==0.13 -panda3d-simplepbr==0.10 -Pillow==9.1.0 -ursina==4.1.1 +git+https://github.com/ShadityZ/Vitrix-Engine.git@v1.0#egg=vitrix_engine venvctl==1.4.12 \ No newline at end of file diff --git a/vitrix/assets/models/cube.obj b/vitrix/assets/models/cube.obj new file mode 100644 index 0000000..89a2e7e --- /dev/null +++ b/vitrix/assets/models/cube.obj @@ -0,0 +1,42 @@ +# Blender v3.0.1 OBJ File: 'cube.blend' +# www.blender.org +mtllib cube.mtl +o Cube +v 0.500000 -0.500000 -0.500000 +v 0.500000 -0.500000 0.500000 +v -0.500000 -0.500000 0.500000 +v -0.500000 -0.500000 -0.500000 +v 0.500000 0.500000 -0.500000 +v 0.500000 0.500000 0.500000 +v -0.500000 0.500000 0.500000 +v -0.500000 0.500000 -0.500000 +vt 1.000000 1.000000 +vt 1.000000 0.000000 +vt -0.000000 0.000000 +vt 0.000000 1.000000 +vt 1.000000 1.000000 +vt 0.000000 1.000000 +vt -0.000000 0.000000 +vt 1.000000 -0.000000 +vt 1.000000 0.000000 +vt -0.000000 1.000000 +vt 0.000000 0.000000 +vt 1.000000 1.000000 +vt -0.000000 1.000000 +vt 1.000000 1.000000 +vt 1.000000 0.000000 +vt 0.000000 0.000000 +vn 0.0000 -1.0000 0.0000 +vn 0.0000 1.0000 0.0000 +vn 1.0000 0.0000 0.0000 +vn -0.0000 -0.0000 1.0000 +vn -1.0000 -0.0000 -0.0000 +vn 0.0000 0.0000 -1.0000 +usemtl Material +s off +f 1/1/1 2/2/1 3/3/1 4/4/1 +f 5/5/2 8/6/2 7/7/2 6/8/2 +f 1/9/3 5/5/3 6/10/3 2/11/3 +f 2/2/4 6/12/4 7/13/4 3/3/4 +f 3/3/5 7/13/5 8/14/5 4/15/5 +f 5/5/6 1/9/6 4/16/6 8/6/6 diff --git a/vitrix/assets/models/quad.obj b/vitrix/assets/models/quad.obj new file mode 100644 index 0000000..7dd1797 --- /dev/null +++ b/vitrix/assets/models/quad.obj @@ -0,0 +1,17 @@ +# Blender v3.0.1 OBJ File: 'quad.blend' +# www.blender.org +mtllib quad.mtl +o Cube +v 0.500000 -0.500000 0.000000 +v -0.500000 -0.500000 0.000000 +v 0.500000 0.500000 0.000000 +v -0.500000 0.500000 0.000000 +vt 0.999900 0.999900 +vt 0.000100 0.999900 +vt 0.000100 0.000100 +vt 0.999900 0.000100 +vn 0.0000 0.0000 1.0000 +usemtl Material +s off +f 3/1/1 4/2/1 2/3/1 +f 1/4/1 3/1/1 2/3/1 diff --git a/vitrix/assets/models/sphere.obj b/vitrix/assets/models/sphere.obj new file mode 100644 index 0000000..0796d20 --- /dev/null +++ b/vitrix/assets/models/sphere.obj @@ -0,0 +1,2071 @@ +# Blender v3.0.1 OBJ File: 'sphere.blend' +# www.blender.org +mtllib sphere.mtl +o Sphere +v 0.000000 0.490393 -0.097545 +v 0.000000 0.461940 -0.191342 +v 0.000000 0.415735 -0.277785 +v 0.000000 0.353553 -0.353553 +v 0.000000 0.277785 -0.415735 +v 0.000000 0.191342 -0.461940 +v 0.000000 0.097545 -0.490393 +v 0.000000 0.000000 -0.500000 +v 0.000000 -0.097545 -0.490393 +v 0.000000 -0.415735 -0.277785 +v 0.019030 0.490393 -0.095671 +v 0.037329 0.461940 -0.187665 +v 0.054193 0.415735 -0.272448 +v 0.068975 0.353553 -0.346760 +v 0.081106 0.277785 -0.407747 +v 0.090120 0.191342 -0.453064 +v 0.095671 0.097545 -0.480970 +v 0.097545 0.000000 -0.490393 +v 0.095671 -0.097545 -0.480970 +v 0.090120 -0.191342 -0.453064 +v 0.081106 -0.277785 -0.407747 +v 0.068975 -0.353553 -0.346760 +v 0.054193 -0.415735 -0.272448 +v 0.037329 -0.461940 -0.187665 +v 0.019030 -0.490393 -0.095671 +v 0.037329 0.490393 -0.090120 +v 0.073223 0.461940 -0.176777 +v 0.106304 0.415735 -0.256640 +v 0.135299 0.353553 -0.326641 +v 0.159095 0.277785 -0.384089 +v 0.176777 0.191342 -0.426777 +v 0.187665 0.097545 -0.453064 +v 0.191342 0.000000 -0.461940 +v 0.187665 -0.097545 -0.453064 +v 0.176777 -0.191342 -0.426777 +v 0.159095 -0.277785 -0.384089 +v 0.135299 -0.353553 -0.326641 +v 0.106304 -0.415735 -0.256640 +v 0.073223 -0.461940 -0.176777 +v 0.037329 -0.490393 -0.090120 +v 0.054193 0.490393 -0.081106 +v 0.106304 0.461940 -0.159095 +v 0.154329 0.415735 -0.230970 +v 0.196424 0.353553 -0.293969 +v 0.230970 0.277785 -0.345671 +v 0.256640 0.191342 -0.384089 +v 0.272448 0.097545 -0.407746 +v 0.277785 0.000000 -0.415735 +v 0.272448 -0.097545 -0.407746 +v 0.256640 -0.191342 -0.384089 +v 0.230970 -0.277785 -0.345671 +v 0.196424 -0.353553 -0.293969 +v 0.154329 -0.415735 -0.230970 +v 0.106304 -0.461940 -0.159095 +v 0.054193 -0.490393 -0.081106 +v 0.068975 0.490393 -0.068975 +v 0.135299 0.461940 -0.135299 +v 0.196424 0.415735 -0.196424 +v 0.250000 0.353553 -0.250000 +v 0.293969 0.277785 -0.293969 +v 0.326641 0.191342 -0.326641 +v 0.346760 0.097545 -0.346760 +v 0.353554 0.000000 -0.353553 +v 0.346760 -0.097545 -0.346760 +v 0.326641 -0.191342 -0.326641 +v 0.293969 -0.277785 -0.293969 +v 0.250000 -0.353553 -0.250000 +v 0.196424 -0.415735 -0.196424 +v 0.135299 -0.461940 -0.135299 +v 0.068975 -0.490393 -0.068975 +v 0.081106 0.490393 -0.054193 +v 0.159095 0.461940 -0.106304 +v 0.230970 0.415735 -0.154329 +v 0.293969 0.353553 -0.196424 +v 0.345671 0.277785 -0.230970 +v 0.384089 0.191342 -0.256640 +v 0.407747 0.097545 -0.272447 +v 0.415735 0.000000 -0.277785 +v 0.407747 -0.097545 -0.272447 +v 0.384089 -0.191342 -0.256640 +v 0.345671 -0.277785 -0.230970 +v 0.293969 -0.353553 -0.196424 +v 0.230970 -0.415735 -0.154329 +v 0.159095 -0.461940 -0.106304 +v 0.081106 -0.490393 -0.054193 +v 0.090120 0.490393 -0.037329 +v 0.176777 0.461940 -0.073223 +v 0.256640 0.415735 -0.106304 +v 0.326641 0.353553 -0.135299 +v 0.384089 0.277785 -0.159095 +v 0.426777 0.191342 -0.176777 +v 0.453064 0.097545 -0.187665 +v 0.461940 0.000000 -0.191342 +v 0.453064 -0.097545 -0.187665 +v 0.426777 -0.191342 -0.176777 +v 0.384089 -0.277785 -0.159095 +v 0.326641 -0.353553 -0.135299 +v 0.256640 -0.415735 -0.106304 +v 0.176777 -0.461940 -0.073223 +v 0.090120 -0.490393 -0.037329 +v 0.095671 0.490393 -0.019030 +v 0.187665 0.461940 -0.037329 +v 0.272448 0.415735 -0.054193 +v 0.346760 0.353553 -0.068975 +v 0.407747 0.277785 -0.081106 +v 0.453064 0.191342 -0.090120 +v 0.480970 0.097545 -0.095671 +v 0.490393 0.000000 -0.097545 +v 0.480970 -0.097545 -0.095671 +v 0.453064 -0.191342 -0.090120 +v 0.407747 -0.277785 -0.081106 +v 0.346760 -0.353553 -0.068975 +v 0.272448 -0.415735 -0.054193 +v 0.187665 -0.461940 -0.037329 +v 0.095671 -0.490393 -0.019030 +v 0.097545 0.490393 0.000000 +v 0.191342 0.461940 0.000000 +v 0.277785 0.415735 0.000000 +v 0.353553 0.353553 0.000000 +v 0.415735 0.277785 0.000000 +v 0.461940 0.191342 0.000000 +v 0.490393 0.097545 0.000000 +v 0.500000 0.000000 0.000000 +v 0.490393 -0.097545 0.000000 +v 0.461940 -0.191342 0.000000 +v 0.415735 -0.277785 0.000000 +v 0.353553 -0.353553 0.000000 +v 0.277785 -0.415735 0.000000 +v 0.191342 -0.461940 0.000000 +v 0.097545 -0.490393 0.000000 +v 0.095671 0.490393 0.019030 +v 0.187665 0.461940 0.037329 +v 0.272448 0.415735 0.054193 +v 0.346760 0.353553 0.068975 +v 0.407747 0.277785 0.081106 +v 0.453064 0.191342 0.090120 +v 0.480970 0.097545 0.095671 +v 0.490393 0.000000 0.097545 +v 0.480970 -0.097545 0.095671 +v 0.453064 -0.191342 0.090120 +v 0.407747 -0.277785 0.081106 +v 0.346760 -0.353553 0.068975 +v 0.272448 -0.415735 0.054193 +v 0.187665 -0.461940 0.037329 +v 0.095671 -0.490393 0.019030 +v 0.090120 0.490393 0.037329 +v 0.176777 0.461940 0.073224 +v 0.256640 0.415735 0.106304 +v 0.326641 0.353553 0.135299 +v 0.384089 0.277785 0.159095 +v 0.426777 0.191342 0.176777 +v 0.453064 0.097545 0.187665 +v 0.461940 0.000000 0.191342 +v 0.453064 -0.097545 0.187665 +v 0.426777 -0.191342 0.176777 +v 0.384089 -0.277785 0.159095 +v 0.326641 -0.353553 0.135299 +v 0.256640 -0.415735 0.106304 +v 0.176777 -0.461940 0.073223 +v 0.090120 -0.490393 0.037329 +v 0.081106 0.490393 0.054193 +v 0.159095 0.461940 0.106304 +v 0.230970 0.415735 0.154329 +v 0.293969 0.353553 0.196424 +v 0.345671 0.277785 0.230970 +v 0.384089 0.191342 0.256640 +v 0.407747 0.097545 0.272448 +v 0.415735 0.000000 0.277785 +v 0.407747 -0.097545 0.272448 +v 0.384089 -0.191342 0.256640 +v 0.345671 -0.277785 0.230970 +v 0.293969 -0.353553 0.196424 +v 0.230970 -0.415735 0.154329 +v 0.159095 -0.461940 0.106304 +v 0.081106 -0.490393 0.054193 +v 0.068975 0.490393 0.068975 +v 0.135299 0.461940 0.135299 +v 0.196424 0.415735 0.196424 +v 0.250000 0.353553 0.250000 +v 0.293969 0.277785 0.293969 +v 0.326641 0.191342 0.326641 +v 0.346760 0.097545 0.346760 +v 0.353553 0.000000 0.353554 +v 0.346760 -0.097545 0.346760 +v 0.326641 -0.191342 0.326641 +v 0.293969 -0.277785 0.293969 +v 0.250000 -0.353553 0.250000 +v 0.196424 -0.415735 0.196424 +v 0.135299 -0.461940 0.135299 +v 0.068975 -0.490393 0.068975 +v 0.054193 0.490393 0.081106 +v 0.106304 0.461940 0.159095 +v 0.154329 0.415735 0.230970 +v 0.196424 0.353553 0.293969 +v 0.230970 0.277785 0.345671 +v 0.256640 0.191342 0.384089 +v 0.272447 0.097545 0.407747 +v 0.277785 0.000000 0.415735 +v 0.272447 -0.097545 0.407747 +v 0.256640 -0.191342 0.384089 +v 0.230970 -0.277785 0.345671 +v 0.196424 -0.353553 0.293969 +v 0.154329 -0.415735 0.230970 +v 0.106304 -0.461940 0.159095 +v 0.054193 -0.490393 0.081106 +v 0.000000 -0.500000 0.000000 +v 0.037329 0.490393 0.090120 +v 0.073223 0.461940 0.176777 +v 0.106304 0.415735 0.256640 +v 0.135299 0.353553 0.326641 +v 0.159095 0.277785 0.384089 +v 0.176777 0.191342 0.426777 +v 0.187665 0.097545 0.453064 +v 0.191342 0.000000 0.461940 +v 0.187665 -0.097545 0.453064 +v 0.176777 -0.191342 0.426777 +v 0.159095 -0.277785 0.384089 +v 0.135299 -0.353553 0.326641 +v 0.106304 -0.415735 0.256640 +v 0.073223 -0.461940 0.176777 +v 0.037329 -0.490393 0.090120 +v 0.019030 0.490393 0.095671 +v 0.037329 0.461940 0.187665 +v 0.054193 0.415735 0.272448 +v 0.068975 0.353553 0.346760 +v 0.081106 0.277785 0.407747 +v 0.090120 0.191342 0.453064 +v 0.095671 0.097545 0.480970 +v 0.097545 0.000000 0.490393 +v 0.095671 -0.097545 0.480970 +v 0.090120 -0.191342 0.453064 +v 0.081106 -0.277785 0.407747 +v 0.068975 -0.353553 0.346760 +v 0.054193 -0.415735 0.272448 +v 0.037329 -0.461940 0.187665 +v 0.019030 -0.490393 0.095671 +v -0.000000 0.490393 0.097545 +v 0.000000 0.461940 0.191342 +v 0.000000 0.415735 0.277785 +v -0.000000 0.353553 0.353554 +v -0.000000 0.277785 0.415735 +v 0.000000 0.191342 0.461940 +v -0.000000 0.097545 0.490393 +v -0.000000 0.000000 0.500000 +v -0.000000 -0.097545 0.490393 +v 0.000000 -0.191342 0.461940 +v -0.000000 -0.277785 0.415735 +v -0.000000 -0.353553 0.353554 +v -0.000000 -0.415735 0.277785 +v 0.000000 -0.461940 0.191342 +v 0.000000 -0.490393 0.097545 +v -0.019030 0.490393 0.095671 +v -0.037329 0.461940 0.187665 +v -0.054193 0.415735 0.272448 +v -0.068975 0.353553 0.346760 +v -0.081106 0.277785 0.407747 +v -0.090120 0.191342 0.453064 +v -0.095671 0.097545 0.480970 +v -0.097545 0.000000 0.490393 +v -0.095671 -0.097545 0.480970 +v -0.090120 -0.191342 0.453064 +v -0.081106 -0.277785 0.407747 +v -0.068975 -0.353553 0.346760 +v -0.054193 -0.415735 0.272448 +v -0.037329 -0.461940 0.187665 +v -0.019030 -0.490393 0.095671 +v -0.037329 0.490393 0.090120 +v -0.073223 0.461940 0.176777 +v -0.106304 0.415735 0.256640 +v -0.135299 0.353553 0.326641 +v -0.159095 0.277785 0.384089 +v -0.176777 0.191342 0.426777 +v -0.187665 0.097545 0.453064 +v -0.191342 0.000000 0.461940 +v -0.187665 -0.097545 0.453064 +v -0.176777 -0.191342 0.426777 +v -0.159095 -0.277785 0.384089 +v -0.135299 -0.353553 0.326641 +v -0.106304 -0.415735 0.256640 +v -0.073223 -0.461940 0.176777 +v -0.037329 -0.490393 0.090120 +v -0.054193 0.490393 0.081106 +v -0.106304 0.461940 0.159095 +v -0.154329 0.415735 0.230970 +v -0.196424 0.353553 0.293969 +v -0.230970 0.277785 0.345671 +v -0.256640 0.191342 0.384089 +v -0.272448 0.097545 0.407747 +v -0.277785 0.000000 0.415735 +v -0.272448 -0.097545 0.407747 +v -0.256640 -0.191342 0.384089 +v -0.230970 -0.277785 0.345671 +v -0.196424 -0.353553 0.293969 +v -0.154329 -0.415735 0.230970 +v -0.106304 -0.461940 0.159095 +v -0.054193 -0.490393 0.081106 +v -0.000000 0.500000 0.000000 +v -0.068975 0.490393 0.068975 +v -0.135299 0.461940 0.135299 +v -0.196424 0.415735 0.196424 +v -0.250000 0.353553 0.250000 +v -0.293969 0.277785 0.293969 +v -0.326641 0.191342 0.326641 +v -0.346760 0.097545 0.346760 +v -0.353553 0.000000 0.353553 +v -0.346760 -0.097545 0.346760 +v -0.326641 -0.191342 0.326641 +v -0.293969 -0.277785 0.293969 +v -0.250000 -0.353553 0.250000 +v -0.196424 -0.415735 0.196424 +v -0.135299 -0.461940 0.135299 +v -0.068975 -0.490393 0.068975 +v -0.081106 0.490393 0.054193 +v -0.159095 0.461940 0.106304 +v -0.230970 0.415735 0.154329 +v -0.293969 0.353553 0.196424 +v -0.345671 0.277785 0.230970 +v -0.384089 0.191342 0.256640 +v -0.407746 0.097545 0.272448 +v -0.415735 0.000000 0.277785 +v -0.407746 -0.097545 0.272448 +v -0.384089 -0.191342 0.256640 +v -0.345671 -0.277785 0.230970 +v -0.293969 -0.353553 0.196424 +v -0.230970 -0.415735 0.154329 +v -0.159095 -0.461940 0.106304 +v -0.081106 -0.490393 0.054193 +v -0.090120 0.490393 0.037329 +v -0.176777 0.461940 0.073223 +v -0.256640 0.415735 0.106304 +v -0.326641 0.353553 0.135299 +v -0.384089 0.277785 0.159095 +v -0.426777 0.191342 0.176777 +v -0.453064 0.097545 0.187665 +v -0.461940 0.000000 0.191342 +v -0.453064 -0.097545 0.187665 +v -0.426777 -0.191342 0.176777 +v -0.384089 -0.277785 0.159095 +v -0.326641 -0.353553 0.135299 +v -0.256640 -0.415735 0.106304 +v -0.176777 -0.461940 0.073223 +v -0.090120 -0.490393 0.037329 +v -0.095671 0.490393 0.019030 +v -0.187665 0.461940 0.037329 +v -0.272448 0.415735 0.054193 +v -0.346760 0.353553 0.068975 +v -0.407746 0.277785 0.081106 +v -0.453064 0.191342 0.090120 +v -0.480970 0.097545 0.095671 +v -0.490393 0.000000 0.097545 +v -0.480970 -0.097545 0.095671 +v -0.453064 -0.191342 0.090120 +v -0.407746 -0.277785 0.081106 +v -0.346760 -0.353553 0.068975 +v -0.272447 -0.415735 0.054193 +v -0.187665 -0.461940 0.037329 +v -0.095671 -0.490393 0.019030 +v -0.097545 0.490393 0.000000 +v -0.191342 0.461940 0.000000 +v -0.277785 0.415735 0.000000 +v -0.353553 0.353553 0.000000 +v -0.415735 0.277785 0.000000 +v -0.461940 0.191342 0.000000 +v -0.490392 0.097545 0.000000 +v -0.500000 0.000000 0.000000 +v -0.490392 -0.097545 0.000000 +v -0.461940 -0.191342 0.000000 +v -0.415735 -0.277785 0.000000 +v -0.353553 -0.353553 0.000000 +v -0.277785 -0.415735 0.000000 +v -0.191342 -0.461940 0.000000 +v -0.097545 -0.490393 0.000000 +v -0.095671 0.490393 -0.019030 +v -0.187665 0.461940 -0.037329 +v -0.272448 0.415735 -0.054193 +v -0.346760 0.353553 -0.068975 +v -0.407746 0.277785 -0.081106 +v -0.453064 0.191342 -0.090120 +v -0.480970 0.097545 -0.095671 +v -0.490393 0.000000 -0.097545 +v -0.480970 -0.097545 -0.095671 +v -0.453064 -0.191342 -0.090120 +v -0.407746 -0.277785 -0.081106 +v -0.346760 -0.353553 -0.068975 +v -0.272447 -0.415735 -0.054193 +v -0.187665 -0.461940 -0.037329 +v -0.095671 -0.490393 -0.019030 +v -0.090120 0.490393 -0.037329 +v -0.176777 0.461940 -0.073223 +v -0.256640 0.415735 -0.106304 +v -0.326641 0.353553 -0.135299 +v -0.384089 0.277785 -0.159095 +v -0.426777 0.191342 -0.176777 +v -0.453063 0.097545 -0.187665 +v -0.461940 0.000000 -0.191342 +v -0.453063 -0.097545 -0.187665 +v -0.426777 -0.191342 -0.176777 +v -0.384089 -0.277785 -0.159095 +v -0.326641 -0.353553 -0.135299 +v -0.256640 -0.415735 -0.106304 +v -0.176777 -0.461940 -0.073223 +v -0.090120 -0.490393 -0.037329 +v -0.081106 0.490393 -0.054193 +v -0.159095 0.461940 -0.106304 +v -0.230970 0.415735 -0.154329 +v -0.293969 0.353553 -0.196424 +v -0.345671 0.277785 -0.230970 +v -0.384089 0.191342 -0.256640 +v -0.407746 0.097545 -0.272447 +v -0.415735 0.000000 -0.277785 +v -0.407746 -0.097545 -0.272447 +v -0.384089 -0.191342 -0.256640 +v -0.345671 -0.277785 -0.230970 +v -0.293969 -0.353553 -0.196424 +v -0.230970 -0.415735 -0.154329 +v -0.159095 -0.461940 -0.106304 +v -0.081106 -0.490393 -0.054193 +v -0.068975 0.490393 -0.068975 +v -0.135299 0.461940 -0.135299 +v -0.196424 0.415735 -0.196424 +v -0.250000 0.353553 -0.250000 +v -0.293969 0.277785 -0.293969 +v -0.326641 0.191342 -0.326641 +v -0.346760 0.097545 -0.346760 +v -0.353553 0.000000 -0.353553 +v -0.346760 -0.097545 -0.346760 +v -0.326641 -0.191342 -0.326641 +v -0.293969 -0.277785 -0.293969 +v -0.250000 -0.353553 -0.250000 +v -0.196424 -0.415735 -0.196424 +v -0.135299 -0.461940 -0.135299 +v -0.068975 -0.490393 -0.068975 +v -0.054193 0.490393 -0.081106 +v -0.106304 0.461940 -0.159095 +v -0.154329 0.415735 -0.230970 +v -0.196424 0.353553 -0.293969 +v -0.230970 0.277785 -0.345671 +v -0.256640 0.191342 -0.384089 +v -0.272447 0.097545 -0.407746 +v -0.277785 0.000000 -0.415735 +v -0.272447 -0.097545 -0.407746 +v -0.256640 -0.191342 -0.384089 +v -0.230970 -0.277785 -0.345671 +v -0.196424 -0.353553 -0.293969 +v -0.154329 -0.415735 -0.230970 +v -0.106304 -0.461940 -0.159095 +v -0.054193 -0.490393 -0.081106 +v -0.037329 0.490393 -0.090120 +v -0.073223 0.461940 -0.176776 +v -0.106304 0.415735 -0.256640 +v -0.135299 0.353553 -0.326641 +v -0.159095 0.277785 -0.384089 +v -0.176777 0.191342 -0.426776 +v -0.187665 0.097545 -0.453063 +v -0.191342 0.000000 -0.461939 +v -0.187665 -0.097545 -0.453063 +v -0.176777 -0.191342 -0.426776 +v -0.159095 -0.277785 -0.384089 +v -0.135299 -0.353553 -0.326641 +v -0.106304 -0.415735 -0.256640 +v -0.073223 -0.461940 -0.176776 +v -0.037329 -0.490393 -0.090120 +v -0.019030 0.490393 -0.095671 +v -0.037329 0.461940 -0.187665 +v -0.054193 0.415735 -0.272447 +v -0.068975 0.353553 -0.346760 +v -0.081106 0.277785 -0.407746 +v -0.090120 0.191342 -0.453063 +v -0.095671 0.097545 -0.480969 +v -0.097545 0.000000 -0.490392 +v -0.095671 -0.097545 -0.480969 +v -0.090120 -0.191342 -0.453063 +v -0.081106 -0.277785 -0.407746 +v -0.068975 -0.353553 -0.346760 +v -0.054193 -0.415735 -0.272447 +v -0.037329 -0.461940 -0.187665 +v -0.019030 -0.490393 -0.095671 +v 0.000000 -0.191342 -0.461940 +v 0.000000 -0.277785 -0.415734 +v 0.000000 -0.353553 -0.353553 +v 0.000000 -0.461940 -0.191341 +v 0.000000 -0.490393 -0.097545 +vt 0.750000 0.312500 +vt 0.750000 0.375000 +vt 0.718750 0.375000 +vt 0.718750 0.312500 +vt 0.750000 0.750000 +vt 0.750000 0.812500 +vt 0.718750 0.812500 +vt 0.718750 0.750000 +vt 0.750000 0.250000 +vt 0.718750 0.250000 +vt 0.750000 0.687500 +vt 0.718750 0.687500 +vt 0.750000 0.187500 +vt 0.718750 0.187500 +vt 0.750000 0.625000 +vt 0.718750 0.625000 +vt 0.750000 0.125000 +vt 0.718750 0.125000 +vt 0.750000 0.562500 +vt 0.718750 0.562500 +vt 0.750000 0.062500 +vt 0.718750 0.062500 +vt 0.750000 0.500000 +vt 0.718750 0.500000 +vt 0.750000 0.937500 +vt 0.734375 1.000000 +vt 0.718750 0.937500 +vt 0.734375 0.000000 +vt 0.750000 0.437500 +vt 0.718750 0.437500 +vt 0.750000 0.875000 +vt 0.718750 0.875000 +vt 0.687500 0.437500 +vt 0.687500 0.375000 +vt 0.687500 0.875000 +vt 0.687500 0.812500 +vt 0.687500 0.312500 +vt 0.687500 0.750000 +vt 0.687500 0.250000 +vt 0.687500 0.687500 +vt 0.687500 0.187500 +vt 0.687500 0.625000 +vt 0.687500 0.125000 +vt 0.687500 0.562500 +vt 0.687500 0.062500 +vt 0.687500 0.500000 +vt 0.703125 1.000000 +vt 0.687500 0.937500 +vt 0.703125 0.000000 +vt 0.656250 0.187500 +vt 0.656250 0.125000 +vt 0.656250 0.625000 +vt 0.656250 0.562500 +vt 0.656250 0.062500 +vt 0.656250 0.500000 +vt 0.671875 1.000000 +vt 0.656250 0.937500 +vt 0.671875 0.000000 +vt 0.656250 0.437500 +vt 0.656250 0.875000 +vt 0.656250 0.375000 +vt 0.656250 0.812500 +vt 0.656250 0.312500 +vt 0.656250 0.750000 +vt 0.656250 0.250000 +vt 0.656250 0.687500 +vt 0.625000 0.875000 +vt 0.625000 0.812500 +vt 0.625000 0.375000 +vt 0.625000 0.312500 +vt 0.625000 0.750000 +vt 0.625000 0.250000 +vt 0.625000 0.687500 +vt 0.625000 0.187500 +vt 0.625000 0.625000 +vt 0.625000 0.125000 +vt 0.625000 0.562500 +vt 0.625000 0.062500 +vt 0.625000 0.500000 +vt 0.640625 1.000000 +vt 0.625000 0.937500 +vt 0.640625 0.000000 +vt 0.625000 0.437500 +vt 0.593750 0.625000 +vt 0.593750 0.562500 +vt 0.593750 0.125000 +vt 0.593750 0.062500 +vt 0.593750 0.500000 +vt 0.609375 1.000000 +vt 0.593750 0.937500 +vt 0.609375 0.000000 +vt 0.593750 0.437500 +vt 0.593750 0.875000 +vt 0.593750 0.375000 +vt 0.593750 0.812500 +vt 0.593750 0.312500 +vt 0.593750 0.750000 +vt 0.593750 0.250000 +vt 0.593750 0.687500 +vt 0.593750 0.187500 +vt 0.562500 0.375000 +vt 0.562500 0.312500 +vt 0.562500 0.812500 +vt 0.562500 0.750000 +vt 0.562500 0.250000 +vt 0.562500 0.687500 +vt 0.562500 0.187500 +vt 0.562500 0.625000 +vt 0.562500 0.125000 +vt 0.562500 0.562500 +vt 0.562500 0.062500 +vt 0.562500 0.500000 +vt 0.578125 1.000000 +vt 0.562500 0.937500 +vt 0.578125 0.000000 +vt 0.562500 0.437500 +vt 0.562500 0.875000 +vt 0.531250 0.125000 +vt 0.531250 0.062500 +vt 0.531250 0.562500 +vt 0.531250 0.500000 +vt 0.546875 1.000000 +vt 0.531250 0.937500 +vt 0.546875 0.000000 +vt 0.531250 0.437500 +vt 0.531250 0.875000 +vt 0.531250 0.375000 +vt 0.531250 0.812500 +vt 0.531250 0.312500 +vt 0.531250 0.750000 +vt 0.531250 0.250000 +vt 0.531250 0.687500 +vt 0.531250 0.187500 +vt 0.531250 0.625000 +vt 0.500000 0.812500 +vt 0.500000 0.750000 +vt 0.500000 0.312500 +vt 0.500000 0.250000 +vt 0.500000 0.687500 +vt 0.500000 0.187500 +vt 0.500000 0.625000 +vt 0.500000 0.125000 +vt 0.500000 0.562500 +vt 0.500000 0.062500 +vt 0.500000 0.500000 +vt 0.515625 1.000000 +vt 0.500000 0.937500 +vt 0.515625 0.000000 +vt 0.500000 0.437500 +vt 0.500000 0.875000 +vt 0.500000 0.375000 +vt 0.468750 0.562500 +vt 0.468750 0.500000 +vt 0.484374 1.000000 +vt 0.468750 0.937500 +vt 0.484375 0.000000 +vt 0.468750 0.062500 +vt 0.468750 0.437500 +vt 0.468750 0.875000 +vt 0.468750 0.375000 +vt 0.468750 0.812500 +vt 0.468750 0.312500 +vt 0.468750 0.750000 +vt 0.468750 0.250000 +vt 0.468750 0.687500 +vt 0.468750 0.187500 +vt 0.468750 0.625000 +vt 0.468750 0.125000 +vt 0.437500 0.312500 +vt 0.437500 0.250000 +vt 0.437500 0.750000 +vt 0.437500 0.687500 +vt 0.437500 0.187500 +vt 0.437500 0.625000 +vt 0.437500 0.125000 +vt 0.437500 0.562500 +vt 0.437500 0.062500 +vt 0.437500 0.500000 +vt 0.453124 1.000000 +vt 0.437500 0.937500 +vt 0.453125 0.000000 +vt 0.437500 0.437500 +vt 0.437500 0.875000 +vt 0.437500 0.375000 +vt 0.437500 0.812500 +vt 0.421875 0.000000 +vt 0.406250 0.062500 +vt 0.406250 0.500000 +vt 0.406250 0.437500 +vt 0.406250 0.937500 +vt 0.406250 0.875000 +vt 0.406250 0.375000 +vt 0.406250 0.812500 +vt 0.406250 0.312500 +vt 0.406250 0.750000 +vt 0.406250 0.250000 +vt 0.406250 0.687500 +vt 0.406250 0.187500 +vt 0.406250 0.625000 +vt 0.406250 0.125000 +vt 0.406250 0.562500 +vt 0.421874 1.000000 +vt 0.375000 0.250000 +vt 0.375000 0.187500 +vt 0.375000 0.687500 +vt 0.375000 0.625000 +vt 0.375000 0.125000 +vt 0.375000 0.562500 +vt 0.375000 0.062500 +vt 0.375000 0.500000 +vt 0.390625 1.000000 +vt 0.375000 0.937500 +vt 0.390625 0.000000 +vt 0.375000 0.437500 +vt 0.375000 0.875000 +vt 0.375000 0.375000 +vt 0.375000 0.812500 +vt 0.375000 0.312500 +vt 0.375000 0.750000 +vt 0.343750 0.937500 +vt 0.343750 0.875000 +vt 0.343750 0.437500 +vt 0.343750 0.375000 +vt 0.343750 0.812500 +vt 0.343750 0.312500 +vt 0.343750 0.750000 +vt 0.343750 0.250000 +vt 0.343750 0.687500 +vt 0.343750 0.187500 +vt 0.343750 0.625000 +vt 0.343750 0.125000 +vt 0.343750 0.562500 +vt 0.343750 0.062500 +vt 0.343750 0.500000 +vt 0.359375 1.000000 +vt 0.359375 0.000000 +vt 0.312500 0.687500 +vt 0.312500 0.625000 +vt 0.312500 0.187500 +vt 0.312500 0.125000 +vt 0.312500 0.562500 +vt 0.312500 0.062500 +vt 0.312500 0.500000 +vt 0.328125 1.000000 +vt 0.312500 0.937500 +vt 0.328125 0.000000 +vt 0.312500 0.437500 +vt 0.312500 0.875000 +vt 0.312500 0.375000 +vt 0.312500 0.812500 +vt 0.312500 0.312500 +vt 0.312500 0.750000 +vt 0.312500 0.250000 +vt 0.281250 0.437500 +vt 0.281250 0.375000 +vt 0.281250 0.875000 +vt 0.281250 0.812500 +vt 0.281250 0.312500 +vt 0.281250 0.750000 +vt 0.281250 0.250000 +vt 0.281250 0.687500 +vt 0.281250 0.187500 +vt 0.281250 0.625000 +vt 0.281250 0.125000 +vt 0.281250 0.562500 +vt 0.281250 0.062500 +vt 0.281250 0.500000 +vt 0.296875 1.000000 +vt 0.281250 0.937500 +vt 0.296875 0.000000 +vt 0.250000 0.187500 +vt 0.250000 0.125000 +vt 0.250000 0.625000 +vt 0.250000 0.562500 +vt 0.250000 0.062500 +vt 0.250000 0.500000 +vt 0.265625 1.000000 +vt 0.250000 0.937500 +vt 0.265625 0.000000 +vt 0.250000 0.437500 +vt 0.250000 0.875000 +vt 0.250000 0.375000 +vt 0.250000 0.812500 +vt 0.250000 0.312500 +vt 0.250000 0.750000 +vt 0.250000 0.250000 +vt 0.250000 0.687500 +vt 0.218750 0.875000 +vt 0.218750 0.812500 +vt 0.218750 0.375000 +vt 0.218750 0.312500 +vt 0.218750 0.750000 +vt 0.218750 0.250000 +vt 0.218750 0.687500 +vt 0.218750 0.187500 +vt 0.218750 0.625000 +vt 0.218750 0.125000 +vt 0.218750 0.562500 +vt 0.218750 0.062500 +vt 0.218750 0.500000 +vt 0.234375 1.000000 +vt 0.218750 0.937500 +vt 0.234375 0.000000 +vt 0.218750 0.437500 +vt 0.187500 0.625000 +vt 0.187500 0.562500 +vt 0.187500 0.125000 +vt 0.187500 0.062500 +vt 0.187500 0.500000 +vt 0.203125 1.000000 +vt 0.187500 0.937500 +vt 0.203125 0.000000 +vt 0.187500 0.437500 +vt 0.187500 0.875000 +vt 0.187500 0.375000 +vt 0.187500 0.812500 +vt 0.187500 0.312500 +vt 0.187500 0.750000 +vt 0.187500 0.250000 +vt 0.187500 0.687500 +vt 0.187500 0.187500 +vt 0.156250 0.375000 +vt 0.156250 0.312500 +vt 0.156250 0.812500 +vt 0.156250 0.750000 +vt 0.156250 0.250000 +vt 0.156250 0.687500 +vt 0.156250 0.187500 +vt 0.156250 0.625000 +vt 0.156250 0.125000 +vt 0.156250 0.562500 +vt 0.156250 0.062500 +vt 0.156250 0.500000 +vt 0.171875 1.000000 +vt 0.156250 0.937500 +vt 0.171875 0.000000 +vt 0.156250 0.437500 +vt 0.156250 0.875000 +vt 0.125000 0.125000 +vt 0.125000 0.062500 +vt 0.125000 0.562500 +vt 0.125000 0.500000 +vt 0.140625 1.000000 +vt 0.125000 0.937500 +vt 0.140625 0.000000 +vt 0.125000 0.437500 +vt 0.125000 0.875000 +vt 0.125000 0.375000 +vt 0.125000 0.812500 +vt 0.125000 0.312500 +vt 0.125000 0.750000 +vt 0.125000 0.250000 +vt 0.125000 0.687500 +vt 0.125000 0.187500 +vt 0.125000 0.625000 +vt 0.093750 0.312500 +vt 0.093750 0.250000 +vt 0.093750 0.750000 +vt 0.093750 0.687500 +vt 0.093750 0.187500 +vt 0.093750 0.625000 +vt 0.093750 0.125000 +vt 0.093750 0.562500 +vt 0.093750 0.062500 +vt 0.093750 0.500000 +vt 0.109375 1.000000 +vt 0.093750 0.937500 +vt 0.109375 0.000000 +vt 0.093750 0.437500 +vt 0.093750 0.875000 +vt 0.093750 0.375000 +vt 0.093750 0.812500 +vt 0.078125 1.000000 +vt 0.062500 0.937500 +vt 0.078125 0.000000 +vt 0.062500 0.062500 +vt 0.062500 0.500000 +vt 0.062500 0.437500 +vt 0.062500 0.875000 +vt 0.062500 0.375000 +vt 0.062500 0.812500 +vt 0.062500 0.312500 +vt 0.062500 0.750000 +vt 0.062500 0.250000 +vt 0.062500 0.687500 +vt 0.062500 0.187500 +vt 0.062500 0.625000 +vt 0.062500 0.125000 +vt 0.062500 0.562500 +vt 0.031250 0.750000 +vt 0.031250 0.687500 +vt 0.031250 0.250000 +vt 0.031250 0.187500 +vt 0.031250 0.625000 +vt 0.031250 0.125000 +vt 0.031250 0.562500 +vt 0.031250 0.062500 +vt 0.031250 0.500000 +vt 0.046875 1.000000 +vt 0.031250 0.937500 +vt 0.046875 0.000000 +vt 0.031250 0.437500 +vt 0.031250 0.875000 +vt 0.031250 0.375000 +vt 0.031250 0.812500 +vt 0.031250 0.312500 +vt 0.000000 0.500000 +vt 0.000000 0.437500 +vt 0.000000 0.937500 +vt 0.000000 0.875000 +vt 0.000000 0.375000 +vt 0.000000 0.812500 +vt 0.000000 0.312500 +vt 0.000000 0.750000 +vt 0.000000 0.250000 +vt 0.000000 0.687500 +vt 0.000000 0.187500 +vt 0.000000 0.625000 +vt 0.000000 0.125000 +vt 0.000000 0.562500 +vt 0.000000 0.062500 +vt 0.015625 1.000000 +vt 0.015625 0.000000 +vt 1.000000 0.187500 +vt 1.000000 0.250000 +vt 0.968750 0.250000 +vt 0.968750 0.187500 +vt 1.000000 0.625000 +vt 1.000000 0.687500 +vt 0.968750 0.687500 +vt 0.968750 0.625000 +vt 1.000000 0.125000 +vt 0.968750 0.125000 +vt 1.000000 0.562500 +vt 0.968750 0.562500 +vt 1.000000 0.062500 +vt 0.968750 0.062500 +vt 1.000000 0.500000 +vt 0.968750 0.500000 +vt 1.000000 0.937500 +vt 0.984375 1.000000 +vt 0.968750 0.937500 +vt 0.984375 0.000000 +vt 1.000000 0.437500 +vt 0.968750 0.437500 +vt 1.000000 0.875000 +vt 0.968750 0.875000 +vt 1.000000 0.375000 +vt 0.968750 0.375000 +vt 1.000000 0.812500 +vt 0.968750 0.812500 +vt 1.000000 0.312500 +vt 0.968750 0.312500 +vt 1.000000 0.750000 +vt 0.968750 0.750000 +vt 0.937500 0.937500 +vt 0.937500 0.875000 +vt 0.937500 0.437500 +vt 0.937500 0.375000 +vt 0.937500 0.812500 +vt 0.937500 0.312500 +vt 0.937500 0.750000 +vt 0.937500 0.250000 +vt 0.937500 0.687500 +vt 0.937500 0.187500 +vt 0.937500 0.625000 +vt 0.937500 0.125000 +vt 0.937500 0.562500 +vt 0.937500 0.062500 +vt 0.937500 0.500000 +vt 0.953125 1.000000 +vt 0.953125 0.000000 +vt 0.906250 0.687500 +vt 0.906250 0.625000 +vt 0.906250 0.187500 +vt 0.906250 0.125000 +vt 0.906250 0.562500 +vt 0.906250 0.062500 +vt 0.906250 0.500000 +vt 0.921875 1.000000 +vt 0.906250 0.937500 +vt 0.921875 0.000000 +vt 0.906250 0.437500 +vt 0.906250 0.875000 +vt 0.906250 0.375000 +vt 0.906250 0.812500 +vt 0.906250 0.312500 +vt 0.906250 0.750000 +vt 0.906250 0.250000 +vt 0.875000 0.437500 +vt 0.875000 0.375000 +vt 0.875000 0.875000 +vt 0.875000 0.812500 +vt 0.875000 0.312500 +vt 0.875000 0.750000 +vt 0.875000 0.250000 +vt 0.875000 0.687500 +vt 0.875000 0.187500 +vt 0.875000 0.625000 +vt 0.875000 0.125000 +vt 0.875000 0.562500 +vt 0.875000 0.062500 +vt 0.875000 0.500000 +vt 0.890625 1.000000 +vt 0.875000 0.937500 +vt 0.890625 0.000000 +vt 0.843750 0.187500 +vt 0.843750 0.125000 +vt 0.843750 0.625000 +vt 0.843750 0.562500 +vt 0.843750 0.062500 +vt 0.843750 0.500000 +vt 0.859375 1.000000 +vt 0.843750 0.937500 +vt 0.859375 0.000000 +vt 0.843750 0.437500 +vt 0.843750 0.875000 +vt 0.843750 0.375000 +vt 0.843750 0.812500 +vt 0.843750 0.312500 +vt 0.843750 0.750000 +vt 0.843750 0.250000 +vt 0.843750 0.687500 +vt 0.812500 0.375000 +vt 0.812500 0.312500 +vt 0.812500 0.812500 +vt 0.812500 0.750000 +vt 0.812500 0.250000 +vt 0.812500 0.687500 +vt 0.812500 0.187500 +vt 0.812500 0.625000 +vt 0.812500 0.125000 +vt 0.812500 0.562500 +vt 0.812500 0.062500 +vt 0.812500 0.500000 +vt 0.828125 1.000000 +vt 0.812500 0.937500 +vt 0.828125 0.000000 +vt 0.812500 0.437500 +vt 0.812500 0.875000 +vt 0.781250 0.125000 +vt 0.781250 0.062500 +vt 0.781250 0.562500 +vt 0.781250 0.500000 +vt 0.796875 1.000000 +vt 0.781250 0.937500 +vt 0.796875 0.000000 +vt 0.781250 0.437500 +vt 0.781250 0.875000 +vt 0.781250 0.375000 +vt 0.781250 0.812500 +vt 0.781250 0.312500 +vt 0.781250 0.750000 +vt 0.781250 0.250000 +vt 0.781250 0.687500 +vt 0.781250 0.187500 +vt 0.781250 0.625000 +vt 0.765625 1.000000 +vt 0.765625 0.000000 +vn 0.0865 -0.4696 -0.8786 +vn 0.0624 0.7715 -0.6332 +vn 0.0759 -0.6326 -0.7708 +vn 0.0759 0.6326 -0.7708 +vn 0.0624 -0.7715 -0.6332 +vn 0.0865 0.4696 -0.8786 +vn 0.0464 -0.8810 -0.4709 +vn 0.0938 0.2890 -0.9527 +vn 0.0286 -0.9565 -0.2902 +vn 0.0975 0.0975 -0.9904 +vn 0.0097 0.9951 -0.0980 +vn 0.0097 -0.9951 -0.0980 +vn 0.0976 -0.0975 -0.9904 +vn 0.0286 0.9565 -0.2902 +vn 0.0938 -0.2890 -0.9527 +vn 0.0464 0.8810 -0.4709 +vn 0.2779 -0.2890 -0.9161 +vn 0.1374 0.8810 -0.4528 +vn 0.2563 -0.4696 -0.8448 +vn 0.1847 0.7715 -0.6088 +vn 0.2248 -0.6326 -0.7412 +vn 0.2248 0.6326 -0.7412 +vn 0.1847 -0.7715 -0.6088 +vn 0.2563 0.4696 -0.8448 +vn 0.1374 -0.8810 -0.4528 +vn 0.2779 0.2890 -0.9161 +vn 0.0846 -0.9565 -0.2790 +vn 0.2889 0.0975 -0.9524 +vn 0.0286 0.9951 -0.0942 +vn 0.0286 -0.9951 -0.0942 +vn 0.2889 -0.0975 -0.9524 +vn 0.0846 0.9565 -0.2790 +vn 0.2230 -0.8810 -0.4173 +vn 0.4513 0.2890 -0.8443 +vn 0.1374 -0.9565 -0.2571 +vn 0.4691 0.0975 -0.8777 +vn 0.0464 0.9951 -0.0869 +vn 0.0464 -0.9951 -0.0869 +vn 0.4691 -0.0975 -0.8777 +vn 0.1374 0.9565 -0.2571 +vn 0.4513 -0.2890 -0.8443 +vn 0.2230 0.8810 -0.4173 +vn 0.4162 -0.4696 -0.7786 +vn 0.2999 0.7715 -0.5611 +vn 0.3651 -0.6326 -0.6831 +vn 0.3651 0.6326 -0.6831 +vn 0.2999 -0.7715 -0.5611 +vn 0.4162 0.4696 -0.7786 +vn 0.3002 0.8810 -0.3658 +vn 0.5601 -0.4696 -0.6825 +vn 0.4036 0.7715 -0.4918 +vn 0.4913 -0.6326 -0.5987 +vn 0.4913 0.6326 -0.5987 +vn 0.4036 -0.7715 -0.4918 +vn 0.5601 0.4696 -0.6825 +vn 0.3002 -0.8810 -0.3658 +vn 0.6073 0.2890 -0.7400 +vn 0.1850 -0.9565 -0.2254 +vn 0.6314 0.0976 -0.7693 +vn 0.0625 0.9951 -0.0761 +vn 0.0625 -0.9951 -0.0761 +vn 0.6314 -0.0976 -0.7693 +vn 0.1850 0.9565 -0.2254 +vn 0.6073 -0.2890 -0.7400 +vn 0.7400 0.2890 -0.6073 +vn 0.2254 -0.9565 -0.1850 +vn 0.7693 0.0975 -0.6314 +vn 0.0761 0.9951 -0.0625 +vn 0.0761 -0.9951 -0.0625 +vn 0.7693 -0.0975 -0.6314 +vn 0.2254 0.9565 -0.1850 +vn 0.7400 -0.2890 -0.6073 +vn 0.3658 0.8810 -0.3002 +vn 0.6825 -0.4696 -0.5601 +vn 0.4918 0.7715 -0.4036 +vn 0.5987 -0.6326 -0.4913 +vn 0.5987 0.6326 -0.4913 +vn 0.4918 -0.7715 -0.4036 +vn 0.6825 0.4696 -0.5601 +vn 0.3658 -0.8810 -0.3002 +vn 0.7786 -0.4696 -0.4162 +vn 0.5611 0.7715 -0.2999 +vn 0.6831 -0.6326 -0.3651 +vn 0.6831 0.6326 -0.3651 +vn 0.5611 -0.7715 -0.2999 +vn 0.7786 0.4696 -0.4162 +vn 0.4173 -0.8810 -0.2231 +vn 0.8443 0.2890 -0.4513 +vn 0.2571 -0.9565 -0.1374 +vn 0.8777 0.0976 -0.4691 +vn 0.0869 0.9951 -0.0464 +vn 0.0869 -0.9951 -0.0464 +vn 0.8777 -0.0976 -0.4691 +vn 0.2571 0.9565 -0.1374 +vn 0.8443 -0.2890 -0.4513 +vn 0.4173 0.8810 -0.2231 +vn 0.2790 -0.9565 -0.0846 +vn 0.9524 0.0976 -0.2889 +vn 0.0942 0.9951 -0.0286 +vn 0.0942 -0.9951 -0.0286 +vn 0.9524 -0.0976 -0.2889 +vn 0.2790 0.9565 -0.0846 +vn 0.9161 -0.2890 -0.2779 +vn 0.4528 0.8810 -0.1374 +vn 0.8448 -0.4696 -0.2563 +vn 0.6088 0.7715 -0.1847 +vn 0.7412 -0.6326 -0.2248 +vn 0.7412 0.6326 -0.2248 +vn 0.6088 -0.7715 -0.1847 +vn 0.8448 0.4696 -0.2563 +vn 0.4528 -0.8810 -0.1374 +vn 0.9161 0.2890 -0.2779 +vn 0.6332 0.7715 -0.0624 +vn 0.7708 -0.6326 -0.0759 +vn 0.7708 0.6326 -0.0759 +vn 0.6332 -0.7715 -0.0624 +vn 0.8786 0.4696 -0.0865 +vn 0.4709 -0.8810 -0.0464 +vn 0.9527 0.2890 -0.0938 +vn 0.2902 -0.9565 -0.0286 +vn 0.9904 0.0976 -0.0975 +vn 0.0980 0.9951 -0.0097 +vn 0.0980 -0.9951 -0.0097 +vn 0.9904 -0.0976 -0.0975 +vn 0.2902 0.9565 -0.0286 +vn 0.9527 -0.2890 -0.0938 +vn 0.4709 0.8810 -0.0464 +vn 0.8786 -0.4696 -0.0865 +vn 0.9904 0.0976 0.0975 +vn 0.0980 0.9951 0.0097 +vn 0.0980 -0.9951 0.0097 +vn 0.9904 -0.0976 0.0975 +vn 0.2902 0.9565 0.0286 +vn 0.9527 -0.2890 0.0938 +vn 0.4709 0.8810 0.0464 +vn 0.8786 -0.4696 0.0865 +vn 0.6332 0.7715 0.0624 +vn 0.7708 -0.6326 0.0759 +vn 0.7708 0.6326 0.0759 +vn 0.6332 -0.7715 0.0624 +vn 0.8786 0.4696 0.0865 +vn 0.4709 -0.8810 0.0464 +vn 0.9527 0.2890 0.0938 +vn 0.2902 -0.9565 0.0286 +vn 0.7412 -0.6326 0.2248 +vn 0.7412 0.6326 0.2248 +vn 0.6088 -0.7715 0.1847 +vn 0.8448 0.4696 0.2563 +vn 0.4528 -0.8810 0.1374 +vn 0.9161 0.2890 0.2779 +vn 0.2790 -0.9565 0.0846 +vn 0.9524 0.0976 0.2889 +vn 0.0942 0.9951 0.0286 +vn 0.0942 -0.9951 0.0286 +vn 0.9524 -0.0976 0.2889 +vn 0.2790 0.9565 0.0846 +vn 0.9161 -0.2890 0.2779 +vn 0.4528 0.8810 0.1374 +vn 0.8448 -0.4696 0.2563 +vn 0.6088 0.7715 0.1847 +vn 0.0869 -0.9951 0.0464 +vn 0.8777 -0.0976 0.4691 +vn 0.2571 0.9565 0.1374 +vn 0.8443 -0.2890 0.4513 +vn 0.4173 0.8810 0.2231 +vn 0.7786 -0.4696 0.4162 +vn 0.5611 0.7715 0.2999 +vn 0.6831 -0.6326 0.3651 +vn 0.6831 0.6326 0.3651 +vn 0.5611 -0.7715 0.2999 +vn 0.7786 0.4696 0.4162 +vn 0.4173 -0.8810 0.2231 +vn 0.8443 0.2890 0.4513 +vn 0.2571 -0.9565 0.1374 +vn 0.8777 0.0976 0.4691 +vn 0.0869 0.9951 0.0464 +vn 0.4918 -0.7715 0.4036 +vn 0.6825 0.4696 0.5601 +vn 0.3658 -0.8810 0.3002 +vn 0.7400 0.2890 0.6073 +vn 0.2254 -0.9565 0.1850 +vn 0.7693 0.0976 0.6314 +vn 0.0761 0.9951 0.0625 +vn 0.0761 -0.9951 0.0625 +vn 0.7693 -0.0976 0.6314 +vn 0.2254 0.9565 0.1850 +vn 0.7400 -0.2890 0.6073 +vn 0.3658 0.8810 0.3002 +vn 0.6825 -0.4696 0.5601 +vn 0.4918 0.7715 0.4036 +vn 0.5987 -0.6326 0.4913 +vn 0.5987 0.6326 0.4913 +vn 0.1850 0.9565 0.2254 +vn 0.6073 -0.2890 0.7400 +vn 0.3002 0.8810 0.3658 +vn 0.5601 -0.4696 0.6825 +vn 0.4036 0.7715 0.4918 +vn 0.4913 -0.6326 0.5987 +vn 0.4913 0.6326 0.5987 +vn 0.4036 -0.7715 0.4918 +vn 0.5601 0.4696 0.6825 +vn 0.3002 -0.8810 0.3658 +vn 0.6073 0.2890 0.7400 +vn 0.1850 -0.9565 0.2254 +vn 0.6314 0.0976 0.7693 +vn 0.0625 0.9951 0.0761 +vn 0.0625 -0.9951 0.0761 +vn 0.6314 -0.0976 0.7693 +vn 0.4162 0.4696 0.7786 +vn 0.2230 -0.8810 0.4173 +vn 0.4513 0.2890 0.8443 +vn 0.1374 -0.9565 0.2571 +vn 0.4691 0.0976 0.8777 +vn 0.0464 0.9951 0.0869 +vn 0.0464 -0.9951 0.0869 +vn 0.4691 -0.0976 0.8777 +vn 0.1374 0.9565 0.2571 +vn 0.4513 -0.2890 0.8443 +vn 0.2230 0.8810 0.4173 +vn 0.4162 -0.4696 0.7786 +vn 0.2999 0.7715 0.5611 +vn 0.3651 -0.6326 0.6831 +vn 0.3651 0.6326 0.6831 +vn 0.2999 -0.7715 0.5611 +vn 0.2779 -0.2890 0.9161 +vn 0.1374 0.8810 0.4528 +vn 0.2563 -0.4696 0.8448 +vn 0.1847 0.7715 0.6088 +vn 0.2248 -0.6326 0.7412 +vn 0.2248 0.6326 0.7412 +vn 0.1847 -0.7715 0.6088 +vn 0.2563 0.4696 0.8448 +vn 0.1374 -0.8810 0.4528 +vn 0.2779 0.2890 0.9161 +vn 0.0846 -0.9565 0.2790 +vn 0.2889 0.0976 0.9524 +vn 0.0286 0.9951 0.0942 +vn 0.0286 -0.9951 0.0942 +vn 0.2889 -0.0976 0.9524 +vn 0.0846 0.9565 0.2790 +vn 0.0464 -0.8810 0.4709 +vn 0.0938 0.2890 0.9527 +vn 0.0286 -0.9565 0.2902 +vn 0.0975 0.0976 0.9904 +vn 0.0097 0.9951 0.0980 +vn 0.0097 -0.9951 0.0980 +vn 0.0975 -0.0976 0.9904 +vn 0.0286 0.9565 0.2902 +vn 0.0938 -0.2890 0.9527 +vn 0.0464 0.8810 0.4709 +vn 0.0865 -0.4696 0.8786 +vn 0.0624 0.7715 0.6332 +vn 0.0759 -0.6326 0.7708 +vn 0.0759 0.6326 0.7708 +vn 0.0624 -0.7715 0.6332 +vn 0.0865 0.4696 0.8786 +vn -0.0464 0.8810 0.4709 +vn -0.0865 -0.4696 0.8786 +vn -0.0624 0.7715 0.6332 +vn -0.0759 -0.6326 0.7708 +vn -0.0759 0.6326 0.7708 +vn -0.0624 -0.7715 0.6332 +vn -0.0865 0.4696 0.8786 +vn -0.0464 -0.8810 0.4709 +vn -0.0938 0.2890 0.9527 +vn -0.0286 -0.9565 0.2902 +vn -0.0976 0.0976 0.9904 +vn -0.0097 0.9951 0.0980 +vn -0.0097 -0.9951 0.0980 +vn -0.0976 -0.0976 0.9904 +vn -0.0286 0.9565 0.2902 +vn -0.0938 -0.2890 0.9527 +vn -0.2779 0.2890 0.9161 +vn -0.0846 -0.9565 0.2790 +vn -0.2889 0.0976 0.9524 +vn -0.0286 0.9951 0.0942 +vn -0.0286 -0.9951 0.0942 +vn -0.2889 -0.0976 0.9524 +vn -0.0846 0.9565 0.2790 +vn -0.2779 -0.2890 0.9161 +vn -0.1374 0.8810 0.4528 +vn -0.2563 -0.4696 0.8448 +vn -0.1847 0.7715 0.6088 +vn -0.2248 -0.6326 0.7412 +vn -0.2248 0.6326 0.7412 +vn -0.1847 -0.7715 0.6088 +vn -0.2563 0.4696 0.8448 +vn -0.1374 -0.8810 0.4528 +vn -0.4162 -0.4696 0.7786 +vn -0.2999 0.7715 0.5611 +vn -0.3651 -0.6326 0.6831 +vn -0.3651 0.6326 0.6831 +vn -0.2999 -0.7715 0.5611 +vn -0.4162 0.4696 0.7786 +vn -0.2230 -0.8810 0.4173 +vn -0.4513 0.2890 0.8443 +vn -0.1374 -0.9565 0.2571 +vn -0.4691 0.0976 0.8777 +vn -0.0464 0.9951 0.0869 +vn -0.0464 -0.9951 0.0869 +vn -0.4691 -0.0976 0.8777 +vn -0.1374 0.9565 0.2571 +vn -0.4513 -0.2890 0.8443 +vn -0.2230 0.8810 0.4173 +vn -0.1850 -0.9565 0.2254 +vn -0.6314 0.0976 0.7693 +vn -0.0625 0.9951 0.0761 +vn -0.0625 -0.9951 0.0761 +vn -0.6314 -0.0976 0.7693 +vn -0.1850 0.9565 0.2254 +vn -0.6073 -0.2890 0.7400 +vn -0.3002 0.8810 0.3658 +vn -0.5601 -0.4696 0.6825 +vn -0.4036 0.7715 0.4918 +vn -0.4913 -0.6326 0.5987 +vn -0.4913 0.6326 0.5987 +vn -0.4036 -0.7715 0.4918 +vn -0.5601 0.4696 0.6825 +vn -0.3002 -0.8810 0.3658 +vn -0.6073 0.2890 0.7400 +vn -0.5987 -0.6326 0.4913 +vn -0.5987 0.6326 0.4913 +vn -0.4918 -0.7715 0.4036 +vn -0.6825 0.4696 0.5601 +vn -0.3658 -0.8810 0.3002 +vn -0.7400 0.2890 0.6073 +vn -0.2254 -0.9565 0.1850 +vn -0.7693 0.0976 0.6314 +vn -0.0761 0.9951 0.0625 +vn -0.0761 -0.9951 0.0625 +vn -0.7693 -0.0976 0.6314 +vn -0.2254 0.9565 0.1850 +vn -0.7400 -0.2890 0.6073 +vn -0.3658 0.8810 0.3002 +vn -0.6825 -0.4696 0.5601 +vn -0.4918 0.7715 0.4036 +vn -0.0869 0.9951 0.0464 +vn -0.0869 -0.9951 0.0464 +vn -0.8777 -0.0976 0.4691 +vn -0.2571 0.9565 0.1374 +vn -0.8443 -0.2890 0.4513 +vn -0.4173 0.8810 0.2231 +vn -0.7786 -0.4696 0.4162 +vn -0.5611 0.7715 0.2999 +vn -0.6831 -0.6326 0.3651 +vn -0.6831 0.6326 0.3651 +vn -0.5611 -0.7715 0.2999 +vn -0.7786 0.4696 0.4162 +vn -0.4173 -0.8810 0.2231 +vn -0.8443 0.2890 0.4513 +vn -0.2571 -0.9565 0.1374 +vn -0.8777 0.0976 0.4691 +vn -0.7412 0.6326 0.2248 +vn -0.6088 -0.7715 0.1847 +vn -0.8448 0.4696 0.2563 +vn -0.4528 -0.8810 0.1374 +vn -0.9161 0.2890 0.2779 +vn -0.2790 -0.9565 0.0846 +vn -0.9524 0.0976 0.2889 +vn -0.0942 0.9951 0.0286 +vn -0.0942 -0.9951 0.0286 +vn -0.9524 -0.0976 0.2889 +vn -0.2790 0.9565 0.0846 +vn -0.9161 -0.2890 0.2779 +vn -0.4528 0.8810 0.1374 +vn -0.8448 -0.4696 0.2563 +vn -0.6088 0.7715 0.1847 +vn -0.7412 -0.6326 0.2248 +vn -0.9904 -0.0976 0.0975 +vn -0.2902 0.9565 0.0286 +vn -0.9527 -0.2890 0.0938 +vn -0.4709 0.8810 0.0464 +vn -0.8786 -0.4696 0.0865 +vn -0.6332 0.7715 0.0624 +vn -0.7708 -0.6326 0.0759 +vn -0.7708 0.6326 0.0759 +vn -0.6332 -0.7715 0.0624 +vn -0.8786 0.4696 0.0865 +vn -0.4709 -0.8810 0.0464 +vn -0.9527 0.2890 0.0938 +vn -0.2902 -0.9565 0.0286 +vn -0.9904 0.0976 0.0975 +vn -0.0980 0.9951 0.0097 +vn -0.0980 -0.9951 0.0097 +vn -0.6332 -0.7715 -0.0624 +vn -0.8786 0.4696 -0.0865 +vn -0.4709 -0.8810 -0.0464 +vn -0.9527 0.2890 -0.0938 +vn -0.2902 -0.9565 -0.0286 +vn -0.9904 0.0976 -0.0976 +vn -0.0980 0.9951 -0.0097 +vn -0.0980 -0.9951 -0.0097 +vn -0.9904 -0.0976 -0.0976 +vn -0.2902 0.9565 -0.0286 +vn -0.9527 -0.2890 -0.0938 +vn -0.4709 0.8810 -0.0464 +vn -0.8786 -0.4696 -0.0865 +vn -0.6332 0.7715 -0.0624 +vn -0.7708 -0.6326 -0.0759 +vn -0.7708 0.6326 -0.0759 +vn -0.2790 0.9565 -0.0846 +vn -0.9161 -0.2890 -0.2779 +vn -0.4528 0.8810 -0.1374 +vn -0.8448 -0.4696 -0.2563 +vn -0.6088 0.7715 -0.1847 +vn -0.7412 -0.6326 -0.2248 +vn -0.7412 0.6326 -0.2248 +vn -0.6088 -0.7715 -0.1847 +vn -0.8448 0.4696 -0.2563 +vn -0.4528 -0.8810 -0.1374 +vn -0.9161 0.2890 -0.2779 +vn -0.2790 -0.9565 -0.0846 +vn -0.9524 0.0976 -0.2889 +vn -0.0942 0.9951 -0.0286 +vn -0.0942 -0.9951 -0.0286 +vn -0.9524 -0.0976 -0.2889 +vn -0.7786 0.4696 -0.4162 +vn -0.4173 -0.8810 -0.2231 +vn -0.8443 0.2890 -0.4513 +vn -0.2571 -0.9565 -0.1374 +vn -0.8777 0.0976 -0.4691 +vn -0.0869 0.9951 -0.0464 +vn -0.0869 -0.9951 -0.0464 +vn -0.8777 -0.0976 -0.4691 +vn -0.2571 0.9565 -0.1374 +vn -0.8443 -0.2890 -0.4513 +vn -0.4173 0.8810 -0.2231 +vn -0.7786 -0.4696 -0.4162 +vn -0.5611 0.7715 -0.2999 +vn -0.6831 -0.6326 -0.3651 +vn -0.6831 0.6326 -0.3651 +vn -0.5611 -0.7715 -0.2999 +vn -0.7400 -0.2890 -0.6073 +vn -0.3658 0.8810 -0.3002 +vn -0.6825 -0.4696 -0.5601 +vn -0.4918 0.7715 -0.4036 +vn -0.5987 -0.6326 -0.4913 +vn -0.5987 0.6326 -0.4913 +vn -0.4918 -0.7715 -0.4036 +vn -0.6825 0.4696 -0.5601 +vn -0.3658 -0.8810 -0.3002 +vn -0.7400 0.2890 -0.6073 +vn -0.2254 -0.9565 -0.1850 +vn -0.7693 0.0976 -0.6314 +vn -0.0761 0.9951 -0.0625 +vn -0.0761 -0.9951 -0.0625 +vn -0.7693 -0.0976 -0.6314 +vn -0.2254 0.9565 -0.1850 +vn -0.3002 -0.8810 -0.3658 +vn -0.6073 0.2890 -0.7400 +vn -0.1850 -0.9565 -0.2254 +vn -0.6314 0.0976 -0.7693 +vn -0.0625 0.9951 -0.0761 +vn -0.0625 -0.9951 -0.0761 +vn -0.6314 -0.0976 -0.7693 +vn -0.1850 0.9565 -0.2254 +vn -0.6073 -0.2890 -0.7400 +vn -0.3002 0.8810 -0.3658 +vn -0.5601 -0.4696 -0.6825 +vn -0.4036 0.7715 -0.4918 +vn -0.4913 -0.6326 -0.5987 +vn -0.4913 0.6326 -0.5987 +vn -0.4036 -0.7715 -0.4918 +vn -0.5601 0.4696 -0.6825 +vn -0.4162 -0.4696 -0.7786 +vn -0.2999 0.7715 -0.5611 +vn -0.3651 -0.6326 -0.6831 +vn -0.3651 0.6326 -0.6831 +vn -0.2999 -0.7715 -0.5611 +vn -0.4162 0.4696 -0.7786 +vn -0.2230 -0.8810 -0.4173 +vn -0.4513 0.2890 -0.8443 +vn -0.1374 -0.9565 -0.2571 +vn -0.4691 0.0976 -0.8777 +vn -0.0464 0.9951 -0.0869 +vn -0.0464 -0.9951 -0.0869 +vn -0.4691 -0.0976 -0.8777 +vn -0.1374 0.9565 -0.2571 +vn -0.4513 -0.2890 -0.8443 +vn -0.2230 0.8810 -0.4173 +vn -0.0846 -0.9565 -0.2790 +vn -0.2889 0.0976 -0.9524 +vn -0.0286 0.9951 -0.0942 +vn -0.0286 -0.9951 -0.0942 +vn -0.2889 -0.0976 -0.9524 +vn -0.0846 0.9565 -0.2790 +vn -0.2779 -0.2890 -0.9161 +vn -0.1374 0.8810 -0.4528 +vn -0.2563 -0.4696 -0.8448 +vn -0.1847 0.7715 -0.6088 +vn -0.2248 -0.6326 -0.7412 +vn -0.2248 0.6326 -0.7412 +vn -0.1847 -0.7715 -0.6088 +vn -0.2563 0.4696 -0.8448 +vn -0.1374 -0.8810 -0.4528 +vn -0.2779 0.2890 -0.9161 +vn -0.0624 0.7715 -0.6332 +vn -0.0759 -0.6326 -0.7708 +vn -0.0759 0.6326 -0.7708 +vn -0.0624 -0.7715 -0.6332 +vn -0.0865 0.4696 -0.8786 +vn -0.0464 -0.8810 -0.4709 +vn -0.0938 0.2890 -0.9527 +vn -0.0286 -0.9565 -0.2902 +vn -0.0976 0.0976 -0.9904 +vn -0.0097 0.9951 -0.0980 +vn -0.0097 -0.9951 -0.0980 +vn -0.0976 -0.0976 -0.9904 +vn -0.0286 0.9565 -0.2902 +vn -0.0938 -0.2890 -0.9527 +vn -0.0464 0.8810 -0.4709 +vn -0.0865 -0.4696 -0.8786 +usemtl Material +s off +f 479/1/1 478/2/1 20/3/1 21/4/1 +f 4/5/2 3/6/2 13/7/2 14/8/2 +f 480/9/3 479/1/3 21/4/3 22/10/3 +f 5/11/4 4/5/4 14/8/4 15/12/4 +f 10/13/5 480/9/5 22/10/5 23/14/5 +f 6/15/6 5/11/6 15/12/6 16/16/6 +f 481/17/7 10/13/7 23/14/7 24/18/7 +f 7/19/8 6/15/8 16/16/8 17/20/8 +f 482/21/9 481/17/9 24/18/9 25/22/9 +f 8/23/10 7/19/10 17/20/10 18/24/10 +f 1/25/11 297/26/11 11/27/11 +f 206/28/12 482/21/12 25/22/12 +f 9/29/13 8/23/13 18/24/13 19/30/13 +f 2/31/14 1/25/14 11/27/14 12/32/14 +f 478/2/15 9/29/15 19/30/15 20/3/15 +f 3/6/16 2/31/16 12/32/16 13/7/16 +f 20/3/17 19/30/17 34/33/17 35/34/17 +f 13/7/18 12/32/18 27/35/18 28/36/18 +f 21/4/19 20/3/19 35/34/19 36/37/19 +f 14/8/20 13/7/20 28/36/20 29/38/20 +f 22/10/21 21/4/21 36/37/21 37/39/21 +f 15/12/22 14/8/22 29/38/22 30/40/22 +f 23/14/23 22/10/23 37/39/23 38/41/23 +f 16/16/24 15/12/24 30/40/24 31/42/24 +f 24/18/25 23/14/25 38/41/25 39/43/25 +f 17/20/26 16/16/26 31/42/26 32/44/26 +f 25/22/27 24/18/27 39/43/27 40/45/27 +f 18/24/28 17/20/28 32/44/28 33/46/28 +f 11/27/29 297/47/29 26/48/29 +f 206/49/30 25/22/30 40/45/30 +f 19/30/31 18/24/31 33/46/31 34/33/31 +f 12/32/32 11/27/32 26/48/32 27/35/32 +f 39/43/33 38/41/33 53/50/33 54/51/33 +f 32/44/34 31/42/34 46/52/34 47/53/34 +f 40/45/35 39/43/35 54/51/35 55/54/35 +f 33/46/36 32/44/36 47/53/36 48/55/36 +f 26/48/37 297/56/37 41/57/37 +f 206/58/38 40/45/38 55/54/38 +f 34/33/39 33/46/39 48/55/39 49/59/39 +f 27/35/40 26/48/40 41/57/40 42/60/40 +f 35/34/41 34/33/41 49/59/41 50/61/41 +f 28/36/42 27/35/42 42/60/42 43/62/42 +f 36/37/43 35/34/43 50/61/43 51/63/43 +f 29/38/44 28/36/44 43/62/44 44/64/44 +f 37/39/45 36/37/45 51/63/45 52/65/45 +f 30/40/46 29/38/46 44/64/46 45/66/46 +f 38/41/47 37/39/47 52/65/47 53/50/47 +f 31/42/48 30/40/48 45/66/48 46/52/48 +f 43/62/49 42/60/49 57/67/49 58/68/49 +f 51/63/50 50/61/50 65/69/50 66/70/50 +f 44/64/51 43/62/51 58/68/51 59/71/51 +f 52/65/52 51/63/52 66/70/52 67/72/52 +f 45/66/53 44/64/53 59/71/53 60/73/53 +f 53/50/54 52/65/54 67/72/54 68/74/54 +f 46/52/55 45/66/55 60/73/55 61/75/55 +f 54/51/56 53/50/56 68/74/56 69/76/56 +f 47/53/57 46/52/57 61/75/57 62/77/57 +f 55/54/58 54/51/58 69/76/58 70/78/58 +f 48/55/59 47/53/59 62/77/59 63/79/59 +f 41/57/60 297/80/60 56/81/60 +f 206/82/61 55/54/61 70/78/61 +f 49/59/62 48/55/62 63/79/62 64/83/62 +f 42/60/63 41/57/63 56/81/63 57/67/63 +f 50/61/64 49/59/64 64/83/64 65/69/64 +f 62/77/65 61/75/65 76/84/65 77/85/65 +f 70/78/66 69/76/66 84/86/66 85/87/66 +f 63/79/67 62/77/67 77/85/67 78/88/67 +f 56/81/68 297/89/68 71/90/68 +f 206/91/69 70/78/69 85/87/69 +f 64/83/70 63/79/70 78/88/70 79/92/70 +f 57/67/71 56/81/71 71/90/71 72/93/71 +f 65/69/72 64/83/72 79/92/72 80/94/72 +f 58/68/73 57/67/73 72/93/73 73/95/73 +f 66/70/74 65/69/74 80/94/74 81/96/74 +f 59/71/75 58/68/75 73/95/75 74/97/75 +f 67/72/76 66/70/76 81/96/76 82/98/76 +f 60/73/77 59/71/77 74/97/77 75/99/77 +f 68/74/78 67/72/78 82/98/78 83/100/78 +f 61/75/79 60/73/79 75/99/79 76/84/79 +f 69/76/80 68/74/80 83/100/80 84/86/80 +f 81/96/81 80/94/81 95/101/81 96/102/81 +f 74/97/82 73/95/82 88/103/82 89/104/82 +f 82/98/83 81/96/83 96/102/83 97/105/83 +f 75/99/84 74/97/84 89/104/84 90/106/84 +f 83/100/85 82/98/85 97/105/85 98/107/85 +f 76/84/86 75/99/86 90/106/86 91/108/86 +f 84/86/87 83/100/87 98/107/87 99/109/87 +f 77/85/88 76/84/88 91/108/88 92/110/88 +f 85/87/89 84/86/89 99/109/89 100/111/89 +f 78/88/90 77/85/90 92/110/90 93/112/90 +f 71/90/91 297/113/91 86/114/91 +f 206/115/92 85/87/92 100/111/92 +f 79/92/93 78/88/93 93/112/93 94/116/93 +f 72/93/94 71/90/94 86/114/94 87/117/94 +f 80/94/95 79/92/95 94/116/95 95/101/95 +f 73/95/96 72/93/96 87/117/96 88/103/96 +f 100/111/97 99/109/97 114/118/97 115/119/97 +f 93/112/98 92/110/98 107/120/98 108/121/98 +f 86/114/99 297/122/99 101/123/99 +f 206/124/100 100/111/100 115/119/100 +f 94/116/101 93/112/101 108/121/101 109/125/101 +f 87/117/102 86/114/102 101/123/102 102/126/102 +f 95/101/103 94/116/103 109/125/103 110/127/103 +f 88/103/104 87/117/104 102/126/104 103/128/104 +f 96/102/105 95/101/105 110/127/105 111/129/105 +f 89/104/106 88/103/106 103/128/106 104/130/106 +f 97/105/107 96/102/107 111/129/107 112/131/107 +f 90/106/108 89/104/108 104/130/108 105/132/108 +f 98/107/109 97/105/109 112/131/109 113/133/109 +f 91/108/110 90/106/110 105/132/110 106/134/110 +f 99/109/111 98/107/111 113/133/111 114/118/111 +f 92/110/112 91/108/112 106/134/112 107/120/112 +f 104/130/113 103/128/113 118/135/113 119/136/113 +f 112/131/114 111/129/114 126/137/114 127/138/114 +f 105/132/115 104/130/115 119/136/115 120/139/115 +f 113/133/116 112/131/116 127/138/116 128/140/116 +f 106/134/117 105/132/117 120/139/117 121/141/117 +f 114/118/118 113/133/118 128/140/118 129/142/118 +f 107/120/119 106/134/119 121/141/119 122/143/119 +f 115/119/120 114/118/120 129/142/120 130/144/120 +f 108/121/121 107/120/121 122/143/121 123/145/121 +f 101/123/122 297/146/122 116/147/122 +f 206/148/123 115/119/123 130/144/123 +f 109/125/124 108/121/124 123/145/124 124/149/124 +f 102/126/125 101/123/125 116/147/125 117/150/125 +f 110/127/126 109/125/126 124/149/126 125/151/126 +f 103/128/127 102/126/127 117/150/127 118/135/127 +f 111/129/128 110/127/128 125/151/128 126/137/128 +f 123/145/129 122/143/129 137/152/129 138/153/129 +f 116/147/130 297/154/130 131/155/130 +f 206/156/131 130/144/131 145/157/131 +f 124/149/132 123/145/132 138/153/132 139/158/132 +f 117/150/133 116/147/133 131/155/133 132/159/133 +f 125/151/134 124/149/134 139/158/134 140/160/134 +f 118/135/135 117/150/135 132/159/135 133/161/135 +f 126/137/136 125/151/136 140/160/136 141/162/136 +f 119/136/137 118/135/137 133/161/137 134/163/137 +f 127/138/138 126/137/138 141/162/138 142/164/138 +f 120/139/139 119/136/139 134/163/139 135/165/139 +f 128/140/140 127/138/140 142/164/140 143/166/140 +f 121/141/141 120/139/141 135/165/141 136/167/141 +f 129/142/142 128/140/142 143/166/142 144/168/142 +f 122/143/143 121/141/143 136/167/143 137/152/143 +f 130/144/144 129/142/144 144/168/144 145/157/144 +f 142/164/145 141/162/145 156/169/145 157/170/145 +f 135/165/146 134/163/146 149/171/146 150/172/146 +f 143/166/147 142/164/147 157/170/147 158/173/147 +f 136/167/148 135/165/148 150/172/148 151/174/148 +f 144/168/149 143/166/149 158/173/149 159/175/149 +f 137/152/150 136/167/150 151/174/150 152/176/150 +f 145/157/151 144/168/151 159/175/151 160/177/151 +f 138/153/152 137/152/152 152/176/152 153/178/152 +f 131/155/153 297/179/153 146/180/153 +f 206/181/154 145/157/154 160/177/154 +f 139/158/155 138/153/155 153/178/155 154/182/155 +f 132/159/156 131/155/156 146/180/156 147/183/156 +f 140/160/157 139/158/157 154/182/157 155/184/157 +f 133/161/158 132/159/158 147/183/158 148/185/158 +f 141/162/159 140/160/159 155/184/159 156/169/159 +f 134/163/160 133/161/160 148/185/160 149/171/160 +f 206/186/161 160/177/161 175/187/161 +f 154/182/162 153/178/162 168/188/162 169/189/162 +f 147/183/163 146/180/163 161/190/163 162/191/163 +f 155/184/164 154/182/164 169/189/164 170/192/164 +f 148/185/165 147/183/165 162/191/165 163/193/165 +f 156/169/166 155/184/166 170/192/166 171/194/166 +f 149/171/167 148/185/167 163/193/167 164/195/167 +f 157/170/168 156/169/168 171/194/168 172/196/168 +f 150/172/169 149/171/169 164/195/169 165/197/169 +f 158/173/170 157/170/170 172/196/170 173/198/170 +f 151/174/171 150/172/171 165/197/171 166/199/171 +f 159/175/172 158/173/172 173/198/172 174/200/172 +f 152/176/173 151/174/173 166/199/173 167/201/173 +f 160/177/174 159/175/174 174/200/174 175/187/174 +f 153/178/175 152/176/175 167/201/175 168/188/175 +f 146/180/176 297/202/176 161/190/176 +f 173/198/177 172/196/177 187/203/177 188/204/177 +f 166/199/178 165/197/178 180/205/178 181/206/178 +f 174/200/179 173/198/179 188/204/179 189/207/179 +f 167/201/180 166/199/180 181/206/180 182/208/180 +f 175/187/181 174/200/181 189/207/181 190/209/181 +f 168/188/182 167/201/182 182/208/182 183/210/182 +f 161/190/183 297/211/183 176/212/183 +f 206/213/184 175/187/184 190/209/184 +f 169/189/185 168/188/185 183/210/185 184/214/185 +f 162/191/186 161/190/186 176/212/186 177/215/186 +f 170/192/187 169/189/187 184/214/187 185/216/187 +f 163/193/188 162/191/188 177/215/188 178/217/188 +f 171/194/189 170/192/189 185/216/189 186/218/189 +f 164/195/190 163/193/190 178/217/190 179/219/190 +f 172/196/191 171/194/191 186/218/191 187/203/191 +f 165/197/192 164/195/192 179/219/192 180/205/192 +f 177/215/193 176/212/193 191/220/193 192/221/193 +f 185/216/194 184/214/194 199/222/194 200/223/194 +f 178/217/195 177/215/195 192/221/195 193/224/195 +f 186/218/196 185/216/196 200/223/196 201/225/196 +f 179/219/197 178/217/197 193/224/197 194/226/197 +f 187/203/198 186/218/198 201/225/198 202/227/198 +f 180/205/199 179/219/199 194/226/199 195/228/199 +f 188/204/200 187/203/200 202/227/200 203/229/200 +f 181/206/201 180/205/201 195/228/201 196/230/201 +f 189/207/202 188/204/202 203/229/202 204/231/202 +f 182/208/203 181/206/203 196/230/203 197/232/203 +f 190/209/204 189/207/204 204/231/204 205/233/204 +f 183/210/205 182/208/205 197/232/205 198/234/205 +f 176/212/206 297/235/206 191/220/206 +f 206/236/207 190/209/207 205/233/207 +f 184/214/208 183/210/208 198/234/208 199/222/208 +f 196/230/209 195/228/209 211/237/209 212/238/209 +f 204/231/210 203/229/210 219/239/210 220/240/210 +f 197/232/211 196/230/211 212/238/211 213/241/211 +f 205/233/212 204/231/212 220/240/212 221/242/212 +f 198/234/213 197/232/213 213/241/213 214/243/213 +f 191/220/214 297/244/214 207/245/214 +f 206/246/215 205/233/215 221/242/215 +f 199/222/216 198/234/216 214/243/216 215/247/216 +f 192/221/217 191/220/217 207/245/217 208/248/217 +f 200/223/218 199/222/218 215/247/218 216/249/218 +f 193/224/219 192/221/219 208/248/219 209/250/219 +f 201/225/220 200/223/220 216/249/220 217/251/220 +f 194/226/221 193/224/221 209/250/221 210/252/221 +f 202/227/222 201/225/222 217/251/222 218/253/222 +f 195/228/223 194/226/223 210/252/223 211/237/223 +f 203/229/224 202/227/224 218/253/224 219/239/224 +f 216/249/225 215/247/225 230/254/225 231/255/225 +f 209/250/226 208/248/226 223/256/226 224/257/226 +f 217/251/227 216/249/227 231/255/227 232/258/227 +f 210/252/228 209/250/228 224/257/228 225/259/228 +f 218/253/229 217/251/229 232/258/229 233/260/229 +f 211/237/230 210/252/230 225/259/230 226/261/230 +f 219/239/231 218/253/231 233/260/231 234/262/231 +f 212/238/232 211/237/232 226/261/232 227/263/232 +f 220/240/233 219/239/233 234/262/233 235/264/233 +f 213/241/234 212/238/234 227/263/234 228/265/234 +f 221/242/235 220/240/235 235/264/235 236/266/235 +f 214/243/236 213/241/236 228/265/236 229/267/236 +f 207/245/237 297/268/237 222/269/237 +f 206/270/238 221/242/238 236/266/238 +f 215/247/239 214/243/239 229/267/239 230/254/239 +f 208/248/240 207/245/240 222/269/240 223/256/240 +f 235/264/241 234/262/241 249/271/241 250/272/241 +f 228/265/242 227/263/242 242/273/242 243/274/242 +f 236/266/243 235/264/243 250/272/243 251/275/243 +f 229/267/244 228/265/244 243/274/244 244/276/244 +f 222/269/245 297/277/245 237/278/245 +f 206/279/246 236/266/246 251/275/246 +f 230/254/247 229/267/247 244/276/247 245/280/247 +f 223/256/248 222/269/248 237/278/248 238/281/248 +f 231/255/249 230/254/249 245/280/249 246/282/249 +f 224/257/250 223/256/250 238/281/250 239/283/250 +f 232/258/251 231/255/251 246/282/251 247/284/251 +f 225/259/252 224/257/252 239/283/252 240/285/252 +f 233/260/253 232/258/253 247/284/253 248/286/253 +f 226/261/254 225/259/254 240/285/254 241/287/254 +f 234/262/255 233/260/255 248/286/255 249/271/255 +f 227/263/256 226/261/256 241/287/256 242/273/256 +f 239/283/257 238/281/257 253/288/257 254/289/257 +f 247/284/258 246/282/258 261/290/258 262/291/258 +f 240/285/259 239/283/259 254/289/259 255/292/259 +f 248/286/260 247/284/260 262/291/260 263/293/260 +f 241/287/261 240/285/261 255/292/261 256/294/261 +f 249/271/262 248/286/262 263/293/262 264/295/262 +f 242/273/263 241/287/263 256/294/263 257/296/263 +f 250/272/264 249/271/264 264/295/264 265/297/264 +f 243/274/265 242/273/265 257/296/265 258/298/265 +f 251/275/266 250/272/266 265/297/266 266/299/266 +f 244/276/267 243/274/267 258/298/267 259/300/267 +f 237/278/268 297/301/268 252/302/268 +f 206/303/269 251/275/269 266/299/269 +f 245/280/270 244/276/270 259/300/270 260/304/270 +f 238/281/271 237/278/271 252/302/271 253/288/271 +f 246/282/272 245/280/272 260/304/272 261/290/272 +f 258/298/273 257/296/273 272/305/273 273/306/273 +f 266/299/274 265/297/274 280/307/274 281/308/274 +f 259/300/275 258/298/275 273/306/275 274/309/275 +f 252/302/276 297/310/276 267/311/276 +f 206/312/277 266/299/277 281/308/277 +f 260/304/278 259/300/278 274/309/278 275/313/278 +f 253/288/279 252/302/279 267/311/279 268/314/279 +f 261/290/280 260/304/280 275/313/280 276/315/280 +f 254/289/281 253/288/281 268/314/281 269/316/281 +f 262/291/282 261/290/282 276/315/282 277/317/282 +f 255/292/283 254/289/283 269/316/283 270/318/283 +f 263/293/284 262/291/284 277/317/284 278/319/284 +f 256/294/285 255/292/285 270/318/285 271/320/285 +f 264/295/286 263/293/286 278/319/286 279/321/286 +f 257/296/287 256/294/287 271/320/287 272/305/287 +f 265/297/288 264/295/288 279/321/288 280/307/288 +f 277/317/289 276/315/289 291/322/289 292/323/289 +f 270/318/290 269/316/290 284/324/290 285/325/290 +f 278/319/291 277/317/291 292/323/291 293/326/291 +f 271/320/292 270/318/292 285/325/292 286/327/292 +f 279/321/293 278/319/293 293/326/293 294/328/293 +f 272/305/294 271/320/294 286/327/294 287/329/294 +f 280/307/295 279/321/295 294/328/295 295/330/295 +f 273/306/296 272/305/296 287/329/296 288/331/296 +f 281/308/297 280/307/297 295/330/297 296/332/297 +f 274/309/298 273/306/298 288/331/298 289/333/298 +f 267/311/299 297/334/299 282/335/299 +f 206/336/300 281/308/300 296/332/300 +f 275/313/301 274/309/301 289/333/301 290/337/301 +f 268/314/302 267/311/302 282/335/302 283/338/302 +f 276/315/303 275/313/303 290/337/303 291/322/303 +f 269/316/304 268/314/304 283/338/304 284/324/304 +f 296/332/305 295/330/305 311/339/305 312/340/305 +f 289/333/306 288/331/306 304/341/306 305/342/306 +f 282/335/307 297/343/307 298/344/307 +f 206/345/308 296/332/308 312/340/308 +f 290/337/309 289/333/309 305/342/309 306/346/309 +f 283/338/310 282/335/310 298/344/310 299/347/310 +f 291/322/311 290/337/311 306/346/311 307/348/311 +f 284/324/312 283/338/312 299/347/312 300/349/312 +f 292/323/313 291/322/313 307/348/313 308/350/313 +f 285/325/314 284/324/314 300/349/314 301/351/314 +f 293/326/315 292/323/315 308/350/315 309/352/315 +f 286/327/316 285/325/316 301/351/316 302/353/316 +f 294/328/317 293/326/317 309/352/317 310/354/317 +f 287/329/318 286/327/318 302/353/318 303/355/318 +f 295/330/319 294/328/319 310/354/319 311/339/319 +f 288/331/320 287/329/320 303/355/320 304/341/320 +f 309/352/321 308/350/321 323/356/321 324/357/321 +f 302/353/322 301/351/322 316/358/322 317/359/322 +f 310/354/323 309/352/323 324/357/323 325/360/323 +f 303/355/324 302/353/324 317/359/324 318/361/324 +f 311/339/325 310/354/325 325/360/325 326/362/325 +f 304/341/326 303/355/326 318/361/326 319/363/326 +f 312/340/327 311/339/327 326/362/327 327/364/327 +f 305/342/328 304/341/328 319/363/328 320/365/328 +f 298/344/329 297/366/329 313/367/329 +f 206/368/330 312/340/330 327/364/330 +f 306/346/331 305/342/331 320/365/331 321/369/331 +f 299/347/332 298/344/332 313/367/332 314/370/332 +f 307/348/333 306/346/333 321/369/333 322/371/333 +f 300/349/334 299/347/334 314/370/334 315/372/334 +f 308/350/335 307/348/335 322/371/335 323/356/335 +f 301/351/336 300/349/336 315/372/336 316/358/336 +f 313/367/337 297/373/337 328/374/337 +f 206/375/338 327/364/338 342/376/338 +f 321/369/339 320/365/339 335/377/339 336/378/339 +f 314/370/340 313/367/340 328/374/340 329/379/340 +f 322/371/341 321/369/341 336/378/341 337/380/341 +f 315/372/342 314/370/342 329/379/342 330/381/342 +f 323/356/343 322/371/343 337/380/343 338/382/343 +f 316/358/344 315/372/344 330/381/344 331/383/344 +f 324/357/345 323/356/345 338/382/345 339/384/345 +f 317/359/346 316/358/346 331/383/346 332/385/346 +f 325/360/347 324/357/347 339/384/347 340/386/347 +f 318/361/348 317/359/348 332/385/348 333/387/348 +f 326/362/349 325/360/349 340/386/349 341/388/349 +f 319/363/350 318/361/350 333/387/350 334/389/350 +f 327/364/351 326/362/351 341/388/351 342/376/351 +f 320/365/352 319/363/352 334/389/352 335/377/352 +f 332/385/353 331/383/353 346/390/353 347/391/353 +f 340/386/354 339/384/354 354/392/354 355/393/354 +f 333/387/355 332/385/355 347/391/355 348/394/355 +f 341/388/356 340/386/356 355/393/356 356/395/356 +f 334/389/357 333/387/357 348/394/357 349/396/357 +f 342/376/358 341/388/358 356/395/358 357/397/358 +f 335/377/359 334/389/359 349/396/359 350/398/359 +f 328/374/360 297/399/360 343/400/360 +f 206/401/361 342/376/361 357/397/361 +f 336/378/362 335/377/362 350/398/362 351/402/362 +f 329/379/363 328/374/363 343/400/363 344/403/363 +f 337/380/364 336/378/364 351/402/364 352/404/364 +f 330/381/365 329/379/365 344/403/365 345/405/365 +f 338/382/366 337/380/366 352/404/366 353/406/366 +f 331/383/367 330/381/367 345/405/367 346/390/367 +f 339/384/368 338/382/368 353/406/368 354/392/368 +f 351/402/369 350/398/369 365/407/369 366/408/369 +f 344/403/370 343/400/370 358/409/370 359/410/370 +f 352/404/371 351/402/371 366/408/371 367/411/371 +f 345/405/372 344/403/372 359/410/372 360/412/372 +f 353/406/373 352/404/373 367/411/373 368/413/373 +f 346/390/374 345/405/374 360/412/374 361/414/374 +f 354/392/375 353/406/375 368/413/375 369/415/375 +f 347/391/376 346/390/376 361/414/376 362/416/376 +f 355/393/377 354/392/377 369/415/377 370/417/377 +f 348/394/378 347/391/378 362/416/378 363/418/378 +f 356/395/379 355/393/379 370/417/379 371/419/379 +f 349/396/380 348/394/380 363/418/380 364/420/380 +f 357/397/381 356/395/381 371/419/381 372/421/381 +f 350/398/382 349/396/382 364/420/382 365/407/382 +f 343/400/383 297/422/383 358/409/383 +f 206/423/384 357/397/384 372/421/384 +f 370/424/385 369/425/385 384/426/385 385/427/385 +f 363/428/386 362/429/386 377/430/386 378/431/386 +f 371/432/387 370/424/387 385/427/387 386/433/387 +f 364/434/388 363/428/388 378/431/388 379/435/388 +f 372/436/389 371/432/389 386/433/389 387/437/389 +f 365/438/390 364/434/390 379/435/390 380/439/390 +f 358/440/391 297/441/391 373/442/391 +f 206/443/392 372/436/392 387/437/392 +f 366/444/393 365/438/393 380/439/393 381/445/393 +f 359/446/394 358/440/394 373/442/394 374/447/394 +f 367/448/395 366/444/395 381/445/395 382/449/395 +f 360/450/396 359/446/396 374/447/396 375/451/396 +f 368/452/397 367/448/397 382/449/397 383/453/397 +f 361/454/398 360/450/398 375/451/398 376/455/398 +f 369/425/399 368/452/399 383/453/399 384/426/399 +f 362/429/400 361/454/400 376/455/400 377/430/400 +f 374/447/401 373/442/401 388/456/401 389/457/401 +f 382/449/402 381/445/402 396/458/402 397/459/402 +f 375/451/403 374/447/403 389/457/403 390/460/403 +f 383/453/404 382/449/404 397/459/404 398/461/404 +f 376/455/405 375/451/405 390/460/405 391/462/405 +f 384/426/406 383/453/406 398/461/406 399/463/406 +f 377/430/407 376/455/407 391/462/407 392/464/407 +f 385/427/408 384/426/408 399/463/408 400/465/408 +f 378/431/409 377/430/409 392/464/409 393/466/409 +f 386/433/410 385/427/410 400/465/410 401/467/410 +f 379/435/411 378/431/411 393/466/411 394/468/411 +f 387/437/412 386/433/412 401/467/412 402/469/412 +f 380/439/413 379/435/413 394/468/413 395/470/413 +f 373/442/414 297/471/414 388/456/414 +f 206/472/415 387/437/415 402/469/415 +f 381/445/416 380/439/416 395/470/416 396/458/416 +f 393/466/417 392/464/417 407/473/417 408/474/417 +f 401/467/418 400/465/418 415/475/418 416/476/418 +f 394/468/419 393/466/419 408/474/419 409/477/419 +f 402/469/420 401/467/420 416/476/420 417/478/420 +f 395/470/421 394/468/421 409/477/421 410/479/421 +f 388/456/422 297/480/422 403/481/422 +f 206/482/423 402/469/423 417/478/423 +f 396/458/424 395/470/424 410/479/424 411/483/424 +f 389/457/425 388/456/425 403/481/425 404/484/425 +f 397/459/426 396/458/426 411/483/426 412/485/426 +f 390/460/427 389/457/427 404/484/427 405/486/427 +f 398/461/428 397/459/428 412/485/428 413/487/428 +f 391/462/429 390/460/429 405/486/429 406/488/429 +f 399/463/430 398/461/430 413/487/430 414/489/430 +f 392/464/431 391/462/431 406/488/431 407/473/431 +f 400/465/432 399/463/432 414/489/432 415/475/432 +f 412/485/433 411/483/433 426/490/433 427/491/433 +f 405/486/434 404/484/434 419/492/434 420/493/434 +f 413/487/435 412/485/435 427/491/435 428/494/435 +f 406/488/436 405/486/436 420/493/436 421/495/436 +f 414/489/437 413/487/437 428/494/437 429/496/437 +f 407/473/438 406/488/438 421/495/438 422/497/438 +f 415/475/439 414/489/439 429/496/439 430/498/439 +f 408/474/440 407/473/440 422/497/440 423/499/440 +f 416/476/441 415/475/441 430/498/441 431/500/441 +f 409/477/442 408/474/442 423/499/442 424/501/442 +f 417/478/443 416/476/443 431/500/443 432/502/443 +f 410/479/444 409/477/444 424/501/444 425/503/444 +f 403/481/445 297/504/445 418/505/445 +f 206/506/446 417/478/446 432/502/446 +f 411/483/447 410/479/447 425/503/447 426/490/447 +f 404/484/448 403/481/448 418/505/448 419/492/448 +f 431/500/449 430/498/449 445/507/449 446/508/449 +f 424/501/450 423/499/450 438/509/450 439/510/450 +f 432/502/451 431/500/451 446/508/451 447/511/451 +f 425/503/452 424/501/452 439/510/452 440/512/452 +f 418/505/453 297/513/453 433/514/453 +f 206/515/454 432/502/454 447/511/454 +f 426/490/455 425/503/455 440/512/455 441/516/455 +f 419/492/456 418/505/456 433/514/456 434/517/456 +f 427/491/457 426/490/457 441/516/457 442/518/457 +f 420/493/458 419/492/458 434/517/458 435/519/458 +f 428/494/459 427/491/459 442/518/459 443/520/459 +f 421/495/460 420/493/460 435/519/460 436/521/460 +f 429/496/461 428/494/461 443/520/461 444/522/461 +f 422/497/462 421/495/462 436/521/462 437/523/462 +f 430/498/463 429/496/463 444/522/463 445/507/463 +f 423/499/464 422/497/464 437/523/464 438/509/464 +f 443/520/465 442/518/465 457/524/465 458/525/465 +f 436/521/466 435/519/466 450/526/466 451/527/466 +f 444/522/467 443/520/467 458/525/467 459/528/467 +f 437/523/468 436/521/468 451/527/468 452/529/468 +f 445/507/469 444/522/469 459/528/469 460/530/469 +f 438/509/470 437/523/470 452/529/470 453/531/470 +f 446/508/471 445/507/471 460/530/471 461/532/471 +f 439/510/472 438/509/472 453/531/472 454/533/472 +f 447/511/473 446/508/473 461/532/473 462/534/473 +f 440/512/474 439/510/474 454/533/474 455/535/474 +f 433/514/475 297/536/475 448/537/475 +f 206/538/476 447/511/476 462/534/476 +f 441/516/477 440/512/477 455/535/477 456/539/477 +f 434/517/478 433/514/478 448/537/478 449/540/478 +f 442/518/479 441/516/479 456/539/479 457/524/479 +f 435/519/480 434/517/480 449/540/480 450/526/480 +f 462/534/481 461/532/481 476/541/481 477/542/481 +f 455/535/482 454/533/482 469/543/482 470/544/482 +f 448/537/483 297/545/483 463/546/483 +f 206/547/484 462/534/484 477/542/484 +f 456/539/485 455/535/485 470/544/485 471/548/485 +f 449/540/486 448/537/486 463/546/486 464/549/486 +f 457/524/487 456/539/487 471/548/487 472/550/487 +f 450/526/488 449/540/488 464/549/488 465/551/488 +f 458/525/489 457/524/489 472/550/489 473/552/489 +f 451/527/490 450/526/490 465/551/490 466/553/490 +f 459/528/491 458/525/491 473/552/491 474/554/491 +f 452/529/492 451/527/492 466/553/492 467/555/492 +f 460/530/493 459/528/493 474/554/493 475/556/493 +f 453/531/494 452/529/494 467/555/494 468/557/494 +f 461/532/495 460/530/495 475/556/495 476/541/495 +f 454/533/496 453/531/496 468/557/496 469/543/496 +f 466/553/497 465/551/497 3/6/497 4/5/497 +f 474/554/498 473/552/498 479/1/498 480/9/498 +f 467/555/499 466/553/499 4/5/499 5/11/499 +f 475/556/500 474/554/500 480/9/500 10/13/500 +f 468/557/501 467/555/501 5/11/501 6/15/501 +f 476/541/502 475/556/502 10/13/502 481/17/502 +f 469/543/503 468/557/503 6/15/503 7/19/503 +f 477/542/504 476/541/504 481/17/504 482/21/504 +f 470/544/505 469/543/505 7/19/505 8/23/505 +f 463/546/506 297/558/506 1/25/506 +f 206/559/507 477/542/507 482/21/507 +f 471/548/508 470/544/508 8/23/508 9/29/508 +f 464/549/509 463/546/509 1/25/509 2/31/509 +f 472/550/510 471/548/510 9/29/510 478/2/510 +f 465/551/511 464/549/511 2/31/511 3/6/511 +f 473/552/512 472/550/512 478/2/512 479/1/512 diff --git a/vitrix/assets/textures/healthbar/0.png b/vitrix/assets/textures/healthbar/0.png new file mode 100644 index 0000000..9b32701 Binary files /dev/null and b/vitrix/assets/textures/healthbar/0.png differ diff --git a/vitrix/assets/textures/healthbar/1.png b/vitrix/assets/textures/healthbar/1.png new file mode 100644 index 0000000..fc786a7 Binary files /dev/null and b/vitrix/assets/textures/healthbar/1.png differ diff --git a/vitrix/assets/textures/healthbar/10.png b/vitrix/assets/textures/healthbar/10.png new file mode 100644 index 0000000..3ffb14a Binary files /dev/null and b/vitrix/assets/textures/healthbar/10.png differ diff --git a/vitrix/assets/textures/healthbar/11.png b/vitrix/assets/textures/healthbar/11.png new file mode 100644 index 0000000..7a6b992 Binary files /dev/null and b/vitrix/assets/textures/healthbar/11.png differ diff --git a/vitrix/assets/textures/healthbar/12.png b/vitrix/assets/textures/healthbar/12.png new file mode 100644 index 0000000..3e608fa Binary files /dev/null and b/vitrix/assets/textures/healthbar/12.png differ diff --git a/vitrix/assets/textures/healthbar/13.png b/vitrix/assets/textures/healthbar/13.png new file mode 100644 index 0000000..a358772 Binary files /dev/null and b/vitrix/assets/textures/healthbar/13.png differ diff --git a/vitrix/assets/textures/healthbar/14.png b/vitrix/assets/textures/healthbar/14.png new file mode 100644 index 0000000..053012e Binary files /dev/null and b/vitrix/assets/textures/healthbar/14.png differ diff --git a/vitrix/assets/textures/healthbar/15.png b/vitrix/assets/textures/healthbar/15.png new file mode 100644 index 0000000..7814331 Binary files /dev/null and b/vitrix/assets/textures/healthbar/15.png differ diff --git a/vitrix/assets/textures/healthbar/2.png b/vitrix/assets/textures/healthbar/2.png new file mode 100644 index 0000000..955e6ab Binary files /dev/null and b/vitrix/assets/textures/healthbar/2.png differ diff --git a/vitrix/assets/textures/healthbar/3.png b/vitrix/assets/textures/healthbar/3.png new file mode 100644 index 0000000..87d99ab Binary files /dev/null and b/vitrix/assets/textures/healthbar/3.png differ diff --git a/vitrix/assets/textures/healthbar/4.png b/vitrix/assets/textures/healthbar/4.png new file mode 100644 index 0000000..16b956b Binary files /dev/null and b/vitrix/assets/textures/healthbar/4.png differ diff --git a/vitrix/assets/textures/healthbar/5.png b/vitrix/assets/textures/healthbar/5.png new file mode 100644 index 0000000..5efc022 Binary files /dev/null and b/vitrix/assets/textures/healthbar/5.png differ diff --git a/vitrix/assets/textures/healthbar/6.png b/vitrix/assets/textures/healthbar/6.png new file mode 100644 index 0000000..989c4f8 Binary files /dev/null and b/vitrix/assets/textures/healthbar/6.png differ diff --git a/vitrix/assets/textures/healthbar/7.png b/vitrix/assets/textures/healthbar/7.png new file mode 100644 index 0000000..d3b3906 Binary files /dev/null and b/vitrix/assets/textures/healthbar/7.png differ diff --git a/vitrix/assets/textures/healthbar/8.png b/vitrix/assets/textures/healthbar/8.png new file mode 100644 index 0000000..44e5043 Binary files /dev/null and b/vitrix/assets/textures/healthbar/8.png differ diff --git a/vitrix/assets/textures/healthbar/9.png b/vitrix/assets/textures/healthbar/9.png new file mode 100644 index 0000000..33b7d67 Binary files /dev/null and b/vitrix/assets/textures/healthbar/9.png differ diff --git a/vitrix/assets/textures/heart.png b/vitrix/assets/textures/heart.png new file mode 100644 index 0000000..890f86d Binary files /dev/null and b/vitrix/assets/textures/heart.png differ diff --git a/vitrix/lib/UI/healthbar.py b/vitrix/lib/UI/healthbar.py new file mode 100644 index 0000000..8789aa0 --- /dev/null +++ b/vitrix/lib/UI/healthbar.py @@ -0,0 +1,60 @@ +import math +from turtle import position +from vitrix_engine import * +from lib.paths import GamePaths + + +class HealthBar(Entity): + def __init__(self, max_value): + cube = os.path.join(GamePaths.models_dir, "cube.obj") + super().__init__( + parent = camera.ui, + position = Vec2(-0.62, -0.43), + scale = (Vec2(0.835, 0.25) / 2), + rotation=Vec3(0, 0, 180), + model = cube, + ) + + self.icon = Entity(parent=camera.ui, model=cube, position=Vec2(-0.81, -0.43), + texture=os.path.join(GamePaths.textures_dir, "heart.png"), + scale=0.1, shader=None) + + self.shader = None + self.max_value = max_value + self.value = self.max_value + self.segments = 15 + self.value_per_segment = self.max_value / self.segments + + self.update_texture(self.value) + + def update_texture(self, value): + if value > self.max_value: + self.value = self.max_value + else: + self.value = value + + x = 0 + i = 0 + while x < self.value: + x += self.value_per_segment + i += 1 + self.texture = os.path.join(GamePaths.textures_dir, "healthbar", + str(i) +".png") + + def update(self): + self.update_texture(self.value) + + + +if __name__ == '__main__': + app = Ursina() + + health_bar = HealthBar(150) + + def input(key): + if key == 'e' or key == 'e hold': + health_bar.set_health(health_bar.health + 10) + if key == 'q' or key == 'q hold': + health_bar.set_health(health_bar.health - 10) + + app.run() diff --git a/vitrix/lib/UI/inventory.py b/vitrix/lib/UI/inventory.py index 4716243..1e7b7bd 100644 --- a/vitrix/lib/UI/inventory.py +++ b/vitrix/lib/UI/inventory.py @@ -1,5 +1,5 @@ -from ursina import * -from ursina.prefabs.first_person_controller import FirstPersonController +from vitrix_engine import * +from vitrix_engine.prefabs.first_person_controller import FirstPersonController diff --git a/vitrix/lib/classes/anticheat.py b/vitrix/lib/classes/anticheat.py index 50512f4..dee1759 100644 --- a/vitrix/lib/classes/anticheat.py +++ b/vitrix/lib/classes/anticheat.py @@ -19,5 +19,5 @@ def check_speed(speed: int): perform_quit() def check_health(health: int): - if health > 100: + if health > 150: perform_quit() \ No newline at end of file diff --git a/vitrix/lib/entities/bullet.py b/vitrix/lib/entities/bullet.py index 29db55e..227f39e 100644 --- a/vitrix/lib/entities/bullet.py +++ b/vitrix/lib/entities/bullet.py @@ -1,25 +1,25 @@ -import ursina +from vitrix_engine import * import os from lib.entities.enemy import Enemy, Zombie from lib.paths import GamePaths -class Bullet(ursina.Entity): +class Bullet(Entity): - def __init__(self, position: ursina.Vec3, direction: float, x_direction: float, network=False, damage: int = 10, slave=False): + def __init__(self, position: Vec3, direction: float, x_direction: float, network=False, damage: int = 10, slave=False): if network == False: self.singleplayer = True speed = 50 - dir_rad = ursina.math.radians(direction) - x_dir_rad = ursina.math.radians(x_direction) + dir_rad = math.radians(direction) + x_dir_rad = math.radians(x_direction) - self.velocity = ursina.Vec3( - ursina.math.sin(dir_rad) * ursina.math.cos(x_dir_rad), - ursina.math.sin(x_dir_rad), - ursina.math.cos(dir_rad) * ursina.math.cos(x_dir_rad) + self.velocity = Vec3( + math.sin(dir_rad) * math.cos(x_dir_rad), + math.sin(x_dir_rad), + math.cos(dir_rad) * math.cos(x_dir_rad) ) * speed #bullet_tags ={ @@ -58,7 +58,7 @@ def __init__(self, position: ursina.Vec3, direction: float, x_direction: float, def update(self): - self.position += self.velocity * ursina.time.dt + self.position += self.velocity * time.dt # self.rotation_z+=6 hit_info = self.intersects() @@ -70,4 +70,4 @@ def update(self): if self.singleplayer == False: self.network.send_health(entity) - ursina.destroy(self) + destroy(self) diff --git a/vitrix/lib/entities/crate.py b/vitrix/lib/entities/crate.py index b489788..03dfd9a 100644 --- a/vitrix/lib/entities/crate.py +++ b/vitrix/lib/entities/crate.py @@ -1,18 +1,18 @@ import os -import ursina +from vitrix_engine import * import random from lib.paths import GamePaths -class Crate(ursina.Entity): +class Crate(Entity): def __init__(self, position): super().__init__( position=position, scale=1.5, origin_y=-0.5, - model="cube", + model=os.path.join(GamePaths.models_dir, "cube.obj"), texture=os.path.join(GamePaths.textures_dir, "crate.png"), ) @@ -20,8 +20,8 @@ def __init__(self, position): self.contents = [] self.is_crate = True - self.texture.filtering = None - self.collider = ursina.BoxCollider(self, size=ursina.Vec3(1, 2, 1)) + + self.collider = BoxCollider(self, size=Vec3(1, 2, 1)) for i in range (1, random.randint(2, 4)): self.contents.append(random.choice(items_list)) diff --git a/vitrix/lib/entities/enemy.py b/vitrix/lib/entities/enemy.py index 8ed399f..df50ff5 100644 --- a/vitrix/lib/entities/enemy.py +++ b/vitrix/lib/entities/enemy.py @@ -1,35 +1,35 @@ -import ursina +from vitrix_engine import * import random zombie_names=["Peter","Harry","Sayed","Usman","Gopal","Ryan","Gerald","James","Robert","Frank","Leon","Jordan","Russell","Johny","Ankur","Carl","Suresh"] -class Enemy(ursina.Entity): - def __init__(self, position: ursina.Vec3, identifier: str, username: str): +class Enemy(Entity): + def __init__(self, position: Vec3, identifier: str, username: str): super().__init__( position=position, model="cube", origin_y=-0.5, collider="box", texture="white_cube", - color=ursina.color.color(0, 0, 1), - scale=ursina.Vec3(1, 2, 1) + color=color.color(0, 0, 1), + scale=Vec3(1, 2, 1) ) - self.gun = ursina.Entity( + self.gun = Entity( parent=self, - position=ursina.Vec3(0.55, 0.5, 0.6), - scale=ursina.Vec3(0.1, 0.2, 0.65), + position=Vec3(0.55, 0.5, 0.6), + scale=Vec3(0.1, 0.2, 0.65), model="cube", texture="white_cube", - color=ursina.color.color(0, 0, 0.4) + color=color.color(0, 0, 0.4) ) - self.name_tag = ursina.Text( + self.name_tag = Text( parent=self, text=username, - position=ursina.Vec3(0, 1.3, 0), - scale=ursina.Vec2(5, 3), + position=Vec3(0, 1.3, 0), + scale=Vec2(5, 3), billboard=True, - origin=ursina.Vec2(0, 0) + origin=Vec2(0, 0) ) self.is_enemy = True @@ -45,36 +45,36 @@ def update(self): self.health = 100 color_saturation = 1 - self.health / 100 - self.color = ursina.color.color(0, color_saturation, 1) + self.color = color.color(0, color_saturation, 1) if self.health <= 0: - ursina.destroy(self) + destroy(self) -class Zombie(ursina.Entity): - def __init__(self, position: ursina.Vec3, player): +class Zombie(Entity): + def __init__(self, position: Vec3, player): super().__init__( position=position, model="cube", origin_y=-0.5, collider="box", texture="white_cube", - color=ursina.color.color(0, 0, 1), - scale=ursina.Vec3(1, 2, 1) + color=color.color(0, 0, 1), + scale=Vec3(1, 2, 1) ) - self.growl = ursina.Audio("zombie_growl") + self.growl = Audio("zombie_growl") self.growl.loop = True self.growl.volume = 0.5 self.growl.play() - self.name_tag = ursina.Text( + self.name_tag = Text( parent=self, text=random.choice(zombie_names), #Random zombie names - position=ursina.Vec3(0, 1.3, 0), - scale=ursina.Vec2(5, 3), + position=Vec3(0, 1.3, 0), + scale=Vec2(5, 3), billboard=True, - origin=ursina.Vec2(0, 0) + origin=Vec2(0, 0) ) self.is_enemy = True @@ -91,27 +91,28 @@ def update(self): self.health = 30 color_saturation = 1 - self.health / 30 - self.color = ursina.color.color(0, color_saturation, 1) + self.color = color.color(0, color_saturation, 1) - dist = ursina.distance_xz(self.player.position, self.position) + dist = distance_xz(self.player.position, self.position) if dist > 40: pass self.look_at_2d(self.player.position, 'y') - hit_info = ursina.raycast(self.world_position + ursina.Vec3(0,1,0), self.forward, 30, ignore=(self,)) + hit_info = raycast(self.world_position + Vec3(0,1,0), self.forward, 30, ignore=(self,)) if hit_info.entity == self.player: if dist > 1.5: - self.position += self.forward * ursina.time.dt * 2 + self.position += self.forward * time.dt * 2 else: self.player.health -= 10 - ursina.Audio("hurt").play() - self.position += self.forward * ursina.time.dt * -150 + self.player.healthbar.value = self.player.health + Audio("hurt").play() + self.position += self.forward * time.dt * -150 if self.health <= 0: self.growl.stop() - ursina.Audio("splat").play() - ursina.destroy(self) + Audio("splat").play() + destroy(self) diff --git a/vitrix/lib/entities/floor.py b/vitrix/lib/entities/floor.py index 81a277c..638b949 100644 --- a/vitrix/lib/entities/floor.py +++ b/vitrix/lib/entities/floor.py @@ -1,19 +1,18 @@ import os -import ursina +from vitrix_engine import * +from lib.paths import GamePaths -class FloorCube(ursina.Entity): - base_dir = os.path.join("assets","textures") +class FloorCube(Entity): def __init__(self, position): super().__init__( position=position, scale=2, - model="cube", - texture=os.path.join(FloorCube.base_dir, "floor.png"), + model=os.path.join(GamePaths.models_dir, "cube.obj"), + texture=os.path.join(GamePaths.textures_dir, "floor.png"), collider="box" ) - self.texture.filtering = None class Floor: @@ -23,12 +22,12 @@ def __init__(self): dark2 = not dark1 for x in range(-18, 28, 2): - cube = FloorCube(ursina.Vec3(x, 0, z)) + cube = FloorCube(Vec3(x, 0, z)) if dark2: - cube.color = ursina.color.color(0, 0.2, 0.8) + cube.color = color.color(0, 0.2, 0.8) else: - cube.color = ursina.color.color(0, 0.2, 1) + cube.color = color.color(0, 0.2, 1) dark2 = not dark2 diff --git a/vitrix/lib/entities/map.py b/vitrix/lib/entities/map.py index b05beb1..ab258f9 100644 --- a/vitrix/lib/entities/map.py +++ b/vitrix/lib/entities/map.py @@ -1,11 +1,11 @@ import os -import ursina +from vitrix_engine import * from lib.paths import GamePaths from lib.entities.crate import Crate -class Wall(ursina.Entity): +class Wall(Entity): base_dir = os.path.join("assets","textures") def __init__(self, position): super().__init__( @@ -17,14 +17,14 @@ def __init__(self, position): ) self.texture.filtering = None - self.collider = ursina.BoxCollider(self, size=ursina.Vec3(1, 2, 1)) + self.collider = BoxCollider(self, size=Vec3(1, 2, 1)) -class Map(ursina.Entity): +class Map(Entity): def __init__(self): super().__init__( model=os.path.join(GamePaths.models_dir, "map1.obj"), scale=0.3 ) - self.collider = ursina.MeshCollider(self) - self.crate_one = Crate(position=ursina.Vec3(10, 1, -5)) \ No newline at end of file + self.collider = MeshCollider(self) + self.crate_one = Crate(position=Vec3(10, 1, -5)) \ No newline at end of file diff --git a/vitrix/lib/entities/player.py b/vitrix/lib/entities/player.py index 441af33..2cd0f94 100644 --- a/vitrix/lib/entities/player.py +++ b/vitrix/lib/entities/player.py @@ -1,21 +1,20 @@ import os import time -import ursina import threading -from ursina.prefabs.first_person_controller import FirstPersonController +from vitrix_engine import * +from vitrix_engine.prefabs.first_person_controller import FirstPersonController from lib.entities.bullet import Bullet -from lib.paths import GamePaths +from lib.UI.healthbar import HealthBar from lib.weapons.hammer import Hammer from lib.weapons.pistol import Pistol from lib.weapons.sword import Sword from lib.weapons.battleaxe import BattleAxe # from lib.UI.inventory import inventory -from lib.items.aid_kit import AidKit class Player(FirstPersonController): - def __init__(self, position: ursina.Vec3): + def __init__(self, position: Vec3): super().__init__( position=position, model="cube", @@ -29,9 +28,7 @@ def __init__(self, position: ursina.Vec3): self.thirdperson = False - self.cursor.color = ursina.color.rgb(255, 0, 0) - - self.pew = ursina.Audio("pew", autoplay=False) + self.pew = Audio("pew", autoplay=False) self.pew.volume = 0.2 self.gun = Pistol() @@ -46,45 +43,28 @@ def __init__(self, position: ursina.Vec3): self.item_order = ["gun", "hammer", "sword", "axe"] self.holding = "gun" - self.healthbar_pos = ursina.Vec2(0, 0.45) - self.healthbar_size = ursina.Vec2(0.8, 0.04) - self.healthbar_bg = ursina.Entity( - parent=ursina.camera.ui, - model="quad", - color=ursina.color.rgb(255, 0, 0), - position=self.healthbar_pos, - scale=self.healthbar_size - ) - self.healthbar = ursina.Entity( - parent=ursina.camera.ui, - model="quad", - color=ursina.color.rgb(0, 255, 0), - position=self.healthbar_pos, - scale=self.healthbar_size - ) - - self.pause_text = ursina.Text( + self.pause_text = Text( ignore_paused=True, text="Paused", enabled=False, - position=ursina.Vec2(0, .3), + position=Vec2(0, .3), scale=3) - self.reload_warning_text = ursina.Text( + self.reload_warning_text = Text( text="Please reload!", enabled=False, scale=2) - self.exit_button = ursina.Button( + self.exit_button = Button( ignore_paused=True, text = "Quit Game", scale=0.15, - on_click=ursina.Sequence(ursina.Wait(.01), ursina.Func(os._exit, 0)) + on_click=Sequence(Wait(.01), Func(os._exit, 0)) ) - self.rounds_counter = ursina.Text( + self.rounds_counter = Text( text="Rounds Left: 5", - position=ursina.Vec2(.5, .47), + position=Vec2(.5, .47), scale=2 ) @@ -92,8 +72,10 @@ def __init__(self, position: ursina.Vec3): self.reload_warning_text.disable() self.exit_button.disable() + self.health = 150 + self.healthbar = HealthBar(self.health) + self.rounds_left = 5 - self.health = 100 self.paused = False self.shots_left = 5 self.death_message_shown = False @@ -114,7 +96,7 @@ def reload(self): self.rounds_counter.text = "Rounds Left: 0" return - ursina.Audio("reload.wav") + Audio("reload.wav") time.sleep(3) self.shots_left = 5 self.speed = 7 @@ -129,10 +111,10 @@ def input(self, key): if key == "f1": # Third person if self.thirdperson: # Check if it's enabled self.thirdperson = False - ursina.camera.z = -0 + camera.z = -0 else: self.thirdperson = True - ursina.camera.z = -8 + camera.z = -8 if key == "f": # Switch item held if self.gun.enabled: @@ -188,16 +170,16 @@ def input(self, key): threading.Thread(target=self.hide_reload_warning).start() return self.gun.on_cooldown = True - bullet_pos = self.position + ursina.Vec3(0, 2, 0) + bullet_pos = self.position + Vec3(0, 2, 0) self.pew.play() bullet = Bullet(bullet_pos, self.world_rotation_y, -self.camera_pivot.world_rotation_x) self.shots_left -= 1 - ursina.destroy(bullet, delay=4) - ursina.invoke(setattr, self.gun, 'on_cooldown', False, delay=.25) + destroy(bullet, delay=4) + invoke(setattr, self.gun, 'on_cooldown', False, delay=.25) elif self.sword.enabled or self.axe.enabled: - slash = ursina.Audio("swing") + slash = Audio("swing") slash.play() - hit_info = ursina.raycast(self.world_position + ursina.Vec3(0,1,0), self.forward, 30, ignore=(self,)) + hit_info = raycast(self.world_position + Vec3(0,1,0), self.forward, 30, ignore=(self,)) try: if hit_info.entity.is_enemy: if (hit_info.entity.health - 20) <= 0: @@ -208,18 +190,18 @@ def input(self, key): if key == "right mouse down": - hit_info = ursina.raycast(self.world_position + ursina.Vec3(0,1,0), self.forward, 30, ignore=(self,)) + hit_info = raycast(self.world_position + Vec3(0,1,0), self.forward, 30, ignore=(self,)) try: if hit_info.entity.is_crate and self.hammer.enabled: print(hit_info.entity.contents) - ursina.destroy(hit_info.entity) + destroy(hit_info.entity) if hit_info.entity.is_aid_kit: print("Healing...") self.restore_health(hit_info.entity.health_restore) - ursina.destroy(hit_info.entity) + destroy(hit_info.entity) if hit_info.entity.is_ammo: self.restore_rounds(5) - ursina.destroy(hit_info.entity) + destroy(hit_info.entity) except: pass @@ -228,53 +210,54 @@ def death(self): self.on_disable() - ursina.Audio("death").play() # Play death sound + Audio("death").play() # Play death sound - ursina.destroy(self.gun) + destroy(self.gun) + destroy(self.healthbar.icon) + destroy(self.healthbar) self.rotation = 0 self.camera_pivot.world_rotation_x = -45 - self.world_position = ursina.Vec3(0, 7, -35) - self.cursor.color = ursina.color.rgb(0, 0, 0, a=0) + self.world_position = Vec3(0, 7, -35) + self.cursor.color = color.rgb(0, 0, 0, a=0) - self.dead_text = ursina.Text( + self.dead_text = Text( text="You are dead!", - color=ursina.color.rgb(0, 0, 0, 255), - origin=ursina.Vec2(0, 0), - position=ursina.Vec2(0, .2), + color=color.rgb(0, 0, 0, 255), + origin=Vec2(0, 0), + position=Vec2(0, .2), scale=3 ) - self.respawn_button = ursina.Button( + self.respawn_button = Button( text = "Respawn", scale=0.15, - on_click=ursina.Sequence(ursina.Wait(.01), ursina.Func(self.respawn)) + on_click=Sequence(Wait(.01), Func(self.respawn)) ) - self.exit_button = ursina.Button( - text = "Quit Game", - position = ursina.Vec2(0, -.2), - scale=0.15, - on_click=ursina.Sequence(ursina.Wait(.01), ursina.Func(os._exit, 0)) - ) + self.exit_button.position = Vec2(0, -.2) def respawn(self): self.death_message_shown = False self.on_enable() self.gun = Pistol() - self.rotation = ursina.Vec3(0,0,0) + self.rotation = Vec3(0,0,0) self.camera_pivot.world_rotation_x = 0 - self.world_position = ursina.Vec3(0,3,0) - self.health = 100 + self.world_position = Vec3(0,3,0) + self.exit_button.position = Vec2(0, 0) + self.health = 150 + self.healthbar = HealthBar(self.health) self.respawn_button.disable() self.dead_text.disable() self.exit_button.disable() def restore_health(self, amount: int): - if self.health + amount > 100: - self.health = 100 + if self.health + amount > 150: + self.health = 150 else: self.health += amount - + + self.healthbar.value = self.health + def restore_rounds(self, amount: int): if self.rounds_left + amount > 15: self.rounds_left = 15 @@ -284,10 +267,8 @@ def restore_rounds(self, amount: int): self.rounds_counter.text = "Rounds Left: " + str(self.rounds_left) def update(self): - self.healthbar.scale_x = self.health / 100 * self.healthbar_size.x - if self.y < -10: - self.position = ursina.Vec3(0, 2, 0) + self.position = Vec3(0, 2, 0) if self.health <= 0: # Check if player is dead if not self.death_message_shown: diff --git a/vitrix/lib/items/aid_kit.py b/vitrix/lib/items/aid_kit.py index 94fc73c..780f778 100644 --- a/vitrix/lib/items/aid_kit.py +++ b/vitrix/lib/items/aid_kit.py @@ -1,4 +1,4 @@ -from ursina import * +from vitrix_engine import * from lib.paths import GamePaths import random @@ -15,4 +15,4 @@ def __init__(self, position: tuple): self.is_crate = False self.is_aid_kit = True self.collider = MeshCollider(self) - self.health_restore = random.randint(27,34) # amount of health to give to player + self.health_restore = random.randint(50, 80) # amount of health to give to player diff --git a/vitrix/lib/items/ammo.py b/vitrix/lib/items/ammo.py index 00ff9d4..3dd3709 100644 --- a/vitrix/lib/items/ammo.py +++ b/vitrix/lib/items/ammo.py @@ -1,4 +1,4 @@ -from ursina import * +from vitrix_engine import * from lib.paths import GamePaths import random diff --git a/vitrix/lib/weapons/battleaxe.py b/vitrix/lib/weapons/battleaxe.py index 7ba9d32..1a4177e 100644 --- a/vitrix/lib/weapons/battleaxe.py +++ b/vitrix/lib/weapons/battleaxe.py @@ -1,5 +1,5 @@ import os -from ursina import * +from vitrix_engine import * from lib.paths import GamePaths class BattleAxe(Entity): diff --git a/vitrix/lib/weapons/hammer.py b/vitrix/lib/weapons/hammer.py index 4e66ef7..81be483 100644 --- a/vitrix/lib/weapons/hammer.py +++ b/vitrix/lib/weapons/hammer.py @@ -1,5 +1,5 @@ import os -from ursina import * +from vitrix_engine import * from lib.paths import GamePaths class Hammer(Entity): diff --git a/vitrix/lib/weapons/pistol.py b/vitrix/lib/weapons/pistol.py index 9d18d3e..21ed586 100644 --- a/vitrix/lib/weapons/pistol.py +++ b/vitrix/lib/weapons/pistol.py @@ -1,5 +1,5 @@ import os -from ursina import * +from vitrix_engine import * from lib.paths import GamePaths class Pistol(Entity): diff --git a/vitrix/lib/weapons/sword.py b/vitrix/lib/weapons/sword.py index 85e89b9..aad927c 100644 --- a/vitrix/lib/weapons/sword.py +++ b/vitrix/lib/weapons/sword.py @@ -1,5 +1,5 @@ import os -from ursina import * +from vitrix_engine import * from lib.paths import GamePaths class Sword(Entity): diff --git a/vitrix/menu.py b/vitrix/menu.py index 608af9b..2937fb9 100644 --- a/vitrix/menu.py +++ b/vitrix/menu.py @@ -1,5 +1,5 @@ import os -import ursina +from vitrix_engine import * import platform import threading @@ -41,23 +41,23 @@ def start_singleplayer(): def playBackgroundMusic(): global bgmusic - bgmusic = ursina.Audio("background-music") + bgmusic = Audio("background-music") bgmusic.loop = True bgmusic.play() -class LoadingWheel(ursina.Entity): +class LoadingWheel(Entity): def __init__(self, **kwargs): super().__init__() - self.parent = ursina.camera.ui - self.point = ursina.Entity(parent=self, model=ursina.Circle(24, mode='point', thickness=.03), color=ursina.color.light_gray, y=.75, scale=2, texture='circle') - self.point2 = ursina.Entity(parent=self, model=ursina.Circle(12, mode='point', thickness=.03), color=ursina.color.light_gray, y=.75, scale=1, texture='circle') + self.parent = camera.ui + self.point = Entity(parent=self, model=Circle(24, mode='point', thickness=.03), color=color.light_gray, y=.75, scale=2, texture='circle') + self.point2 = Entity(parent=self, model=Circle(12, mode='point', thickness=.03), color=color.light_gray, y=.75, scale=1, texture='circle') self.scale = .025 - self.text_entity = ursina.Text(world_parent=self, text='loading...', origin=(0,1.5), color=ursina.color.light_gray) + self.text_entity = Text(world_parent=self, text='loading...', origin=(0,1.5), color=color.light_gray) self.y = -.25 - self.bg = ursina.Entity(parent=self, model='quad', scale_x=ursina.camera.aspect_ratio, color=ursina.color.black, z=1) + self.bg = Entity(parent=self, model='quad', scale_x=camera.aspect_ratio, color=color.black, z=1) self.bg.scale *= 400 for key, value in kwargs.items(): @@ -69,9 +69,9 @@ def update(self): self.point2.rotation_y += 3 -class MenuButton(ursina.Button): +class MenuButton(Button): def __init__(self, text='', **kwargs): - super().__init__(text, scale=(.25, .075), highlight_color=ursina.color.gray, **kwargs) + super().__init__(text, scale=(.25, .075), highlight_color=color.gray, **kwargs) for key, value in kwargs.items(): setattr(self, key ,value) @@ -79,13 +79,13 @@ def __init__(self, text='', **kwargs): def load_menu(): button_spacing = .075 * 1.25 - menu_parent = ursina.Entity(parent=ursina.camera.ui, y=.15) - main_menu = ursina.Entity(parent=menu_parent) - load_menu = ursina.Entity(parent=menu_parent) - options_menu = ursina.Entity(parent=menu_parent) + menu_parent = Entity(parent=camera.ui, y=.15) + main_menu = Entity(parent=menu_parent) + load_menu = Entity(parent=menu_parent) + options_menu = Entity(parent=menu_parent) - state_handler = ursina.Animator({ + state_handler = Animator({ 'main_menu' : main_menu, 'load_menu' : load_menu, 'options_menu' : options_menu, @@ -94,9 +94,9 @@ def load_menu(): main_menu.buttons = [ - MenuButton('Start', on_click=ursina.Func(setattr, state_handler, 'state', 'load_menu')), - MenuButton('Options', on_click=ursina.Func(setattr, state_handler, 'state', 'options_menu')), - MenuButton('Quit', on_click=ursina.Sequence(ursina.Wait(.01), ursina.Func(ursina.sys.exit))), + MenuButton('Start', on_click=Func(setattr, state_handler, 'state', 'load_menu')), + MenuButton('Options', on_click=Func(setattr, state_handler, 'state', 'options_menu')), + MenuButton('Quit', on_click=Sequence(Wait(.01), Func(sys.exit))), ] for i, e in enumerate(main_menu.buttons): e.parent = main_menu @@ -105,29 +105,22 @@ def load_menu(): singleplayer_btn = MenuButton(parent=load_menu, text="Singleplayer", - on_click=ursina.Func(start_singleplayer), y=(i*button_spacing)) + on_click=Func(start_singleplayer), y=(i*button_spacing)) multiplayer_btn = MenuButton(parent=load_menu, text="Multiplayer", - on_click=ursina.Func(start_multiplayer), y=((i-1)*button_spacing)) + on_click=Func(start_multiplayer), y=((i-1)*button_spacing)) load_menu.back_button = MenuButton(parent=load_menu, text='back', y=((-i-2)*button_spacing), - on_click=ursina.Func(setattr, state_handler, + on_click=Func(setattr, state_handler, 'state', 'main_menu')) - preview_text = ursina.Text(parent=options_menu, x=.275, y=.25, text='Preview text', + preview_text = Text(parent=options_menu, x=.275, y=.25, text='Preview text', origin=(-.5,0)) - for t in [e for e in ursina.scene.entities if isinstance(e, ursina.Text)]: + for t in [e for e in scene.entities if isinstance(e, Text)]: t.original_scale = t.scale - text_scale_slider = ursina.Slider(0, 2, default=1, step=.1, dynamic=True, text='Text Size:', - parent=options_menu, x=-.25) - def set_text_scale(): - for t in [e for e in ursina.scene.entities if isinstance(e, ursina.Text) and hasattr(e, 'original_scale')]: - t.scale = t.original_scale * text_scale_slider.value - text_scale_slider.on_value_changed = set_text_scale - # fov_slider = Slider(20, 130, default=80, step=1 , dynamic=True, text='FOV:',) @@ -136,11 +129,7 @@ def set_text_scale(): # fov_slider.on_value_changed = set_fov options_back = MenuButton(parent=options_menu, text='Back', x=-.25, origin_x=-.5, - on_click=ursina.Func(setattr, state_handler, 'state', 'main_menu')) - - for i, e in enumerate((text_scale_slider, options_back)): - e.y = -i * button_spacing - + on_click=Func(setattr, state_handler, 'state', 'main_menu')) for menu in (main_menu, load_menu, options_menu): @@ -162,8 +151,8 @@ def animate_in_menu(menu=menu): menu.on_enable = animate_in_menu - background = ursina.Entity(model='quad', texture='background', parent=ursina.camera.ui, - scale=(ursina.camera.aspect_ratio), color=ursina.color.white, z=1) + background = Entity(model="quad", texture='background', parent=camera.ui, + scale=(camera.aspect_ratio), color=color.white, z=1) playBackgroundMusic() @@ -173,16 +162,16 @@ def animate_in_menu(menu=menu): e.enabled = True -app = ursina.Ursina() +app = Ursina() loading_screen = LoadingWheel(enabled=False) -ursina.window.show_ursina_splash = False -ursina.window.exit_button.visible = False -ursina.window.title = "Vitrix" -ursina.window.borderless = False +window.show_ursina_splash = False +window.exit_button.visible = False +window.title = "Vitrix Menu" +window.borderless = False default_width = 600 # would be migrated to settings.json default_height = 600 -ursina.window.size = (default_width, default_height) -ursina.window.fullscreen = True +window.size = (default_width, default_height) +window.fullscreen = False loading_screen.enabled = True threading.Thread(target=load_menu).start() diff --git a/vitrix/multiplayer.py b/vitrix/multiplayer.py index feadc20..18cd78f 100644 --- a/vitrix/multiplayer.py +++ b/vitrix/multiplayer.py @@ -17,8 +17,8 @@ os._exit(1) import threading -import ursina -from ursina.shaders.basic_lighting_shader import basic_lighting_shader +from vitrix_engine import * +from vitrix_engine.shaders.basic_lighting_shader import basic_lighting_shader from lib.UI.notification import notify from lib.classes.network import Network @@ -89,24 +89,39 @@ break -app = ursina.Ursina() -ursina.window.borderless = False -ursina.window.title = "Vitrix - Multiplayer" -ursina.window.exit_button.visible = False -ursina.window.fullscreen = True +app = Ursina() +window.borderless = False +window.title = "Vitrix - Multiplayer" +window.exit_button.visible = False +window.fullscreen = True floor = Floor() map = Map() -sky = ursina.Entity( - model="sphere", +sky = Entity( + model=os.path.join("assets", "models", "sphere.obj"), texture=os.path.join("assets", "textures", "sky.png"), scale=9999, double_sided=True ) -ursina.Entity.default_shader = basic_lighting_shader +Entity.default_shader = basic_lighting_shader -player = Player(ursina.Vec3(0, 1, 0)) +player = Player(Vec3(0, 1, 0)) + +def toggle_fullscreen(): + if window.fullscreen: + window.fullscreen = False + else: + window.fullscreen = True + +fullscreen_button = Button( + text="Toggle Fullscreen", + position=Vec2(.2, 0), + scale=0.15, + enabled=False, + on_click=Func(toggle_fullscreen) + ) +fullscreen_button.fit_to_text() prev_pos = player.world_position prev_dir = player.world_rotation_y @@ -129,7 +144,7 @@ def receive(): enemy_id = info["id"] if info["joined"]: - new_enemy = Enemy(ursina.Vec3(*info["position"]), enemy_id, info["username"]) + new_enemy = Enemy(Vec3(*info["position"]), enemy_id, info["username"]) new_enemy.health = info["health"] enemies.append(new_enemy) continue @@ -146,19 +161,19 @@ def receive(): if info["left"]: enemies.remove(enemy) - ursina.destroy(enemy) + destroy(enemy) continue - enemy.world_position = ursina.Vec3(*info["position"]) + enemy.world_position = Vec3(*info["position"]) enemy.rotation_y = info["rotation"] elif info["object"] == "bullet": - b_pos = ursina.Vec3(*info["position"]) + b_pos = Vec3(*info["position"]) b_dir = info["direction"] b_x_dir = info["x_direction"] b_damage = info["damage"] new_bullet = Bullet(b_pos, b_dir, b_x_dir, n, b_damage, slave=True) - ursina.destroy(new_bullet, delay=2) + destroy(new_bullet, delay=2) elif info["object"] == "health_update": enemy_id = info["id"] diff --git a/vitrix/singleplayer.py b/vitrix/singleplayer.py index 23dc706..b9e504f 100644 --- a/vitrix/singleplayer.py +++ b/vitrix/singleplayer.py @@ -1,5 +1,5 @@ import os -import ursina +from vitrix_engine import * from lib.entities.floor import Floor from lib.entities.map import Map @@ -9,48 +9,48 @@ from lib.items.aid_kit import AidKit from lib.items.ammo import Ammo -from ursina.shaders.basic_lighting_shader import basic_lighting_shader +from vitrix_engine.shaders.basic_lighting_shader import basic_lighting_shader -app = ursina.Ursina() +app = Ursina() # The inventory needs to load after ursina app() from lib.UI.inventory import * -ursina.window.borderless = False -ursina.window.exit_button.visible = False +window.borderless = False +window.exit_button.visible = False paused = False -ursina.window.title = "Vitrix - Singleplayer" -ursina.Entity.default_shader = basic_lighting_shader -ursina.window.fullscreen = True +window.title = "Vitrix - Singleplayer" +Entity.default_shader = basic_lighting_shader +window.fullscreen = True floor = Floor() map = Map() -sky = ursina.Entity( - model="sphere", +sky = Entity( + model=os.path.join("assets", "models", "sphere.obj"), texture=os.path.join("assets", "textures", "sky.png"), scale=9999, double_sided=True ) def toggle_fullscreen(): - if ursina.window.fullscreen: - ursina.window.fullscreen = False + if window.fullscreen: + window.fullscreen = False else: - ursina.window.fullscreen = True + window.fullscreen = True -fullscreen_button = ursina.Button( +fullscreen_button = Button( text="Toggle Fullscreen", - position=ursina.Vec2(.2, 0), + position=Vec2(.2, 0), scale=0.15, enabled=False, - on_click=ursina.Func(toggle_fullscreen) + on_click=Func(toggle_fullscreen) ) fullscreen_button.fit_to_text() -player = Player(ursina.Vec3(0, 1, 0)) -aid_kit = AidKit(ursina.Vec3(10, 1.6, 3)) -ammo = Ammo(ursina.Vec3(15, 1, 3)) +player = Player(Vec3(0, 1, 0)) +aid_kit = AidKit(Vec3(10, 1.6, 3)) +ammo = Ammo(Vec3(15, 1, 3)) enemies = [] @@ -63,9 +63,9 @@ def toggle_fullscreen(): # "alt-f4":"Exit game", # "1":"Switch ammo" #} -#controls_text = ursina.Text( +#controls_text = Text( # text= "".join(f"{key} = {value}\n" for key,value in controls_dict.items() ), -# origin=ursina.Vec2(2.8, -3), +# origin=Vec2(2.8, -3), # scale=1 # ) #def cycleAmmo(bullet_tag): # default bullet tag is int 1 @@ -83,12 +83,12 @@ def input(key): fullscreen_button.enable() if key == "l": - enemies.append(Zombie(ursina.Vec3(0, 1.5, 0), player)) + enemies.append(Zombie(Vec3(0, 1.5, 0), player)) -sun = ursina.DirectionalLight() -sun.look_at(ursina.Vec3(1,-1,-1)) +sun = DirectionalLight() +sun.look_at(Vec3(1,-1,-1)) if __name__ == "__main__": - app.run(info=False) \ No newline at end of file + app.run(info=False)