public override void Draw(Graphics2D g) { Zone zoneOld = roomOld.Room.Zone; Zone zoneNew = roomNew.Room.Zone; if (zoneOld == zoneNew) { // Draw the rooms normally. DrawRooms(g); } else { // Fade between zones. // Switch to the temp render target to draw the new zone. g.End(); g.SetRenderTarget(GameData.RenderTargetGameTemp); g.Begin(GameSettings.DRAW_MODE_DEFAULT); roomOld.Room.Zone = zoneNew; DrawRooms(g); roomOld.Room.Zone = zoneOld; // Switch to main render target to draw the old zone. g.End(); g.SetRenderTarget(GameData.RenderTargetGame); g.Begin(GameSettings.DRAW_MODE_DEFAULT); roomNew.Room.Zone = zoneOld; DrawRooms(g); roomNew.Room.Zone = zoneNew; // Draw the temp render target (with the new zone) at an opacity. float opacity = (float) distance / (float) maxDistance; Color color = Color.White * opacity; g.DrawImage(GameData.RenderTargetGameTemp, Vector2F.Zero, Vector2F.Zero, Vector2F.One, 0.0, color); } }
//----------------------------------------------------------------------------- // Drawing //----------------------------------------------------------------------------- // Called every step to draw the game. public void Draw(Graphics2D g) { g.UseIntegerPrecision = true; // Render the game-state stack to a buffer. g.SetRenderTarget(GameData.RenderTargetGame); g.Begin(GameSettings.DRAW_MODE_DEFAULT); g.Clear(Color.Black); gameStateStack.Draw(g); g.End(); // Draw the buffer to the screen scaled. g.SetRenderTarget(null); g.ResetTranslation(); g.Begin(GameSettings.DRAW_MODE_DEFAULT); g.DrawImage(GameData.RenderTargetGame, Vector2F.Zero, Vector2F.Zero, (Vector2F) gameScale, 0.0); g.End(); }