public override void Initialize() { Model model = ContentManager.Get <Model>(m_modelName); Matrix boneAbsoluteTransform = BlockMesh.GetBoneAbsoluteTransform(model.FindMesh("Keg").ParentBone); FuseOffset = BlockMesh.GetBoneAbsoluteTransform(model.FindMesh("Fuse").ParentBone).Translation + new Vector3(0.5f, 0f, 0.5f); BlockMesh blockMesh = new BlockMesh(); blockMesh.AppendModelMeshPart(model.FindMesh("Keg").MeshParts[0], boneAbsoluteTransform * Matrix.CreateTranslation(0.5f, 0f, 0.5f), makeEmissive: false, flipWindingOrder: false, doubleSided: false, flipNormals: false, Color.White); m_blockMesh.AppendBlockMesh(blockMesh); if (m_isIncendiary) { m_blockMesh.TransformTextureCoordinates(Matrix.CreateTranslation(-0.25f, 0f, 0f)); } m_collisionBoxes = new BoundingBox[1] { blockMesh.CalculateBoundingBox() }; m_standaloneBlockMesh.AppendModelMeshPart(model.FindMesh("Keg").MeshParts[0], boneAbsoluteTransform * Matrix.CreateTranslation(0f, -0.5f, 0f), makeEmissive: false, flipWindingOrder: false, doubleSided: false, flipNormals: false, Color.White); if (m_isIncendiary) { m_standaloneBlockMesh.TransformTextureCoordinates(Matrix.CreateTranslation(-0.25f, 0f, 0f)); } base.Initialize(); }
public override void Initialize() { Model model = ContentManager.Get <Model>(m_modelName); Matrix boneAbsoluteTransform = BlockMesh.GetBoneAbsoluteTransform(model.FindMesh("Sign").ParentBone); Matrix boneAbsoluteTransform2 = BlockMesh.GetBoneAbsoluteTransform(model.FindMesh("Surface").ParentBone); for (int i = 0; i < 4; i++) { float radians = (float)Math.PI / 2f * (float)i; Matrix m = Matrix.CreateTranslation(0f, 0f, -15f / 32f) * Matrix.CreateRotationY(radians) * Matrix.CreateTranslation(0.5f, -0.3125f, 0.5f); BlockMesh blockMesh = new BlockMesh(); blockMesh.AppendModelMeshPart(model.FindMesh("Sign").MeshParts[0], boneAbsoluteTransform * m, makeEmissive: false, flipWindingOrder: false, doubleSided: false, flipNormals: false, Color.White); m_blockMeshes[i] = new BlockMesh(); m_blockMeshes[i].AppendBlockMesh(blockMesh); m_coloredBlockMeshes[i] = new BlockMesh(); m_coloredBlockMeshes[i].AppendBlockMesh(m_blockMeshes[i]); m_blockMeshes[i].TransformTextureCoordinates(Matrix.CreateTranslation((float)(DefaultTextureSlot % 16) / 16f, (float)(DefaultTextureSlot / 16) / 16f, 0f)); m_coloredBlockMeshes[i].TransformTextureCoordinates(Matrix.CreateTranslation((float)(m_coloredTextureSlot % 16) / 16f, (float)(m_coloredTextureSlot / 16) / 16f, 0f)); m_collisionBoxes[i] = new BoundingBox[1]; m_collisionBoxes[i][0] = blockMesh.CalculateBoundingBox(); m_surfaceMeshes[i] = new BlockMesh(); m_surfaceMeshes[i].AppendModelMeshPart(model.FindMesh("Surface").MeshParts[0], boneAbsoluteTransform2 * m, makeEmissive: false, flipWindingOrder: false, doubleSided: false, flipNormals: false, Color.White); m_surfaceNormals[i] = -m.Forward; } m_standaloneBlockMesh.AppendModelMeshPart(model.FindMesh("Sign").MeshParts[0], boneAbsoluteTransform * Matrix.CreateTranslation(0f, -0.6f, 0f), makeEmissive: false, flipWindingOrder: false, doubleSided: false, flipNormals: false, Color.White); m_standaloneColoredBlockMesh.AppendBlockMesh(m_standaloneBlockMesh); m_standaloneBlockMesh.TransformTextureCoordinates(Matrix.CreateTranslation((float)(DefaultTextureSlot % 16) / 16f, (float)(DefaultTextureSlot / 16) / 16f, 0f)); m_standaloneColoredBlockMesh.TransformTextureCoordinates(Matrix.CreateTranslation((float)(m_coloredTextureSlot % 16) / 16f, (float)(m_coloredTextureSlot / 16) / 16f, 0f)); base.Initialize(); }
public override void Initialize() { Model model = ContentManager.Get <Model>("Models/Battery"); Matrix boneAbsoluteTransform = BlockMesh.GetBoneAbsoluteTransform(model.FindMesh("Battery").ParentBone); m_standaloneBlockMesh.AppendModelMeshPart(model.FindMesh("Battery").MeshParts[0], boneAbsoluteTransform * Matrix.CreateTranslation(0f, -0.5f, 0f), makeEmissive: false, flipWindingOrder: false, doubleSided: false, flipNormals: false, Color.White); m_blockMesh.AppendModelMeshPart(model.FindMesh("Battery").MeshParts[0], boneAbsoluteTransform * Matrix.CreateTranslation(0.5f, 0f, 0.5f), makeEmissive: false, flipWindingOrder: false, doubleSided: false, flipNormals: false, Color.White); m_collisionBoxes[0] = m_blockMesh.CalculateBoundingBox(); }
public override void Initialize() { Model model = ContentManager.Get <Model>(m_modelName); Matrix boneAbsoluteTransform = BlockMesh.GetBoneAbsoluteTransform(model.FindMesh("Sign").ParentBone); Matrix boneAbsoluteTransform2 = BlockMesh.GetBoneAbsoluteTransform(model.FindMesh("Post").ParentBone); Matrix boneAbsoluteTransform3 = BlockMesh.GetBoneAbsoluteTransform(model.FindMesh("Surface").ParentBone); for (int i = 0; i < 16; i++) { bool hanging = GetHanging(i); Matrix m = Matrix.CreateRotationY((float)GetDirection(i) * (float)Math.PI / 4f) * Matrix.CreateTranslation(0.5f, 0f, 0.5f); if (hanging) { m *= Matrix.CreateScale(1f, -1f, 1f) * Matrix.CreateTranslation(0f, 1f, 0f); } m_directions[i] = m.Forward; BlockMesh blockMesh = new BlockMesh(); blockMesh.AppendModelMeshPart(model.FindMesh("Sign").MeshParts[0], boneAbsoluteTransform * m, makeEmissive: false, hanging, doubleSided: false, flipNormals: false, Color.White); BlockMesh blockMesh2 = new BlockMesh(); blockMesh2.AppendModelMeshPart(model.FindMesh("Post").MeshParts[0], boneAbsoluteTransform2 * m, makeEmissive: false, hanging, doubleSided: false, flipNormals: false, Color.White); m_blockMeshes[i] = new BlockMesh(); m_blockMeshes[i].AppendBlockMesh(blockMesh); m_blockMeshes[i].AppendBlockMesh(blockMesh2); m_coloredBlockMeshes[i] = new BlockMesh(); m_coloredBlockMeshes[i].AppendBlockMesh(m_blockMeshes[i]); m_blockMeshes[i].TransformTextureCoordinates(Matrix.CreateTranslation((float)(DefaultTextureSlot % 16) / 16f, (float)(DefaultTextureSlot / 16) / 16f, 0f)); m_coloredBlockMeshes[i].TransformTextureCoordinates(Matrix.CreateTranslation((float)(m_coloredTextureSlot % 16) / 16f, (float)(m_coloredTextureSlot / 16) / 16f, 0f)); m_collisionBoxes[i] = new BoundingBox[2]; m_collisionBoxes[i][0] = blockMesh.CalculateBoundingBox(); m_collisionBoxes[i][1] = blockMesh2.CalculateBoundingBox(); m_surfaceMeshes[i] = new BlockMesh(); m_surfaceMeshes[i].AppendModelMeshPart(model.FindMesh("Surface").MeshParts[0], boneAbsoluteTransform3 * m, makeEmissive: false, hanging, doubleSided: false, flipNormals: false, Color.White); m_surfaceNormals[i] = -m.Forward; if (hanging) { for (int j = 0; j < m_surfaceMeshes[i].Vertices.Count; j++) { Vector2 textureCoordinates = m_surfaceMeshes[i].Vertices.Array[j].TextureCoordinates; textureCoordinates.Y = 1f - textureCoordinates.Y; m_surfaceMeshes[i].Vertices.Array[j].TextureCoordinates = textureCoordinates; } } } m_standaloneBlockMesh.AppendModelMeshPart(model.FindMesh("Sign").MeshParts[0], boneAbsoluteTransform * Matrix.CreateTranslation(0f, -0.6f, 0f), makeEmissive: false, flipWindingOrder: false, doubleSided: false, flipNormals: false, Color.White); m_standaloneBlockMesh.AppendModelMeshPart(model.FindMesh("Post").MeshParts[0], boneAbsoluteTransform2 * Matrix.CreateTranslation(0f, -0.6f, 0f), makeEmissive: false, flipWindingOrder: false, doubleSided: false, flipNormals: false, Color.White); m_standaloneColoredBlockMesh.AppendBlockMesh(m_standaloneBlockMesh); m_standaloneBlockMesh.TransformTextureCoordinates(Matrix.CreateTranslation((float)(DefaultTextureSlot % 16) / 16f, (float)(DefaultTextureSlot / 16) / 16f, 0f)); m_standaloneColoredBlockMesh.TransformTextureCoordinates(Matrix.CreateTranslation((float)(m_coloredTextureSlot % 16) / 16f, (float)(m_coloredTextureSlot / 16) / 16f, 0f)); base.Initialize(); }
public override void Initialize() { Model model = ContentManager.Get <Model>("Models/Hygrometer"); Matrix boneAbsoluteTransform = BlockMesh.GetBoneAbsoluteTransform(model.FindMesh("Case").ParentBone); Matrix matrix = m_pointerMatrix = BlockMesh.GetBoneAbsoluteTransform(model.FindMesh("Pointer").ParentBone); m_invPointerMatrix = Matrix.Invert(m_pointerMatrix); m_caseMesh.AppendModelMeshPart(model.FindMesh("Case").MeshParts[0], boneAbsoluteTransform, makeEmissive: false, flipWindingOrder: false, doubleSided: true, flipNormals: false, Color.White); m_pointerMesh.AppendModelMeshPart(model.FindMesh("Pointer").MeshParts[0], matrix, makeEmissive: false, flipWindingOrder: false, doubleSided: false, flipNormals: false, Color.White); for (int i = 0; i < 4; i++) { m_matricesByData[i] = Matrix.CreateScale(5f) * Matrix.CreateTranslation(0.95f, 0.15f, 0.5f) * Matrix.CreateTranslation(-0.5f, 0f, -0.5f) * Matrix.CreateRotationY((float)(i + 1) * (float)Math.PI / 2f) * Matrix.CreateTranslation(0.5f, 0f, 0.5f); m_collisionBoxesByData[i] = new BoundingBox[1] { m_caseMesh.CalculateBoundingBox(m_matricesByData[i]) }; } base.Initialize(); }
public override void Initialize() { Model model = ContentManager.Get <Model>("Models/Thermometer"); Matrix boneAbsoluteTransform = BlockMesh.GetBoneAbsoluteTransform(model.FindMesh("Case").ParentBone); Matrix boneAbsoluteTransform2 = BlockMesh.GetBoneAbsoluteTransform(model.FindMesh("Fluid").ParentBone); m_caseMesh.AppendModelMeshPart(model.FindMesh("Case").MeshParts[0], boneAbsoluteTransform, makeEmissive: false, flipWindingOrder: false, doubleSided: true, flipNormals: false, Color.White); m_fluidMesh.AppendModelMeshPart(model.FindMesh("Fluid").MeshParts[0], boneAbsoluteTransform2, makeEmissive: false, flipWindingOrder: false, doubleSided: false, flipNormals: false, Color.White); for (int i = 0; i < 4; i++) { m_matricesByData[i] = Matrix.CreateScale(1.5f) * Matrix.CreateTranslation(0.95f, 0.15f, 0.5f) * Matrix.CreateTranslation(-0.5f, 0f, -0.5f) * Matrix.CreateRotationY((float)(i + 1) * (float)Math.PI / 2f) * Matrix.CreateTranslation(0.5f, 0f, 0.5f); m_collisionBoxesByData[i] = new BoundingBox[1] { m_caseMesh.CalculateBoundingBox(m_matricesByData[i]) }; } m_fluidBottomPosition = m_fluidMesh.Vertices.Min((BlockMeshVertex v) => v.Position.Y); base.Initialize(); }
public override void Initialize() { Model model = ContentManager.Get <Model>(m_modelName); Matrix boneAbsoluteTransform = BlockMesh.GetBoneAbsoluteTransform(model.FindMesh("Post").ParentBone); Matrix boneAbsoluteTransform2 = BlockMesh.GetBoneAbsoluteTransform(model.FindMesh("Planks").ParentBone); for (int i = 0; i < 16; i++) { bool num = (i & 1) != 0; bool flag = (i & 2) != 0; bool flag2 = (i & 4) != 0; bool flag3 = (i & 8) != 0; List <BoundingBox> list = new List <BoundingBox>(); Matrix m = Matrix.CreateTranslation(0.5f, 0f, 0.5f); BlockMesh blockMesh = new BlockMesh(); blockMesh.AppendModelMeshPart(model.FindMesh("Post").MeshParts[0], boneAbsoluteTransform * m, makeEmissive: false, flipWindingOrder: false, doubleSided: false, flipNormals: false, Color.White); BoundingBox item = blockMesh.CalculateBoundingBox(); item.Min.X -= 0.1f; item.Min.Z -= 0.1f; item.Max.X += 0.1f; item.Max.Z += 0.1f; list.Add(item); BlockMesh blockMesh2 = new BlockMesh(); if (num) { BlockMesh blockMesh3 = new BlockMesh(); Matrix m2 = Matrix.CreateRotationY(0f) * Matrix.CreateTranslation(0.5f, 0f, 0.5f); blockMesh3.AppendModelMeshPart(model.FindMesh("Planks").MeshParts[0], boneAbsoluteTransform2 * m2, makeEmissive: false, flipWindingOrder: false, doubleSided: false, flipNormals: false, Color.White); if (m_doubleSidedPlanks) { blockMesh3.AppendModelMeshPart(model.FindMesh("Planks").MeshParts[0], boneAbsoluteTransform2 * m2, makeEmissive: false, flipWindingOrder: true, doubleSided: false, flipNormals: true, Color.White); } blockMesh2.AppendBlockMesh(blockMesh3); BoundingBox item2 = blockMesh3.CalculateBoundingBox(); list.Add(item2); } if (flag) { BlockMesh blockMesh4 = new BlockMesh(); Matrix m3 = Matrix.CreateRotationY((float)Math.PI) * Matrix.CreateTranslation(0.5f, 0f, 0.5f); blockMesh4.AppendModelMeshPart(model.FindMesh("Planks").MeshParts[0], boneAbsoluteTransform2 * m3, makeEmissive: false, flipWindingOrder: false, doubleSided: false, flipNormals: false, Color.White); if (m_doubleSidedPlanks) { blockMesh4.AppendModelMeshPart(model.FindMesh("Planks").MeshParts[0], boneAbsoluteTransform2 * m3, makeEmissive: false, flipWindingOrder: true, doubleSided: false, flipNormals: true, Color.White); } blockMesh2.AppendBlockMesh(blockMesh4); BoundingBox item3 = blockMesh4.CalculateBoundingBox(); list.Add(item3); } if (flag2) { BlockMesh blockMesh5 = new BlockMesh(); Matrix m4 = Matrix.CreateRotationY(4.712389f) * Matrix.CreateTranslation(0.5f, 0f, 0.5f); blockMesh5.AppendModelMeshPart(model.FindMesh("Planks").MeshParts[0], boneAbsoluteTransform2 * m4, makeEmissive: false, flipWindingOrder: false, doubleSided: false, flipNormals: false, Color.White); if (m_doubleSidedPlanks) { blockMesh5.AppendModelMeshPart(model.FindMesh("Planks").MeshParts[0], boneAbsoluteTransform2 * m4, makeEmissive: false, flipWindingOrder: true, doubleSided: false, flipNormals: true, Color.White); } blockMesh2.AppendBlockMesh(blockMesh5); BoundingBox item4 = blockMesh5.CalculateBoundingBox(); list.Add(item4); } if (flag3) { BlockMesh blockMesh6 = new BlockMesh(); Matrix m5 = Matrix.CreateRotationY((float)Math.PI / 2f) * Matrix.CreateTranslation(0.5f, 0f, 0.5f); blockMesh6.AppendModelMeshPart(model.FindMesh("Planks").MeshParts[0], boneAbsoluteTransform2 * m5, makeEmissive: false, flipWindingOrder: false, doubleSided: false, flipNormals: false, Color.White); if (m_doubleSidedPlanks) { blockMesh6.AppendModelMeshPart(model.FindMesh("Planks").MeshParts[0], boneAbsoluteTransform2 * m5, makeEmissive: false, flipWindingOrder: true, doubleSided: false, flipNormals: true, Color.White); } blockMesh2.AppendBlockMesh(blockMesh6); BoundingBox item5 = blockMesh6.CalculateBoundingBox(); list.Add(item5); } blockMesh.ModulateColor(m_postColor); m_blockMeshes[i] = new BlockMesh(); m_blockMeshes[i].AppendBlockMesh(blockMesh); m_blockMeshes[i].AppendBlockMesh(blockMesh2); m_blockMeshes[i].TransformTextureCoordinates(Matrix.CreateTranslation((float)(DefaultTextureSlot % 16) / 16f, (float)(DefaultTextureSlot / 16) / 16f, 0f)); m_blockMeshes[i].GenerateSidesData(); m_coloredBlockMeshes[i] = new BlockMesh(); m_coloredBlockMeshes[i].AppendBlockMesh(blockMesh); m_coloredBlockMeshes[i].AppendBlockMesh(blockMesh2); m_coloredBlockMeshes[i].TransformTextureCoordinates(Matrix.CreateTranslation((float)(m_coloredTextureSlot % 16) / 16f, (float)(m_coloredTextureSlot / 16) / 16f, 0f)); m_coloredBlockMeshes[i].GenerateSidesData(); m_collisionBoxes[i] = list.ToArray(); } m_standaloneBlockMesh.AppendModelMeshPart(model.FindMesh("Post").MeshParts[0], boneAbsoluteTransform * Matrix.CreateTranslation(-0.5f, -0.5f, 0f), makeEmissive: false, flipWindingOrder: false, doubleSided: false, flipNormals: false, Color.White); m_standaloneBlockMesh.AppendModelMeshPart(model.FindMesh("Post").MeshParts[0], boneAbsoluteTransform * Matrix.CreateTranslation(0.5f, -0.5f, 0f), makeEmissive: false, flipWindingOrder: false, doubleSided: false, flipNormals: false, Color.White); m_standaloneBlockMesh.AppendModelMeshPart(model.FindMesh("Planks").MeshParts[0], boneAbsoluteTransform2 * Matrix.CreateRotationY(0f) * Matrix.CreateTranslation(-0.5f, -0.5f, 0f), makeEmissive: false, flipWindingOrder: false, doubleSided: false, flipNormals: false, Color.White); if (m_doubleSidedPlanks) { m_standaloneBlockMesh.AppendModelMeshPart(model.FindMesh("Planks").MeshParts[0], boneAbsoluteTransform2 * Matrix.CreateRotationY(0f) * Matrix.CreateTranslation(-0.5f, -0.5f, 0f), makeEmissive: false, flipWindingOrder: true, doubleSided: false, flipNormals: true, Color.White); } m_standaloneBlockMesh.AppendModelMeshPart(model.FindMesh("Planks").MeshParts[0], boneAbsoluteTransform2 * Matrix.CreateRotationY((float)Math.PI) * Matrix.CreateTranslation(0.5f, -0.5f, 0f), makeEmissive: false, flipWindingOrder: false, doubleSided: false, flipNormals: false, Color.White); if (m_doubleSidedPlanks) { m_standaloneBlockMesh.AppendModelMeshPart(model.FindMesh("Planks").MeshParts[0], boneAbsoluteTransform2 * Matrix.CreateRotationY((float)Math.PI) * Matrix.CreateTranslation(0.5f, -0.5f, 0f), makeEmissive: false, flipWindingOrder: true, doubleSided: false, flipNormals: true, Color.White); } m_standaloneColoredBlockMesh.AppendBlockMesh(m_standaloneBlockMesh); m_standaloneBlockMesh.TransformTextureCoordinates(Matrix.CreateTranslation((float)(DefaultTextureSlot % 16) / 16f, (float)(DefaultTextureSlot / 16) / 16f, 0f)); m_standaloneColoredBlockMesh.TransformTextureCoordinates(Matrix.CreateTranslation((float)(m_coloredTextureSlot % 16) / 16f, (float)(m_coloredTextureSlot / 16) / 16f, 0f)); base.Initialize(); }
public Battery(Matrix boneTransform, Matrix tcTransform, string name = "", string description = "", string id = "", int voltage = 12, string modelName = "Models/Battery", string meshName = "Battery") : base(voltage, name, description, ElementType.Connector | ElementType.Container) { m_standaloneBlockMesh.AppendMesh(modelName, meshName, boneTransform, tcTransform, Color.LightGray); m_collisionBoxes = new BoundingBox[] { m_standaloneBlockMesh.CalculateBoundingBox() }; Id = id; }