Example #1
0
        public float GetRayToLineSegmentIntersection(LineOccluder lineOccluder)
        {
            //Direction.Normalize();
            Vector2 v1 = Origin - lineOccluder.StartPoint;
            Vector2 v2 = lineOccluder.EndPoint - lineOccluder.StartPoint;
            Vector2 v3 = new Vector2(-Direction.Y, Direction.X);

            float dot = Vector2.Dot(v2, v3);

            if (Math.Abs(dot) < 0.000001f)
            {
                return(-1.0f);
            }

            float t1 = MathCompanion.CrossProduct(v2, v1) / dot;
            float t2 = Vector2.Dot(v1, v3) / dot;

            if (t1 >= 0.0f && t2 >= 0.0f && t2 <= 1.0f)
            {
                t            = t1;
                HitSomething = true;
                return(t1);
            }

            return(-1.0f);
        }
Example #2
0
 public ShadowCaster()
 {
     lineOccluders = new LineOccluder[4];
     for (int i = 0; i < lineOccluders.Length; i++)
     {
         lineOccluders[i] = new LineOccluder();
     }
 }
        public LineOccluder[] ConvertToLineOccluders(Rectangle Rect)
        {
            lineOccluders[0] = new LineOccluder(new Vector2(Rect.Left, Rect.Top), new Vector2(Rect.Right, Rect.Top));
            lineOccluders[1] = new LineOccluder(new Vector2(Rect.Right, Rect.Top), new Vector2(Rect.Right, Rect.Bottom));
            lineOccluders[2] = new LineOccluder(new Vector2(Rect.Right, Rect.Bottom), new Vector2(Rect.Left, Rect.Bottom));
            lineOccluders[3] = new LineOccluder(new Vector2(Rect.Left, Rect.Bottom), new Vector2(Rect.Left, Rect.Top));

            return(lineOccluders);
        }
Example #4
0
        public override void Start()
        {
            SR = gameObject.GetComponent <SpriteRenderer>();

            Rectangle Occluder = SR.Sprite.DynamicScaledRect();

            lineOccluders[0] = new LineOccluder(new Vector2(Occluder.Left, Occluder.Top), new Vector2(Occluder.Right, Occluder.Top));
            lineOccluders[1] = new LineOccluder(new Vector2(Occluder.Right, Occluder.Top), new Vector2(Occluder.Right, Occluder.Bottom));
            lineOccluders[2] = new LineOccluder(new Vector2(Occluder.Right, Occluder.Bottom), new Vector2(Occluder.Left, Occluder.Bottom));
            lineOccluders[3] = new LineOccluder(new Vector2(Occluder.Left, Occluder.Bottom), new Vector2(Occluder.Left, Occluder.Top));
        }
        public LineOccluder[] ConvertToLineOccluders()
        {
            Rectangle Occluder = SR.Sprite.DynamicScaledRect();

            lineOccluders[0] = new LineOccluder(new Vector2(Occluder.Left, Occluder.Top), new Vector2(Occluder.Right, Occluder.Top));
            lineOccluders[1] = new LineOccluder(new Vector2(Occluder.Right, Occluder.Top), new Vector2(Occluder.Right, Occluder.Bottom));
            lineOccluders[2] = new LineOccluder(new Vector2(Occluder.Right, Occluder.Bottom), new Vector2(Occluder.Left, Occluder.Bottom));
            lineOccluders[3] = new LineOccluder(new Vector2(Occluder.Left, Occluder.Bottom), new Vector2(Occluder.Left, Occluder.Top));

            return(lineOccluders);
        }
Example #6
0
        //public void Rebuild() //Not for high level users
        //{
        //    //LIGHTS.Add(this);
        //}

        public static void Init_Light()
        {
            if (!ShaderLoaded || LightEffect.IsDisposed)
            {
                PointsTriangle           = new List <Vector2>();
                Points                   = new List <Vector2>();
                HandyList                = new List <LineOccluder>();
                RenderTarget2D           = new RenderTarget2D(Setup.GraphicsDevice, Setup.graphics.PreferredBackBufferWidth, Setup.graphics.PreferredBackBufferHeight, false, Setup.GraphicsDevice.PresentationParameters.BackBufferFormat, DepthFormat.Depth24);
                SceneManager.SceneTexPtr = Scene.GuiRenderer.BindTexture(RenderTarget2D);
                //LIGHTS = new List<Light>();
                LightEffect        = Setup.Content.Load <Effect>("LightTest");
                ShaderLoaded       = true;
                ShadowMap          = new RenderTarget2D(Setup.GraphicsDevice, Setup.graphics.PreferredBackBufferWidth, Setup.graphics.PreferredBackBufferHeight, false, Setup.GraphicsDevice.PresentationParameters.BackBufferFormat, DepthFormat.None); //Depth is not needed
                BorderOccluders    = new LineOccluder[4];
                BorderOccluders[0] = new LineOccluder();
                BorderOccluders[1] = new LineOccluder();
                BorderOccluders[2] = new LineOccluder();
                BorderOccluders[3] = new LineOccluder();

                ShadowMap_param            = LightEffect.Parameters["ShadowMap"];
                DirectionalIntensity_param = LightEffect.Parameters["DirectionalIntensity"];
                LightCount_param           = LightEffect.Parameters["LightCount"];
                AngularRadius_param        = LightEffect.Parameters["AngularRadius"];
                X_Bias_param         = LightEffect.Parameters["X_Bias"];
                Y_Bias_param         = LightEffect.Parameters["Y_Bias"];
                YOverX_param         = LightEffect.Parameters["YOverX"];
                Color_param          = LightEffect.Parameters["Color"];
                Radius_param         = LightEffect.Parameters["Radius"];
                InnerRadius_param    = LightEffect.Parameters["InnerRadius"];
                InnerIntensity_param = LightEffect.Parameters["InnerIntensity"];
                Attenuation_param    = LightEffect.Parameters["Attenuation"];
                CastShadows_param    = LightEffect.Parameters["CastShadows"];
                CastShadow_param     = LightEffect.Parameters["CastShadow"];
                ShadowConstant_param = LightEffect.Parameters["ShadowConstant"];
                //CameraPosNorm_param = LightEffect.Parameters["CameraPosNorm"];
            }

            //LIGHTS.Add(this);
            YOVERX = (float)Setup.graphics.PreferredBackBufferHeight / Setup.graphics.PreferredBackBufferWidth;

            if (RenderTarget2D == null)
            {
                RenderTarget2D           = new RenderTarget2D(Setup.GraphicsDevice, Setup.graphics.PreferredBackBufferWidth, Setup.graphics.PreferredBackBufferHeight, false, Setup.GraphicsDevice.PresentationParameters.BackBufferFormat, DepthFormat.Depth24);
                SceneManager.SceneTexPtr = Scene.GuiRenderer.BindTexture(RenderTarget2D);
            }

            Setup.GraphicsDevice.SetRenderTarget(RenderTarget2D); //Render Target
        }