Beispiel #1
0
        public override PhysicsShapeHandle CreatePhysicsShape(out Vector3 shapeOffset)
        {
            shapeOffset = Vector3.ZERO;

            if (this.Transform == Transform.DEFAULT_TRANSFORM)
            {
                var potentialResult = WorldModelCache.GetCachedModel(ModelFileName);
                if (potentialResult.HasValue)
                {
                    return(potentialResult.Value);
                }
            }

            List <DefaultVertex> outVerts;
            List <uint>          outIndices;

            GetVertexDataUnscaled(out outVerts, out outIndices);

            string acdFileName = ModelFileName;

            if (MirrorX)
            {
                acdFileName = Path.GetFileNameWithoutExtension(acdFileName) + "_mirrored" + Path.GetExtension(acdFileName);
            }
            var result = PhysicsManager.CreateConcaveHullShape(
                outVerts.Select(df => df.Position),
                outIndices.Select(@uint => (int)@uint),
                new CollisionShapeOptionsDesc(Transform.Scale),
                AssetLocator.CreateACDFilePath(acdFileName)
                );

            if (this.Transform == Transform.DEFAULT_TRANSFORM)
            {
                WorldModelCache.SetCachedModel(ModelFileName, result);
            }

            return(result);
        }