Skip to content

Commit 7f7d5fc

Browse files
committed
Optimize memory allocations away from render loop
1 parent 7648911 commit 7f7d5fc

File tree

3 files changed

+31
-16
lines changed

3 files changed

+31
-16
lines changed

src/TSMapEditor/Constants.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ namespace TSMapEditor
44
{
55
public static class Constants
66
{
7-
public const string ReleaseVersion = "1.6.5";
7+
public const string ReleaseVersion = "1.6.6";
88

99
public static int CellSizeX = 48;
1010
public static int CellSizeY = 24;

src/TSMapEditor/Rendering/MapView.cs

Lines changed: 19 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -620,13 +620,29 @@ public void DrawTerrainTileAndRegisterObjects(MapTile tile)
620620
}
621621

622622
if ((EditorState.RenderObjectFlags & RenderObjectFlags.Infantry) == RenderObjectFlags.Infantry)
623-
tile.DoForAllInfantry(AddGameObjectToRender);
623+
{
624+
for (int i = 0; i < tile.Infantry.Length; i++)
625+
{
626+
if (tile.Infantry[i] != null)
627+
AddGameObjectToRender(tile.Infantry[i]);
628+
}
629+
}
624630

625631
if ((EditorState.RenderObjectFlags & RenderObjectFlags.Aircraft) == RenderObjectFlags.Aircraft)
626-
tile.DoForAllAircraft(AddGameObjectToRender);
632+
{
633+
for (int i = 0; i < tile.Aircraft.Count; i++)
634+
{
635+
AddGameObjectToRender(tile.Infantry[i]);
636+
}
637+
}
627638

628639
if ((EditorState.RenderObjectFlags & RenderObjectFlags.Vehicles) == RenderObjectFlags.Vehicles)
629-
tile.DoForAllVehicles(AddGameObjectToRender);
640+
{
641+
for (int i = 0; i < tile.Vehicles.Count; i++)
642+
{
643+
AddGameObjectToRender(tile.Vehicles[i]);
644+
}
645+
}
630646

631647
if ((EditorState.RenderObjectFlags & RenderObjectFlags.TerrainObjects) == RenderObjectFlags.TerrainObjects && tile.TerrainObject != null)
632648
{

src/TSMapEditor/Rendering/ObjectRenderers/BuildingRenderer.cs

Lines changed: 11 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -10,12 +10,11 @@ public sealed class BuildingRenderer : ObjectRenderer<Structure>
1010
{
1111
public BuildingRenderer(RenderDependencies renderDependencies) : base(renderDependencies)
1212
{
13-
buildingAnimRenderer = new AnimRenderer(renderDependencies);
1413
}
1514

1615
protected override Color ReplacementColor => Color.Yellow;
1716

18-
private AnimRenderer buildingAnimRenderer;
17+
private List<Animation> animationList = new List<Animation>();
1918

2019
DepthRectangle cachedDepth;
2120

@@ -302,22 +301,22 @@ protected override void Render(Structure gameObject, Point2D drawPoint, in Commo
302301
float depthAddition = Constants.DepthEpsilon * ObjectDepthAdjustments.Building;
303302

304303
// Form the anims list
305-
var animsList = new List<Animation>(gameObject.Anims.Length + gameObject.PowerUpAnims.Length + 1);
306-
animsList.AddRange(gameObject.Anims);
307-
animsList.AddRange(gameObject.PowerUpAnims);
304+
animationList.Clear();
305+
animationList.AddRange(gameObject.Anims);
306+
animationList.AddRange(gameObject.PowerUpAnims);
308307
if (gameObject.TurretAnim != null)
309-
animsList.Add(gameObject.TurretAnim);
310-
308+
animationList.Add(gameObject.TurretAnim);
309+
311310
// Sort the anims according to their settings
312-
animsList.Sort((anim1, anim2) =>
311+
animationList.Sort((anim1, anim2) =>
313312
anim1.BuildingAnimDrawConfig.SortValue.CompareTo(anim2.BuildingAnimDrawConfig.SortValue));
314313

315314
bool affectedByAmbient = !affectedByLighting;
316315

317316
// The building itself has an offset of 0, so first draw all anims with sort values < 0
318-
for (int i = 0; i < animsList.Count; i++)
317+
for (int i = 0; i < animationList.Count; i++)
319318
{
320-
var anim = animsList[i];
319+
var anim = animationList[i];
321320

322321
if (anim.BuildingAnimDrawConfig.SortValue < 0)
323322
{
@@ -348,9 +347,9 @@ protected override void Render(Structure gameObject, Point2D drawPoint, in Commo
348347
DrawFoundationLines(gameObject);
349348

350349
// Then draw all anims with sort values >= 0
351-
for (int i = 0; i < animsList.Count; i++)
350+
for (int i = 0; i < animationList.Count; i++)
352351
{
353-
var anim = animsList[i];
352+
var anim = animationList[i];
354353

355354
if (anim.BuildingAnimDrawConfig.SortValue >= 0)
356355
{

0 commit comments

Comments
 (0)