Esempio n. 1
0
        private void SetupRenderElements(MyModel model, Matrix worldMatrix, int materialIndex = 0, bool staticAsteroid = false)
        {
            model.LoadInDraw();

            var meshList = model.GetMeshList();

            foreach (MyMesh mesh in meshList)
            {
                if (materialIndex > mesh.Materials.Length - 1)
                {
                    materialIndex = 0;
                }

                var material = staticAsteroid ? MyVoxelMaterials.GetMaterialForMesh(FakeEntity.VoxelMaterial) : mesh.Materials[materialIndex];

                material.PreloadTexture(Managers.LoadingMode.Immediate);

                if (material.DrawTechnique == MyMeshDrawTechnique.DECAL)
                {
                    continue;
                }

                if (staticAsteroid && material.DrawTechnique == MyMeshDrawTechnique.MESH)
                {
                    material.DrawTechnique = MyMeshDrawTechnique.VOXELS_STATIC_ASTEROID;
                }

                //Do not use render alocator, it will reuse elements
                MyRender.MyRenderElement renderElement = new MyRender.MyRenderElement();
                //MyRender.AllocateRenderElement(out renderElement);

                renderElement.Entity = FakeEntity;

                renderElement.VertexBuffer = model.VertexBuffer;
                renderElement.IndexBuffer  = model.IndexBuffer;
                renderElement.IndexStart   = mesh.IndexStart;
                renderElement.TriCount     = mesh.TriCount;

                //renderElement.UseChannels = false;

                renderElement.WorldMatrixForDraw = worldMatrix;
                renderElement.WorldMatrix        = worldMatrix;

                renderElement.Material      = material;
                renderElement.DrawTechnique = material.DrawTechnique;
                renderElement.VoxelBatch    = null;

                if (material.DrawTechnique == MyMeshDrawTechnique.HOLO)
                {
                    m_setup.TransparentRenderElementsToDraw.Add(renderElement);
                }
                else
                {
                    m_setup.RenderElementsToDraw.Add(renderElement);
                }
            }
        }
Esempio n. 2
0
        /// <summary>
        /// Inits the specified hud label text.
        /// </summary>
        /// <param name="hudLabelText">The hud label text.</param>
        /// <param name="objectBuilder">The object builder.</param>
        public void Init(string hudLabelText, MyMwcObjectBuilder_StaticAsteroid objectBuilder, Matrix matrix)
        {
            MyStaticAsteroidModels models = GetModelsFromType(objectBuilder.AsteroidType);

            StringBuilder hudLabelTextSb = (hudLabelText == null) ? null : new StringBuilder(hudLabelText);

            if (objectBuilder.Generated)
            {
                Flags &= ~EntityFlags.EditableInEditor;
                Flags &= ~EntityFlags.NeedsId;
            }
            else
            {
                Flags |= EntityFlags.EditableInEditor;
                Flags |= EntityFlags.NeedsId;
            }

            CastShadows = !objectBuilder.Generated;

            if (!objectBuilder.AsteroidMaterial1.HasValue && MySector.Area.HasValue)
            {
                var area = MySolarSystemConstants.Areas[MySector.Area.Value];
                objectBuilder.AsteroidMaterial1 = area.SecondaryStaticAsteroidMaterial;
                objectBuilder.FieldDir          = MinerWars.AppCode.Game.GUI.MyGuiScreenGamePlay.Static.GetDirectionToSunNormalized();
            }

            NeedsUpdate = false;

            Init(hudLabelTextSb, models.LOD0, models.LOD1, null, null, objectBuilder, null, models.LOD2);

            AsteroidType = objectBuilder.AsteroidType;

            SetWorldMatrix(matrix);

            FieldDir = objectBuilder.FieldDir;

            if (objectBuilder.AsteroidMaterial.HasValue)
            {
                VoxelMaterial   = objectBuilder.AsteroidMaterial.Value;
                VoxelMaterial1  = objectBuilder.AsteroidMaterial1;
                m_drawTechnique = MyMeshDrawTechnique.VOXELS_STATIC_ASTEROID;
            }

            if (objectBuilder.UseModelTechnique)
            {
                m_meshMaterial  = MyVoxelMaterials.GetMaterialForMesh(VoxelMaterial);
                m_drawTechnique = MyMeshDrawTechnique.MESH;
            }

            InitDrawTechniques();

            InitPhysics();

            MyModels.OnContentLoaded += InitDrawTechniques;
            InitDrawTechniques();
        }