mirror of
https://github.com/MapMakersAndProgrammers/io_scene_a3d.git
synced 2025-10-26 01:49:13 -07:00
Reuse collision mesh data blocks
This commit is contained in:
@@ -46,6 +46,10 @@ class BattleMapBlenderImporter:
|
|||||||
self.import_spawn_points = import_spawn_points
|
self.import_spawn_points = import_spawn_points
|
||||||
self.import_lightmapdata = import_lightmapdata
|
self.import_lightmapdata = import_lightmapdata
|
||||||
|
|
||||||
|
# Cache for collision meshes, don't cache triangles because they are set using unique vertices
|
||||||
|
self.collisionPlaneMesh = None
|
||||||
|
self.collisionBoxMesh = None
|
||||||
|
|
||||||
self.materials = {}
|
self.materials = {}
|
||||||
|
|
||||||
def importData(self):
|
def importData(self):
|
||||||
@@ -68,6 +72,19 @@ class BattleMapBlenderImporter:
|
|||||||
# Collision geometry
|
# Collision geometry
|
||||||
collisionObjects = []
|
collisionObjects = []
|
||||||
if self.import_collision_geom:
|
if self.import_collision_geom:
|
||||||
|
# Create collision meshes
|
||||||
|
self.collisionPlaneMesh = bpy.data.meshes.new("collisionPlane")
|
||||||
|
bm = bmesh.new()
|
||||||
|
bmesh.ops.create_grid(bm, x_segments=1, y_segments=1, size=1.0)
|
||||||
|
bm.to_mesh(self.collisionPlaneMesh)
|
||||||
|
bm.free()
|
||||||
|
|
||||||
|
self.collisionBoxMesh = bpy.data.meshes.new("collisionBox")
|
||||||
|
bm = bmesh.new()
|
||||||
|
bmesh.ops.create_cube(bm)
|
||||||
|
bm.to_mesh(self.collisionBoxMesh)
|
||||||
|
bm.free()
|
||||||
|
|
||||||
# Load collision meshes
|
# Load collision meshes
|
||||||
collisionTriangles = self.mapData.collisionGeometry.triangles + self.mapData.collisionGeometryOutsideGamingZone.triangles
|
collisionTriangles = self.mapData.collisionGeometry.triangles + self.mapData.collisionGeometryOutsideGamingZone.triangles
|
||||||
collisionTriangleObjects = self.createBlenderCollisionTriangles(collisionTriangles)
|
collisionTriangleObjects = self.createBlenderCollisionTriangles(collisionTriangles)
|
||||||
@@ -242,16 +259,8 @@ class BattleMapBlenderImporter:
|
|||||||
def createBlenderCollisionPlanes(self, collisionPlanes):
|
def createBlenderCollisionPlanes(self, collisionPlanes):
|
||||||
objects = []
|
objects = []
|
||||||
for collisionPlane in collisionPlanes:
|
for collisionPlane in collisionPlanes:
|
||||||
# Create the mesh
|
|
||||||
me = bpy.data.meshes.new("collisionPlane")
|
|
||||||
|
|
||||||
bm = bmesh.new()
|
|
||||||
bmesh.ops.create_grid(bm, x_segments=1, y_segments=1, size=1.0)
|
|
||||||
bm.to_mesh(me)
|
|
||||||
bm.free()
|
|
||||||
|
|
||||||
# Create object
|
# Create object
|
||||||
ob = bpy.data.objects.new("collisionPlane", me)
|
ob = bpy.data.objects.new("collisionPlane", self.collisionPlaneMesh)
|
||||||
ob.location = collisionPlane.position
|
ob.location = collisionPlane.position
|
||||||
ob.rotation_mode = "XYZ"
|
ob.rotation_mode = "XYZ"
|
||||||
ob.rotation_euler = collisionPlane.rotation
|
ob.rotation_euler = collisionPlane.rotation
|
||||||
@@ -264,16 +273,8 @@ class BattleMapBlenderImporter:
|
|||||||
def createBlenderCollisionBoxes(self, collisionBoxes):
|
def createBlenderCollisionBoxes(self, collisionBoxes):
|
||||||
objects = []
|
objects = []
|
||||||
for collisionBox in collisionBoxes:
|
for collisionBox in collisionBoxes:
|
||||||
# Create the mesh
|
|
||||||
me = bpy.data.meshes.new("collisionBox")
|
|
||||||
|
|
||||||
bm = bmesh.new()
|
|
||||||
bmesh.ops.create_cube(bm)
|
|
||||||
bm.to_mesh(me)
|
|
||||||
bm.free()
|
|
||||||
|
|
||||||
# Create object
|
# Create object
|
||||||
ob = bpy.data.objects.new("collisionBox", me)
|
ob = bpy.data.objects.new("collisionBox", self.collisionBoxMesh)
|
||||||
ob.location = collisionBox.position
|
ob.location = collisionBox.position
|
||||||
ob.rotation_mode = "XYZ"
|
ob.rotation_mode = "XYZ"
|
||||||
ob.rotation_euler = collisionBox.rotation
|
ob.rotation_euler = collisionBox.rotation
|
||||||
|
|||||||
Reference in New Issue
Block a user