public void Draw(TileWorld world)
        {
            Engine.GraphicsDevice.Clear(ClearColor);

            //sorting out jerks
            /*camDiff = transform.Position - camDiffLast;
            camDiffLast = transform.Position;
            accum += camDiff.X;
            ++num;
            if(Math.Abs(accum/num - camDiff.X) > accum/num * 0.3)
                Console.WriteLine(world.gt + " " + world.gts + " " + camDiff.X);*/

            DrawWorld(world);
            SpriteBatch.Begin(SpriteSortMode.Deferred, BlendState.AlphaBlend, SamplerState.PointClamp, null, null, null,
                (1 == 0) ? Matrix.Identity : transform.TransformMatrix);
            foreach (RenderableComponent c in renderables)
            {
                switch(c.Type)
                {
                    case "Sprite":
                        Sprite sprite = ((SpriteComponent)c).Sprite;
                        SpriteBatch.Draw(sprite.Texture, world.WorldToPixelCoordinates(c.Owner.Position), sprite.CurrentTextureFrame, sprite.Tint);
                        break;
                }

            }
            SpriteBatch.End();
            renderables.Clear();
            renderAlreadyProcessed = false;
        }
 public void DrawWorld(TileWorld world)
 {
     Area a = world.CurrentArea;
     FloatRectangle r = world.WorldCameraBounds();
     SpriteBatch.Begin(SpriteSortMode.Deferred, BlendState.AlphaBlend, null, null, null, null,
             transform.TransformMatrix);
     //Sprite s;
     for (int y = (int)Math.Floor(r.Top); y <= Math.Ceiling(r.Bottom); ++y)
     {
         for (int x = (int)Math.Floor(r.Left); x <= Math.Ceiling(r.Right)+4; ++x)
         {
             Sprite s = a.GetTile(x, y).Sprite;
             SpriteBatch.Draw(s.Texture, world.WorldToPixelCoordinates(new Vector2(x, y)), s.Tint);
         }
     }
     SpriteBatch.End();
 }