public override void Init() { base.Init(); Vector3 worldScale = WorldScale; m_scaledShape = new BoxShape(m_width * worldScale.X, m_height * worldScale.Y, m_length * worldScale.Z); m_scaledStaticCollidable = m_scaledShape.GetCollidableInstance(); Owner.MarkPhysicsDirty(); }
public override void SpawnBody() { PreHandleSpawn(); base.SpawnBody(); if (mode == ModelCollisionMode.PRECISE) { Offset = InternalOffset; } BEPUutilities.Vector3 offs = Offset.ToBVector(); transform = Matrix4d.CreateTranslation(ClientUtilities.ConvertD(Offset)); List<BEPUutilities.Vector3> tvecs = TheClient.Models.Handler.GetVertices(model.Original); if (tvecs.Count == 0) { ModelMin = new BEPUutilities.Vector3(0, 0, 0); ModelMax = new BEPUutilities.Vector3(0, 0, 0); } else { ModelMin = tvecs[0]; ModelMax = tvecs[0]; foreach (BEPUutilities.Vector3 vec in tvecs) { BEPUutilities.Vector3 tvec = vec + offs; if (tvec.X < ModelMin.X) { ModelMin.X = tvec.X; } if (tvec.Y < ModelMin.Y) { ModelMin.Y = tvec.Y; } if (tvec.Z < ModelMin.Z) { ModelMin.Z = tvec.Z; } if (tvec.X > ModelMax.X) { ModelMax.X = tvec.X; } if (tvec.Y > ModelMax.Y) { ModelMax.Y = tvec.Y; } if (tvec.Z > ModelMax.Z) { ModelMax.Z = tvec.Z; } } } if (GenBlockShadows) { double tx = ModelMax.X - ModelMin.X; double ty = ModelMax.Y - ModelMin.Y; BoxShape bs = new BoxShape(tx, ty, ModelMax.Z - ModelMin.Z); EntityCollidable tempCast = bs.GetCollidableInstance(); tempCast.LocalPosition = (ModelMax + ModelMin) * 0.5f + Body.Position; RigidTransform def = RigidTransform.Identity; tempCast.UpdateBoundingBoxForTransform(ref def); ShadowCastShape = tempCast.BoundingBox; BEPUutilities.Vector3 size = ShadowCastShape.Max - ShadowCastShape.Min; ShadowRadiusSquaredXY = size.X * size.X + size.Y * size.Y; } }