public override bool Draw(MyRenderObject renderObject)
        {
            if (base.Draw(renderObject) == false)
            {
                return(false);
            }
            //  if (IsControlledByPlayer()) return true;

            Matrix worldMatrix                      = WorldMatrix;
            List <MyModelDummy> muzzles             = GetMuzzleFlashMatrix();
            Vector3             muzzleFlashPosition = MyUtils.GetTransform(muzzles[m_activeMuzzle].Matrix.Translation, ref worldMatrix);

            // Draw muzzle flash:
            int dt = MyMinerGame.TotalGamePlayTimeInMilliseconds - m_lastTimeShoot;

            if (dt <= MyMachineGunConstants.MUZZLE_FLASH_MACHINE_GUN_LIFESPAN && m_muzzleFlashLength > 0)
            {
                MyParticleEffects.GenerateMuzzleFlash(muzzleFlashPosition, worldMatrix.Forward, m_muzzleFlashRadius, m_muzzleFlashLength);
            }

            // Draw smoke:
            if (m_shotSmoke != null)
            {
                m_shotSmoke.UserBirthMultiplier = m_smokeToGenerate;
                m_shotSmoke.WorldMatrix         = Matrix.CreateTranslation(muzzleFlashPosition);
            }

            return(true);
        }
Example #2
0
        public override bool Draw(MyRenderObject renderObject)
        {
            if (base.Draw(renderObject) == false)
            {
                return(false);
            }

            //  Draw flare at the end or back of the missile
            //  Color and range is same as for missile's dynamic light
            if (m_light != null)
            {
                if ((m_initTime - m_elapsedMiliseconds) <= 0)
                {
                    MyTransparentGeometry.AddPointBillboard(MyTransparentMaterialEnum.ReflectorGlareAlphaBlended, m_light.Color,
                                                            WorldMatrix.Translation - 1.1f * WorldMatrix.Forward * ModelLod0.BoundingSphere.Radius, m_light.Range * 0.02f, 0);
                }
                else
                {
                    float delta = m_elapsedMiliseconds / m_initTime;

                    MyTransparentGeometry.AddPointBillboard(MyTransparentMaterialEnum.ReflectorGlareAlphaBlended, m_light.Color,
                                                            WorldMatrix.Translation - WorldMatrix.Forward * ModelLod0.BoundingSphere.Radius, m_light.Range * 0.005f * delta * delta, 0);
                }
            }
            return(true);
        }
Example #3
0
        public override bool Draw(MyRenderObject renderObject)
        {
            base.Draw(renderObject);

            //  Draw muzzle flash
            int deltaTime = MyMinerGame.TotalGamePlayTimeInMilliseconds - m_lastTimeShoot;

            if (deltaTime <= MyMachineGunConstants.MUZZLE_FLASH_MACHINE_GUN_LIFESPAN)
            {
                float FAKE_RADIUS    = MyMwcUtils.GetRandomFloat(0.5f, 1.5f);
                float FAKE_THICKNESS = MyMwcUtils.GetRandomFloat(FAKE_RADIUS - 0.1f, FAKE_RADIUS);
                float FAKE_LENGTH    = MyMwcUtils.GetRandomFloat(7, 8);
                float FAKE_ANGLE     = MyMwcUtils.GetRandomFloat(0, MathHelper.PiOver2);

                //float colorComponent = 1;
                float colorComponent = 1 - (float)deltaTime / (float)MyMachineGunConstants.MUZZLE_FLASH_MACHINE_GUN_LIFESPAN;
                colorComponent  = 1 - (float)Math.Pow(colorComponent, 5);
                colorComponent *= 1.3f;
                //Vector4 color = new Vector4(1.0f, 1.0f, 1.0f, 1);
                Vector4 color = new Vector4(colorComponent, colorComponent, colorComponent, 1);

                Vector3 muzzleInWorldSpace = m_positionMuzzleInWorldSpace + WorldMatrix.Up * 0.2f;

                MyTransparentGeometry.AddLineBillboard(MyTransparentMaterialEnum.MuzzleFlashMachineGunSide, color, muzzleInWorldSpace - WorldMatrix.Forward * 1.0f,
                                                       WorldMatrix.Forward, FAKE_LENGTH, FAKE_THICKNESS);
                MyTransparentGeometry.AddPointBillboard(MyTransparentMaterialEnum.MuzzleFlashMachineGunFront, color, muzzleInWorldSpace, FAKE_RADIUS, FAKE_ANGLE);
            }
            return(true);
        }
Example #4
0
        //  Draw muzzle flash not matter if in frustum (it's because it's above the frustum)
        public override bool Draw(MyRenderObject renderObject)
        {
            if (base.Draw(renderObject) == false)
            {
                return(false);
            }

            m_barrel.Draw();

            if (MyMinerGame.IsPaused())
            {
                return(false);
            }

            //  Draw muzzle flash
            int deltaTime = MyMinerGame.TotalGamePlayTimeInMilliseconds - m_lastTimeShoot;

            if (deltaTime <= MyMachineGunConstants.MUZZLE_FLASH_MACHINE_GUN_LIFESPAN)
            {
                MyParticleEffects.GenerateMuzzleFlash(m_positionMuzzleInWorldSpace, WorldMatrix.Forward, m_muzzleFlashRadius, m_muzzleFlashLength, MyRender.GetCurrentLodDrawPass() == MyLodTypeEnum.LOD_NEAR);
            }

            if (m_smokeEffect != null)
            {
                m_smokeEffect.Near = MyRender.GetCurrentLodDrawPass() == MyLodTypeEnum.LOD_NEAR;
            }

            return(true);
        }
Example #5
0
 public override bool Draw(MyRenderObject renderObject)
 {
     if (base.Draw(renderObject) == false)
     {
         return(false);
     }
     return(true);
 }
        public override bool Draw(MyRenderObject renderObject)
        {
            bool retval = true;

            retval = base.Draw(renderObject);

            return(retval);
        }
Example #7
0
        public override bool Draw(MyRenderObject renderObject)
        {
            if (MyGuiScreenGamePlay.IsRenderingInsideEntity(this))
            {
                return(false);
            }

            return(base.Draw(renderObject));
        }
Example #8
0
 public override bool Draw(MyRenderObject renderObject = null)
 {
     if (BuilderActive)
     {
         MyRender.AddRenderObjectToDraw(RenderObjects[0]);
         return(true);
     }
     return(false);
 }
Example #9
0
        public override bool Draw(MyRenderObject renderObject)
        {
            bool retVal = base.Draw(renderObject);

            foreach (MyEntity child in Children)
            {
                child.Draw();
            }

            return(retVal);
        }
Example #10
0
        public override bool Draw(MyRenderObject renderObject)
        {
            if (MyFakes.STRANGE_PARTICLES_WHEN_DUST_ON_STATIC_ASTEROIDS)
            {
                MyTransparentGeometry.AddPointBillboard(MyTransparentMaterialEnum.Smoke, new Vector4(0.1f, 0.1f, 0.1f, 1.0f),
                                                        GetPosition(), 800, GetPosition().Length());

                MyTransparentGeometry.AddPointBillboard(MyTransparentMaterialEnum.Smoke, new Vector4(0.1f, 0.1f, 0.1f, 1.0f),
                                                        GetPosition() + (Vector3.Normalize(MyCamera.Position - this.GetPosition()) * 250f), 300, GetPosition().Length() * 2.564f);
            }

            return(base.Draw(renderObject));
        }
        /// <summary>
        ///
        /// </summary>
        /// <returns></returns>
        public override bool Draw(MyRenderObject renderObject)
        {
            bool drawOk = base.Draw(renderObject);

            if (drawOk)
            {
                if (m_particleEffect != null)
                {
                    MyParticlesManager.CustomDraw(m_particleEffect);
                }
            }

            return(drawOk);
        }
        public override bool Draw(MyRenderObject renderObject)
        {
            base.Draw(renderObject);

            /*if (!IsControlledByPlayer())
             * {
             *  //return base.Draw();
             * }
             * else
             * {
             *  //DrawCrossHair();
             * }*/
            return(true);
        }
Example #13
0
        public override bool Draw(MyRenderObject renderObject)
        {
            bool draw = base.Draw(renderObject);

            if (draw && m_hologramState != HologramState.Deactivated)
            {
                Vector3 maxScale     = MyHologramConstants.FLICKER_MAX_SIZE * Vector3.One;
                Vector3 minScale     = new Vector3(.01f);
                Vector3 clampedScale = Vector3.Clamp(m_scale, minScale, maxScale);
                m_hologramShip.SetWorldMatrix(Matrix.CreateScale(clampedScale) * m_hologramBaseMatrix);

                m_hologramShip.Draw();
            }

            return(draw);
        }
Example #14
0
        //  Draw muzzle flash not matter if in frustum (it's because it's above the frustum)
        public override bool Draw(MyRenderObject renderObject)
        {
            if (base.Draw(renderObject) == false)
            {
                return(false);
            }

            //  Draw muzzle flash
            int deltaTime = MyMinerGame.TotalGamePlayTimeInMilliseconds - m_lastTimeShoot;

            if (deltaTime <= MyMachineGunConstants.MUZZLE_FLASH_MACHINE_GUN_LIFESPAN)
            {
                MyParticleEffects.GenerateMuzzleFlash(m_positionMuzzleInWorldSpace + WorldMatrix.Forward, WorldMatrix.Forward, 0.4f, 0.7f);
            }

            return(true);
        }
        public void RenderForLight(Matrix lightViewProjection, ref BoundingBox lightBoundingBox, Texture shadowRenderTarget, Texture shadowDepth, int spotIndex)
        {
            m_renderElementsForShadows.Clear();
            m_castingRenderObjectsUnique.Clear();

            m_spotFrustum.Matrix = lightViewProjection;

            //MyRender.GetEntitiesFromPrunningStructure(ref lightBoundingBox, m_castingRenderObjects);
            MyRender.GetEntitiesFromShadowStructure(ref lightBoundingBox, m_castingRenderObjects);

            foreach (MyElement element in m_castingRenderObjects)
            {
                MyRenderObject renderObject = (MyRenderObject)element;
                MyEntity       entity       = ((MyRenderObject)element).Entity;

                if (entity != null)
                {
                    if (entity is MyVoxelMap)
                    {
                        // Changed m_castersBox to lightBoundingBox, should work
                        //(entity as MyVoxelMap).GetRenderElementsForShadowmap(m_renderElementsForShadows, ref lightBoundingBox, m_spotFrustum, MyLodTypeEnum.LOD0, false);
                        (entity as MyVoxelMap).GetRenderElementsForShadowmap(m_renderElementsForShadows, renderObject.RenderCellCoord.Value, MyLodTypeEnum.LOD0, false);
                    }
                    else
                    {
                        if (entity.ModelLod0 != null)
                        {
                            MyRender.CollectRenderElementsForShadowmap(m_renderElementsForShadows, m_transparentRenderElementsForShadows, entity, entity.ModelLod0);
                        }
                    }
                }
            }

            // Set our targets
            MyMinerGame.SetRenderTarget(shadowRenderTarget, shadowDepth);
            MyMinerGame.Static.GraphicsDevice.Clear(ClearFlags.All, new ColorBGRA(1.0f), 1.0f, 0);

            DepthStencilState.Default.Apply();
            RasterizerState.CullNone.Apply();
            BlendState.Opaque.Apply();

            RenderShadowMap(lightViewProjection);

            MyRender.TakeScreenshot("ShadowMapSpot", shadowRenderTarget, MyEffectScreenshot.ScreenshotTechniqueEnum.Color);
        }
Example #16
0
        public override bool Draw(MyRenderObject renderObject)
        {
            if (!base.Draw(renderObject))
            {
                return(false);
            }

            if (ModelLod0 != null)
            {
                ModelLod0.LoadInDraw();
            }
            if (ModelLod1 != null)
            {
                ModelLod1.LoadInDraw();
            }

            return(true);
        }
        public override bool Draw(MyRenderObject renderObject)
        {
            var s = base.WorldAABB.Size();

            if (!MyGuiScreenGamePlay.Static.IsGameActive())
            {
                Matrix  world = Matrix.CreateWorld(WorldMatrix.Translation, WorldMatrix.Forward, WorldMatrix.Up);
                Vector4 color = Color.Green.ToVector4();
                color.W *= 0.3f;
                BoundingBox localBoundingBox = new BoundingBox(-Size / 2f, Size / 2f);
                MySimpleObjectDraw.DrawTransparentBox(ref world, ref localBoundingBox, ref color, true, 1);
            }
            //base.Draw();

            if (IsWorking())
            {
                m_scanningPart.Draw();
            }
            return(true);
        }
Example #18
0
        public override bool Draw(MyRenderObject renderObject)
        {
            //    return base.Draw();

//            if (IsOn())
            {
                Matrix  world = WorldMatrix;
                Vector4 color = new Vector4(0f, 0f, 1f, 0.5f);

                if (EntityDetectorType == MyEntityDetectorType.Sphere)
                {
                    MySimpleObjectDraw.DrawTransparentSphere(ref world, m_radius, ref color, true, 1);
                }
                else if (EntityDetectorType == MyEntityDetectorType.Box)
                {
                    BoundingBox bBox = new BoundingBox(-m_extent, m_extent);
                    MySimpleObjectDraw.DrawTransparentBox(ref world, ref bBox, ref color, true, 1);
                }
            }
            return(true);
        }
        public void RenderForLight(MatrixD lightViewProjection, Matrix lightViewProjectionAtZero, ref Vector3D lightPosition, Texture shadowRenderTarget, Texture shadowDepth, int spotIndex, List <uint> ignoredObjects)
        {
            m_renderElementsForShadows.Clear();
            m_castingRenderObjectsUnique.Clear();

            m_spotFrustum.Matrix = lightViewProjection;

            //MyRender.GetEntitiesFromPrunningStructure(ref lightBoundingBox, m_castingRenderObjects);
            //MyRender.GetEntitiesFromShadowStructure(ref lightBoundingBox, m_castingRenderObjects);

            int occludedItemsStats = 0; //always 0 for shadows

            MyRender.PrepareEntitiesForDraw(ref m_spotFrustum, lightPosition, (MyOcclusionQueryID)(1), m_castingRenderObjects, null, m_castingCullObjects, m_castingManualCullObjects, null, ref occludedItemsStats);

            foreach (MyElement element in m_castingRenderObjects)
            {
                MyRenderObject renderObject = (MyRenderObject)element;

                if (ignoredObjects.Contains(renderObject.ID))
                {
                    continue;
                }

                renderObject.GetRenderElementsForShadowmap(MyLodTypeEnum.LOD0, m_renderElementsForShadows, null);
            }

            // Set our targets
            MyRender.SetRenderTarget(shadowRenderTarget, shadowDepth);
            MyRender.GraphicsDevice.Clear(ClearFlags.All, new ColorBGRA(1.0f), 1.0f, 0);

            DepthStencilState.Default.Apply();
            RasterizerState.CullNone.Apply();
            BlendState.Opaque.Apply();

            RenderShadowMap(lightViewProjectionAtZero);

            MyRender.TakeScreenshot("ShadowMapSpot", shadowRenderTarget, MyEffectScreenshot.ScreenshotTechniqueEnum.Color);
        }
        public override bool Draw(MyRenderObject renderObject)
        {
            bool drawDebug           = MyRender.IsModuleEnabled(MyRenderStage.DebugDraw, MyRenderModuleEnum.InfluenceSpheres);
            var  isEditorOrDebugDraw = MyGuiScreenGamePlay.Static.IsEditorActive() || drawDebug;

            if (isEditorOrDebugDraw && MyRender.GetCurrentLodDrawPass() == MyLodTypeEnum.LOD0 && !MyEntities.IsTypeHidden(typeof(MyInfluenceSphere)))
            {
                Matrix worldMatrix = WorldMatrix;

                var innerColor  = Color.White.ToVector4();
                var innerSphere = new BoundingSphere(worldMatrix.Translation, RadiusMin);
                MySimpleObjectDraw.DrawTransparentSphere(ref worldMatrix, innerSphere.Radius, ref innerColor, true, 12,
                                                         MyTransparentMaterialEnum.ObjectiveDummyFace,
                                                         MyTransparentMaterialEnum.ObjectiveDummyLine);

                var outerColor  = 0.5f * innerColor;
                var outerSphere = new BoundingSphere(worldMatrix.Translation, RadiusMax);
                MySimpleObjectDraw.DrawTransparentSphere(ref worldMatrix, outerSphere.Radius, ref outerColor, true, 12,
                                                         MyTransparentMaterialEnum.ObjectiveDummyFace,
                                                         MyTransparentMaterialEnum.ObjectiveDummyLine);
            }

            return(true);
        }
Example #21
0
        public override bool Draw(MyRenderObject renderObject)
        {
            if (!base.Draw(renderObject))
            {
                return(false);
            }

            //if (IsWorking())

            /*{
             *  Matrix world = Matrix.CreateWorld(WorldMatrix.Translation + ModelLod0.BoundingSphere.Center, WorldMatrix.Forward, WorldMatrix.Up);
             *  MyTransparentMaterialEnum? faceMaterial;
             *  MyTransparentMaterialEnum? lineMaterial;
             *  Vector4 color;
             *  SetTransparentParameters(out color, out faceMaterial, out lineMaterial);
             *  if (faceMaterial.HasValue)
             *  {
             *      BoundingBox localBoundingBox = m_localBoundingBox;
             *      MySimpleObjectDraw.DrawTransparentBox(ref world, ref localBoundingBox, ref color, true, 1, faceMaterial, lineMaterial);
             *  }
             * }*/

            return(true);
        }
Example #22
0
        public override bool Draw(MyRenderObject renderObject)
        {
            if (Render.MyRender.GetCurrentLodDrawPass() == MyLodTypeEnum.LOD0)
            {
                if (IsDummyVisible())
                {
                    base.Draw(renderObject);

                    Vector4 color;
                    switch (DummyFlags)
                    {
                    case MyDummyPointFlags.NONE: color = new Vector4(0.5f, 0.7f, 0.1f, 0.3f); break;

                    case MyDummyPointFlags.SAFE_AREA: color = new Vector4(0.2f, 0.3f, 0.22f, 0.1f); break;

                    case MyDummyPointFlags.DETECTOR: color = new Vector4(0.12f, 0.1f, 0.7f, 0.3f); break;

                    case MyDummyPointFlags.PARTICLE: color = new Vector4(0.6f, 0.05f, 0.1f, 0.3f); break;

                    default: color = new Vector4(0.6f, 0.6f, 0.7f, 0.3f); break;
                    }
                    if ((DummyFlags & MyDummyPointFlags.COLOR_AREA) != 0)
                    {
                        color = Color;  // color Color areas with their area color (overriding the default color). I like to write "color".
                    }
                    Matrix worldMatrix = WorldMatrix;

                    if ((int)(DummyFlags & MyDummyPointFlags.TEXTURE_QUAD) > 0)
                    {
                        BoundingBox localAABB = LocalAABB;
                        MySimpleObjectDraw.DrawWireFramedBox(ref worldMatrix, ref localAABB, ref color, 0.01f, 1, LineMaterial);

                        if (!string.IsNullOrEmpty(Name))
                        {
                            //var tex = MinerWars.AppCode.Game.Textures.MyTextureManager.GetTexture<MinerWars.AppCode.Game.Textures.MyTexture2D>(Name);
                            int i = 0;
                            foreach (MyTransparentMaterialEnum trEnum in Enum.GetValues(typeof(MyTransparentMaterialEnum)))
                            {
                                if (MyTransparentMaterialConstants.MyTransparentMaterialStrings[i] == Name)
                                {
                                    Vector4 quadColor = Vector4.One;
                                    MyQuad  quad;
                                    Vector3 position     = GetPosition();
                                    Vector3 zeroPosition = Vector3.Zero;

                                    var   texture = MyTransparentGeometry.GetTexture(trEnum);
                                    float ratio   = texture.Height / (float)texture.Width;

                                    MyUtils.GenerateQuad(out quad, ref position, WorldAABB.Size().X *ratio, WorldAABB.Size().X, ref worldMatrix);
                                    MyTransparentGeometry.AddQuad(trEnum, ref quad, ref quadColor, ref position);
                                }
                                i++;
                            }
                        }
                    }
                    else
                    {
                        if (Type == MyDummyPointType.Box)
                        {
                            BoundingBox localAABB = LocalAABB;
                            MySimpleObjectDraw.DrawTransparentBox(ref worldMatrix, ref localAABB, ref color, true, 1, FaceMaterial, LineMaterial);
                        }
                        else
                        {
                            BoundingSphere localSphere = new BoundingSphere(worldMatrix.Translation, Radius);
                            MySimpleObjectDraw.DrawTransparentSphere(ref worldMatrix, localSphere.Radius, ref color, true, 12, FaceMaterial, LineMaterial);
                        }
                    }
                }

                if (ParticleEffect != null && IsVisible() && Enabled)
                {
                    Vector4 particleColor = Color == Vector4.Zero ? Vector4.One : Color;
                    ParticleEffect.UserColorMultiplier = particleColor;
                    ParticleEffect.UserScale           = UserScale;

                    UpdateWorldVolume();

                    MyParticlesManager.CustomDraw(ParticleEffect);
                }
            }

            return(false);
        }
 public MyCastShadowJob(MyRenderObject entity)
 {
     m_renderObject = entity;
     VisibleFromSun = false;
     //m_entity.OnClose += m_entity_OnMarkForClose;
 }
Example #24
0
 // This method overrides parent draw, that expects that phys object has Model. VoxelHandShape doesnt, so we cant call parent's draw.
 public override bool Draw(MyRenderObject renderObject = null)
 {
     DrawShape();
     return(true);
 }
Example #25
0
 public override bool Draw(MyRenderObject renderObject)
 {
     // Nothing, visible parts are GunBase and Barrel
     return(true);
 }
Example #26
0
 public override bool Draw(MyRenderObject renderObject)
 {
     return(base.Draw(renderObject));
 }
Example #27
0
 public MyCastShadowJob(MyRenderObject entity)
 {
     m_renderObject = entity;
     VisibleFromSun = false;
     //m_entity.OnClose += m_entity_OnMarkForClose;
 }
Example #28
0
        void PrepareCascadesForDraw()
        {
            if (MyRender.Sun.Direction == Vector3.Zero)
            {
                return;
            }

            MyRender.GetRenderProfiler().StartProfilingBlock("UpdateFrustums");

            UpdateFrustums();

            MyRender.GetRenderProfiler().EndProfilingBlock();

            // Set casting shadows geometry

            MyRender.GetRenderProfiler().StartProfilingBlock("update entities");

            int frustumIndex = 0;

            foreach (MyOrthographicCamera lightCamera in m_lightCameras)
            {
                if (m_skip[frustumIndex])
                {
                    frustumIndex++;
                    continue;
                }

                m_renderElementsForShadows.Clear();
                m_transparentRenderElementsForShadows.Clear();
                m_castingRenderObjectsUnique.Clear();

                MyRender.GetRenderProfiler().StartProfilingBlock("OverlapAllBoundingBox");


                var castersBox         = lightCamera.BoundingBox;     //Cannot use unscaled - incorrect result because of different cascade viewport size
                var castersFrustum     = lightCamera.BoundingFrustum; //Cannot use unscaled - incorrect result because of different cascade viewport size
                int occludedItemsStats = 0;                           //always 0 for shadows
                //MyRender.PrepareEntitiesForDraw(ref castersBox, (MyOcclusionQueryID)(frustumIndex + 1), m_castingRenderObjects, m_occlusionQueriesLists[frustumIndex], ref MyPerformanceCounter.PerCameraDrawWrite.ShadowEntitiesOccluded[frustumIndex]);
                MyRender.PrepareEntitiesForDraw(ref castersFrustum, lightCamera.Position, (MyOcclusionQueryID)(frustumIndex + 1), m_castingRenderObjects, null, m_castingCullObjects, m_castingManualCullObjects, null, ref occludedItemsStats);

                MyRender.GetRenderProfiler().EndProfilingBlock();

                MyRender.GetRenderProfiler().StartProfilingBlock("m_castingRenderObjects");

                int c       = 0;
                int skipped = 0;

                while (c < m_castingRenderObjects.Count)
                {
                    MyRenderObject renderObject = (MyRenderObject)m_castingRenderObjects[c];

                    if (RespectCastShadowsFlags)
                    {
                        // System.Diagnostics.Debug.Assert(!(entity is MyDummyPoint) && !(entity is AppCode.Game.Entities.WayPoints.MyWayPoint));

                        if ((renderObject.ShadowCastUpdateInterval > 0) && ((MyRender.RenderCounter % renderObject.ShadowCastUpdateInterval) == 0))
                        {
                            renderObject.NeedsResolveCastShadow = true;
                            //We have to leave last value, because true when not casting shadow make radiation to ship
                            // renderObject.CastShadow = true;
                        }

                        if (renderObject.NeedsResolveCastShadow)
                        { //Resolve raycast to sun
                            if (renderObject.CastShadowJob == null)
                            {
                                renderObject.CastShadowJob  = new MyCastShadowJob(renderObject);
                                renderObject.CastShadowTask = ParallelTasks.Parallel.Start(renderObject.CastShadowJob);
                            }
                            else
                            if (renderObject.CastShadowTask.IsComplete)
                            {
                                renderObject.CastShadows            = renderObject.CastShadowJob.VisibleFromSun;
                                renderObject.CastShadowTask         = new ParallelTasks.Task();
                                renderObject.CastShadowJob          = null;
                                renderObject.NeedsResolveCastShadow = false;

                                if (renderObject.CastShadows == false)
                                {
                                    HiddenResolvedObjects++;
                                }
                            }
                        }

                        if (!renderObject.NeedsResolveCastShadow && !renderObject.CastShadows)
                        {
                            if (renderObject is MyRenderVoxelCell)
                            {
                            }

                            m_castingRenderObjects.RemoveAtFast(c);
                            skipped++;
                            continue;
                        }
                    }
                    else
                    {
                        renderObject.NeedsResolveCastShadow = true;
                    }

                    if (!m_castingRenderObjectsUnique.Contains(renderObject))
                    {
                        m_castingRenderObjectsUnique.Add(renderObject);

                        if (frustumIndex < MyRenderConstants.RenderQualityProfile.ShadowCascadeLODTreshold)
                        {
                            renderObject.GetRenderElementsForShadowmap(MyLodTypeEnum.LOD0, m_renderElementsForShadows, m_transparentRenderElementsForShadows);
                        }
                        else
                        {
                            renderObject.GetRenderElementsForShadowmap(MyLodTypeEnum.LOD1, m_renderElementsForShadows, m_transparentRenderElementsForShadows);
                        }
                    }

                    c++;
                }

                MyRender.GetRenderProfiler().EndProfilingBlock();

                //Sorting VBs to minimize VB switches
                m_renderElementsForShadows.Sort(m_shadowElementsComparer);

                lightCamera.CastingRenderElements = m_renderElementsForShadows;

                MyPerformanceCounter.PerCameraDrawWrite.RenderElementsInShadows += m_renderElementsForShadows.Count;

                frustumIndex++;
            }

            MyRender.GetRenderProfiler().EndProfilingBlock();
        }
 public override bool Draw(MyRenderObject renderObject)
 {
     // Nothing, visible parts are GunBase and Barrel
     return true;
 }