Ejemplo n.º 1
0
        private void UpdateSurfaceDetection(int gameTime)
        {
            if (gameTime - lastParticleShapeTestTime > 1200)
            {
                var str = ShapeTestEx.RunShapeTest(_position + Vector3.WorldUp * 10.0f,
                                                   _position + Vector3.WorldDown * 10.0f, null, IntersectOptions.Everything);

                if (str.HitMaterial != lastMaterialTraversed)
                {
                    switch (lastMaterialTraversed)
                    {
                    case materials.sand_track:
                    case materials.sand_compact:
                    case materials.sand_dry_deep:
                    case materials.sand_loose:
                    case materials.sand_wet:
                    case materials.sand_wet_deep:
                    {
                        particleColorPrev = particleColor;
                        particleColorGoal = Color.NavajoWhite;
                        particleLerpTime  = 0.0f;
                    }

                    break;

                    default:
                        particleColorPrev = particleColor;
                        particleColorGoal = Color.Black;
                        particleLerpTime  = 0.0f;
                        break;
                    }

                    lastMaterialTraversed = str.HitMaterial;
                }

                lastParticleShapeTestTime = gameTime;
            }

            if (particleLerpTime < 1.0f)
            {
                particleLerpTime += Game.LastFrameTime / ColorLerpDuration;
                particleColor     = particleColor.Lerp(particleColorGoal, particleLerpTime);
            }

            MemoryAccess.SetPtfxColor("core", "ent_amb_smoke_foundry", 0, particleColor);
            MemoryAccess.SetPtfxColor("core", "ent_amb_smoke_foundry", 1, particleColor);
            MemoryAccess.SetPtfxColor("core", "ent_amb_smoke_foundry", 2, particleColor);
        }
        public static EnvMaterialFX RaycastMaterialFX(Vector3 start, Vector3 end, out Vector3 result)
        {
            var shapeTest = ShapeTestEx.RunShapeTest(start, end, null, IntersectOptions.Map);

            if (shapeTest.DidHit)
            {
                foreach (var item in fxList)
                {
                    if (item[shapeTest.HitMaterial] != materials.none)
                    {
                        result = shapeTest.HitPosition;

                        return(item);
                    }
                }
            }

            result = Vector3.Zero;

            return(null);
        }