added culling for performance improvements
This commit is contained in:
parent
9988efca07
commit
00e5b2319f
4 changed files with 13 additions and 8 deletions
|
@ -26,10 +26,10 @@ namespace ThemeParkClicker {
|
|||
|
||||
protected override void LoadContent() {
|
||||
base.LoadContent();
|
||||
|
||||
|
||||
if (!SaveHandler.Load(this))
|
||||
this.Map = new ParkMap(10, 10);
|
||||
|
||||
|
||||
this.Ui = new Ui(this.UiSystem);
|
||||
this.Camera = new Camera(this.GraphicsDevice) {
|
||||
Scale = 5,
|
||||
|
@ -67,7 +67,7 @@ namespace ThemeParkClicker {
|
|||
this.GraphicsDevice.Clear(Color.Black);
|
||||
if (this.DrawMap) {
|
||||
this.SpriteBatch.Begin(SpriteSortMode.Deferred, null, SamplerState.PointClamp, transformMatrix: this.Camera.ViewMatrix);
|
||||
this.Map.Draw(gameTime, this.SpriteBatch, Vector2.Zero, 1, 1);
|
||||
this.Map.Draw(gameTime, this.SpriteBatch, Vector2.Zero, 1, 1, true, this.Camera.GetVisibleRectangle());
|
||||
this.SpriteBatch.End();
|
||||
}
|
||||
base.DoDraw(gameTime);
|
||||
|
|
|
@ -105,11 +105,16 @@ namespace ThemeParkClicker {
|
|||
}
|
||||
}
|
||||
|
||||
public void Draw(GameTime time, SpriteBatch batch, Vector2 position, float scale, float alpha, int additionalRadius = AdditionalRadius) {
|
||||
public void Draw(GameTime time, SpriteBatch batch, Vector2 position, float scale, float alpha, bool showSurroundings, RectangleF visibleArea) {
|
||||
var tileSize = Attraction.TileSize * scale;
|
||||
// draw ground
|
||||
for (var x = -additionalRadius; x < this.Width + additionalRadius; x++) {
|
||||
for (var y = -additionalRadius; y < this.Height + additionalRadius; y++) {
|
||||
var additionalRadius = showSurroundings ? AdditionalRadius : 0;
|
||||
var minX = Math.Max(-additionalRadius, visibleArea.Left / tileSize.X).Floor();
|
||||
var minY = Math.Max(-additionalRadius, visibleArea.Top / tileSize.Y).Floor();
|
||||
var maxX = Math.Min(this.Width + additionalRadius, visibleArea.Right / tileSize.X).Ceil();
|
||||
var maxY = Math.Min(this.Height + additionalRadius, visibleArea.Bottom / tileSize.Y).Ceil();
|
||||
for (var x = minX; x < maxX; x++) {
|
||||
for (var y = minY; y < maxY; y++) {
|
||||
var pos = new Vector2(x, y);
|
||||
var drawPos = position + pos * tileSize;
|
||||
batch.Draw(TilesTexture[0, 0], drawPos, Color.White * alpha, 0, Vector2.Zero, scale, SpriteEffects.None, 0);
|
||||
|
|
|
@ -6,7 +6,7 @@
|
|||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Coroutine" Version="1.0.4" />
|
||||
<PackageReference Include="MLEM.Startup" Version="3.3.3-189" />
|
||||
<PackageReference Include="MLEM.Startup" Version="3.3.3-190" />
|
||||
<PackageReference Include="MonoGame.Framework.Portable" Version="3.7.1.189">
|
||||
<PrivateAssets>all</PrivateAssets>
|
||||
</PackageReference>
|
||||
|
|
|
@ -83,7 +83,7 @@ namespace ThemeParkClicker {
|
|||
var (scaleX, scaleY) = e.DisplayArea.Size / mapSize;
|
||||
var scale = Math.Min(scaleX, scaleY);
|
||||
var pos = e.DisplayArea.Location + (e.DisplayArea.Size - mapSize * scale) / 2;
|
||||
map.Draw(time, batch, pos, scale, alpha, 0);
|
||||
map.Draw(time, batch, pos, scale, alpha, false, new RectangleF(Vector2.Zero, mapSize * scale));
|
||||
},
|
||||
OnPressed = e => {
|
||||
var map = GameImpl.Instance.Map;
|
||||
|
|
Loading…
Reference in a new issue