mbEditorPro2.0 release
This commit is contained in:
1 parent
30375c8413
commit
942b33a252
110 files changed
+3543
-1089
No files matched your search
@@ -0,0 +1,113 @@
|
||||
# • ▌ ▄ ·. ▄▄▄▄· ▄▄▄ .·▄▄▄▄ ▪ ▄▄▄▄▄ ▄▄▄ ▄▄▄·▄▄▄
|
||||
# ·██ ▐███▪▐█ ▀█▪ ▀▄.▀·██▪ ██ ██ •██ ▪ ▀▄ █· ▐█ ▄█▀▄ █·▪
|
||||
# ▐█ ▌▐▌▐█·▐█▀▀█▄ ▐▀▀▪▄▐█· ▐█▌▐█· ▐█.▪ ▄█▀▄ ▐▀▀▄ ██▀·▐▀▀▄ ▄█▀▄
|
||||
# ██ ██▌▐█▌██▄▪▐█ ▐█▄▄▌██. ██ ▐█▌ ▐█▌·▐█▌.▐▌▐█•█▌ ▐█▪·•▐█•█▌▐█▌.▐▌
|
||||
# ▀▀ █▪▀▀▀·▀▀▀▀ ▀▀▀ ▀▀▀▀▀• ▀▀▀ ▀▀▀ ▀█▄▀▪.▀ ▀ .▀ .▀ ▀ ▀█▄▀▪
|
||||
# Magicbane Emulator Project © 2013 - 2022
|
||||
# www.magicbane.com
|
||||
|
||||
from collections import OrderedDict
|
||||
|
||||
from arcane.util import ResStream
|
||||
|
||||
|
||||
class ArcMesh:
|
||||
def load_binary(self, stream: ResStream):
|
||||
self.mesh_name = stream.read_string()
|
||||
self.mesh_distance = stream.read_float()
|
||||
self.mesh_start_point = stream.read_tuple()
|
||||
self.mesh_end_point = stream.read_tuple()
|
||||
self.mesh_ref_point = stream.read_tuple()
|
||||
self.mesh_use_face_normals = stream.read_bool()
|
||||
self.mesh_use_tangent_basis = stream.read_bool()
|
||||
num_vertices = stream.read_dword()
|
||||
self.mesh_vertices = [stream.read_tuple() for _ in range(num_vertices)]
|
||||
num_other_vertices = stream.read_dword()
|
||||
self.mesh_normals = [stream.read_tuple() for _ in range(num_other_vertices)]
|
||||
num = stream.read_dword()
|
||||
self.mesh_uv = [
|
||||
[
|
||||
stream.read_float(),
|
||||
stream.read_float(),
|
||||
] for _ in range(num)
|
||||
]
|
||||
if self.mesh_use_tangent_basis:
|
||||
num_tangent_vertices = stream.read_dword()
|
||||
self.mesh_tanget_vertices = [stream.read_tuple() for _ in range(num_tangent_vertices)]
|
||||
num_indicies = stream.read_dword()
|
||||
self.mesh_indices = [stream.read_word() for _ in range(num_indicies)]
|
||||
num = stream.read_dword()
|
||||
self.mesh_extra_indices = [
|
||||
[
|
||||
stream.read_dword(),
|
||||
stream.read_dword(),
|
||||
[stream.read_word() for _ in range(stream.read_dword())],
|
||||
] for _ in range(num)
|
||||
]
|
||||
|
||||
def save_binary(self, stream: ResStream):
|
||||
stream.write_string(self.mesh_name)
|
||||
stream.write_float(self.mesh_distance)
|
||||
stream.write_tuple(self.mesh_start_point)
|
||||
stream.write_tuple(self.mesh_end_point)
|
||||
stream.write_tuple(self.mesh_ref_point)
|
||||
stream.write_bool(self.mesh_use_face_normals)
|
||||
stream.write_bool(self.mesh_use_tangent_basis)
|
||||
stream.write_dword(len(self.mesh_vertices))
|
||||
for i in range(len(self.mesh_vertices)):
|
||||
stream.write_tuple(self.mesh_vertices[i])
|
||||
stream.write_dword(len(self.mesh_normals))
|
||||
for i in range(len(self.mesh_normals)):
|
||||
stream.write_tuple(self.mesh_normals[i])
|
||||
stream.write_dword(len(self.mesh_uv))
|
||||
for i in range(len(self.mesh_uv)):
|
||||
stream.write_float(self.mesh_uv[i][0])
|
||||
stream.write_float(self.mesh_uv[i][1])
|
||||
if self.mesh_use_tangent_basis:
|
||||
stream.write_dword(len(self.mesh_tanget_vertices))
|
||||
for i in range(len(self.mesh_tanget_vertices)):
|
||||
stream.write_tuple(self.mesh_tanget_vertices[i])
|
||||
stream.write_dword(len(self.mesh_indices))
|
||||
for i in range(len(self.mesh_indices)):
|
||||
stream.write_word(self.mesh_indices[i])
|
||||
stream.write_dword(len(self.mesh_extra_indices))
|
||||
for i in range(len(self.mesh_extra_indices)):
|
||||
stream.write_dword(self.mesh_extra_indices[i][0])
|
||||
stream.write_dword(self.mesh_extra_indices[i][1])
|
||||
stream.write_dword(len(self.mesh_extra_indices[i][2]))
|
||||
for j in range(len(self.mesh_extra_indices[i][2])):
|
||||
stream.write_word(self.mesh_extra_indices[i][2][j])
|
||||
|
||||
def load_json(self, data):
|
||||
self.mesh_name = data['mesh_name']
|
||||
self.mesh_distance = data['mesh_distance']
|
||||
self.mesh_start_point = data['mesh_start_point']
|
||||
self.mesh_end_point = data['mesh_end_point']
|
||||
self.mesh_ref_point = data['mesh_ref_point']
|
||||
self.mesh_use_face_normals = data['mesh_use_face_normals']
|
||||
self.mesh_use_tangent_basis = data['mesh_use_tangent_basis']
|
||||
self.mesh_vertices = data['mesh_vertices']
|
||||
self.mesh_normals = data['mesh_normals']
|
||||
self.mesh_uv = data['mesh_uv']
|
||||
if self.mesh_use_tangent_basis:
|
||||
self.mesh_tanget_vertices = data['mesh_tanget_vertices']
|
||||
self.mesh_indices = data['mesh_indices']
|
||||
self.mesh_extra_indices = data['mesh_extra_indices']
|
||||
|
||||
def save_json(self):
|
||||
data = OrderedDict()
|
||||
data['mesh_name'] = self.mesh_name
|
||||
data['mesh_distance'] = self.mesh_distance
|
||||
data['mesh_start_point'] = self.mesh_start_point
|
||||
data['mesh_end_point'] = self.mesh_end_point
|
||||
data['mesh_ref_point'] = self.mesh_ref_point
|
||||
data['mesh_use_face_normals'] = self.mesh_use_face_normals
|
||||
data['mesh_use_tangent_basis'] = self.mesh_use_tangent_basis
|
||||
data['mesh_vertices'] = self.mesh_vertices
|
||||
data['mesh_normals'] = self.mesh_normals
|
||||
data['mesh_uv'] = self.mesh_uv
|
||||
if self.mesh_use_tangent_basis:
|
||||
data['mesh_tanget_vertices'] = self.mesh_tanget_vertices
|
||||
data['mesh_indices'] = self.mesh_indices
|
||||
data['mesh_extra_indices'] = self.mesh_extra_indices
|
||||
return data
|
||||
Reference in new issue
Block a user