From 5c18ebf42470038720dffcf676bf3f9dd174d443 Mon Sep 17 00:00:00 2001 From: dahlia Date: Wed, 29 Jun 2011 17:36:41 -0700 Subject: Allow physics proxy generation for meshes using new asset format. Fix an invalid cast exception while decoding new mesh asset format. --- OpenSim/Region/Physics/Meshing/Meshmerizer.cs | 21 +++++++++++++++++---- 1 file changed, 17 insertions(+), 4 deletions(-) (limited to 'OpenSim/Region/Physics/Meshing') diff --git a/OpenSim/Region/Physics/Meshing/Meshmerizer.cs b/OpenSim/Region/Physics/Meshing/Meshmerizer.cs index 99b2d84..a5fe45b 100644 --- a/OpenSim/Region/Physics/Meshing/Meshmerizer.cs +++ b/OpenSim/Region/Physics/Meshing/Meshmerizer.cs @@ -291,7 +291,14 @@ namespace OpenSim.Region.Physics.Meshing { try { - meshOsd = (OSDMap)OSDParser.DeserializeLLSDBinary(data); + OSD osd = OSDParser.DeserializeLLSDBinary(data); + if (osd is OSDMap) + meshOsd = (OSDMap)osd; + else + { + m_log.Warn("[Mesh}: unable to cast mesh asset to OSDMap"); + return null; + } } catch (Exception e) { @@ -302,11 +309,17 @@ namespace OpenSim.Region.Physics.Meshing if (meshOsd is OSDMap) { + OSDMap physicsParms = null; OSDMap map = (OSDMap)meshOsd; - OSDMap physicsParms = (OSDMap)map["physics_shape"]; // old asset format - - if (physicsParms.Count == 0) + if (map.ContainsKey("physics_shape")) + physicsParms = (OSDMap)map["physics_shape"]; // old asset format + else if (map.ContainsKey("physics_mesh")) physicsParms = (OSDMap)map["physics_mesh"]; // new asset format + if (physicsParms == null) + { + m_log.Warn("[Mesh]: no recognized physics mesh found in mesh asset"); + return null; + } int physOffset = physicsParms["offset"].AsInteger() + (int)start; int physSize = physicsParms["size"].AsInteger(); -- cgit v1.1