void AddMass(MySlimBlock block, IDictionary <Vector3I, HkMassElement> massResults)
        {
            float mass = block.GetMass();

            if (MyFakes.ENABLE_COMPOUND_BLOCKS && block.FatBlock is MyCompoundCubeBlock)
            {
                mass = 0f;
                MyCompoundCubeBlock compoundBlock = block.FatBlock as MyCompoundCubeBlock;
                foreach (var innerBlock in compoundBlock.GetBlocks())
                {
                    mass += innerBlock.GetMass();
                    Debug.Assert(innerBlock.BlockDefinition.Size == Vector3I.One, "Invalid block found in compound block - only blocks with size 1 can be set in compound block!");
                }
            }

            var size   = (block.Max - block.Min + Vector3I.One) * block.CubeGrid.GridSize;
            var center = (block.Min + block.Max) * 0.5f * block.CubeGrid.GridSize;
            HkMassProperties massProperties = new HkMassProperties();

            massProperties = HkInertiaTensorComputer.ComputeBoxVolumeMassProperties(size / 2, mass);
            massResults[block.Position] = new HkMassElement()
            {
                Properties = massProperties, Tranform = Matrix.CreateTranslation(center)
            };
        }
Пример #2
0
        void AddMass(MySlimBlock block, IDictionary<Vector3I, HkMassElement> massResults)
        {
            float mass = block.GetMass();
            if (MyFakes.ENABLE_COMPOUND_BLOCKS && block.FatBlock is MyCompoundCubeBlock)
            {
                mass = 0f;
                MyCompoundCubeBlock compoundBlock = block.FatBlock as MyCompoundCubeBlock;
                foreach (var innerBlock in compoundBlock.GetBlocks())
                {
                    mass += innerBlock.GetMass();
                    Debug.Assert(innerBlock.BlockDefinition.Size == Vector3I.One, "Invalid block found in compound block - only blocks with size 1 can be set in compound block!");
                }
            }

            var size = (block.Max - block.Min + Vector3I.One) * block.CubeGrid.GridSize;
            var center = (block.Min + block.Max) * 0.5f * block.CubeGrid.GridSize;
            HkMassProperties massProperties = new HkMassProperties();
            massProperties = HkInertiaTensorComputer.ComputeBoxVolumeMassProperties(size / 2, mass);
            massResults[block.Position] = new HkMassElement() { Properties = massProperties, Tranform = Matrix.CreateTranslation(center) };
        }