More efficient culling, workaround for null exception in CombatMission.GetTeamName
This commit is contained in:
@@ -17,7 +17,7 @@ namespace Barotrauma
|
|||||||
|
|
||||||
private string[] descriptions;
|
private string[] descriptions;
|
||||||
|
|
||||||
private static string[] teamNames;
|
private static string[] teamNames = { "Team A", "Team B" };
|
||||||
|
|
||||||
public override bool AllowRespawn
|
public override bool AllowRespawn
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -59,6 +59,8 @@ namespace Barotrauma
|
|||||||
}
|
}
|
||||||
private static List<Submarine> loaded = new List<Submarine>();
|
private static List<Submarine> loaded = new List<Submarine>();
|
||||||
|
|
||||||
|
private static List<MapEntity> visibleEntities;
|
||||||
|
|
||||||
private SubmarineBody subBody;
|
private SubmarineBody subBody;
|
||||||
|
|
||||||
public readonly List<Submarine> DockedTo;
|
public readonly List<Submarine> DockedTo;
|
||||||
@@ -288,36 +290,58 @@ namespace Barotrauma
|
|||||||
|
|
||||||
//drawing ----------------------------------------------------
|
//drawing ----------------------------------------------------
|
||||||
|
|
||||||
public static void Draw(SpriteBatch spriteBatch, bool editing = false, List<Submarine> visibleSubs = null)
|
public static void CullEntities(Camera cam)
|
||||||
{
|
{
|
||||||
for (int i = 0; i < MapEntity.mapEntityList.Count; i++ )
|
List<Submarine> visibleSubs = new List<Submarine>();
|
||||||
|
foreach (Submarine sub in Submarine.Loaded)
|
||||||
{
|
{
|
||||||
if (visibleSubs!=null && MapEntity.mapEntityList[i].Submarine!=null)
|
Rectangle worldBorders = new Rectangle(
|
||||||
{
|
sub.Borders.X + (int)sub.WorldPosition.X - 500,
|
||||||
if (!visibleSubs.Contains(MapEntity.mapEntityList[i].Submarine)) continue;
|
sub.Borders.Y + (int)sub.WorldPosition.Y + 500,
|
||||||
}
|
sub.Borders.Width + 1000,
|
||||||
|
sub.Borders.Height + 1000);
|
||||||
|
|
||||||
MapEntity.mapEntityList[i].Draw(spriteBatch, editing);
|
|
||||||
|
if (Submarine.RectsOverlap(worldBorders, cam.WorldView))
|
||||||
|
{
|
||||||
|
visibleSubs.Add(sub);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
visibleEntities = new List<MapEntity>();
|
||||||
|
foreach (MapEntity me in MapEntity.mapEntityList)
|
||||||
|
{
|
||||||
|
if (me.Submarine == null || visibleSubs.Contains(me.Submarine))
|
||||||
|
{
|
||||||
|
visibleEntities.Add(me);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void DrawFront(SpriteBatch spriteBatch, bool editing = false, Predicate<MapEntity> predicate = null, List<Submarine> visibleSubs = null)
|
public static void Draw(SpriteBatch spriteBatch, bool editing = false)
|
||||||
{
|
{
|
||||||
for (int i = 0; i < MapEntity.mapEntityList.Count; i++)
|
var entitiesToRender = !editing && visibleEntities != null ? visibleEntities : MapEntity.mapEntityList;
|
||||||
{
|
|
||||||
if (!MapEntity.mapEntityList[i].DrawOverWater) continue;
|
|
||||||
|
|
||||||
if (visibleSubs != null && MapEntity.mapEntityList[i].Submarine != null)
|
foreach (MapEntity e in entitiesToRender)
|
||||||
{
|
{
|
||||||
if (!visibleSubs.Contains(MapEntity.mapEntityList[i].Submarine)) continue;
|
e.Draw(spriteBatch, editing);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void DrawFront(SpriteBatch spriteBatch, bool editing = false, Predicate<MapEntity> predicate = null)
|
||||||
|
{
|
||||||
|
var entitiesToRender = !editing && visibleEntities != null ? visibleEntities : MapEntity.mapEntityList;
|
||||||
|
|
||||||
|
foreach (MapEntity e in entitiesToRender)
|
||||||
|
{
|
||||||
|
if (!e.DrawOverWater) continue;
|
||||||
|
|
||||||
if (predicate != null)
|
if (predicate != null)
|
||||||
{
|
{
|
||||||
if (!predicate(MapEntity.mapEntityList[i])) continue;
|
if (!predicate(e)) continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
MapEntity.mapEntityList[i].Draw(spriteBatch, editing, false);
|
e.Draw(spriteBatch, editing, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (GameMain.DebugDraw)
|
if (GameMain.DebugDraw)
|
||||||
@@ -349,18 +373,14 @@ namespace Barotrauma
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void DrawDamageable(SpriteBatch spriteBatch, Effect damageEffect, bool editing = false, List<Submarine> visibleSubs = null)
|
public static void DrawDamageable(SpriteBatch spriteBatch, Effect damageEffect, bool editing = false)
|
||||||
{
|
{
|
||||||
for (int i = 0; i < MapEntity.mapEntityList.Count; i++)
|
var entitiesToRender = !editing && visibleEntities != null ? visibleEntities : MapEntity.mapEntityList;
|
||||||
|
|
||||||
|
foreach (MapEntity e in entitiesToRender)
|
||||||
{
|
{
|
||||||
if (visibleSubs != null && MapEntity.mapEntityList[i].Submarine != null)
|
if (e.DrawDamageEffect)
|
||||||
{
|
e.DrawDamage(spriteBatch, damageEffect);
|
||||||
if (!visibleSubs.Contains(MapEntity.mapEntityList[i].Submarine)) continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
if (MapEntity.mapEntityList[i].DrawDamageEffect)
|
|
||||||
MapEntity.mapEntityList[i].DrawDamage(spriteBatch, damageEffect);
|
|
||||||
}
|
}
|
||||||
if (damageEffect != null)
|
if (damageEffect != null)
|
||||||
{
|
{
|
||||||
@@ -370,23 +390,20 @@ namespace Barotrauma
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public static void DrawBack(SpriteBatch spriteBatch, bool editing = false, Predicate<MapEntity> predicate = null, List<Submarine> visibleSubs = null)
|
public static void DrawBack(SpriteBatch spriteBatch, bool editing = false, Predicate<MapEntity> predicate = null)
|
||||||
{
|
{
|
||||||
for (int i = 0; i < MapEntity.mapEntityList.Count; i++)
|
var entitiesToRender = !editing && visibleEntities != null ? visibleEntities : MapEntity.mapEntityList;
|
||||||
{
|
|
||||||
if (!MapEntity.mapEntityList[i].DrawBelowWater) continue;
|
|
||||||
|
|
||||||
if (visibleSubs != null && MapEntity.mapEntityList[i].Submarine != null)
|
foreach (MapEntity e in entitiesToRender)
|
||||||
{
|
{
|
||||||
if (!visibleSubs.Contains(MapEntity.mapEntityList[i].Submarine)) continue;
|
if (!e.DrawBelowWater) continue;
|
||||||
}
|
|
||||||
|
|
||||||
if (predicate != null)
|
if (predicate != null)
|
||||||
{
|
{
|
||||||
if (!predicate(MapEntity.mapEntityList[i])) continue;
|
if (!predicate(e)) continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
MapEntity.mapEntityList[i].Draw(spriteBatch, editing, true);
|
e.Draw(spriteBatch, editing, true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1160,6 +1177,8 @@ namespace Barotrauma
|
|||||||
|
|
||||||
loaded.Clear();
|
loaded.Clear();
|
||||||
|
|
||||||
|
visibleEntities = null;
|
||||||
|
|
||||||
if (GameMain.GameScreen.Cam != null) GameMain.GameScreen.Cam.TargetPos = Vector2.Zero;
|
if (GameMain.GameScreen.Cam != null) GameMain.GameScreen.Cam.TargetPos = Vector2.Zero;
|
||||||
|
|
||||||
Entity.RemoveAll();
|
Entity.RemoveAll();
|
||||||
@@ -1179,6 +1198,8 @@ namespace Barotrauma
|
|||||||
|
|
||||||
subBody = null;
|
subBody = null;
|
||||||
|
|
||||||
|
visibleEntities = null;
|
||||||
|
|
||||||
if (MainSub == this) MainSub = null;
|
if (MainSub == this) MainSub = null;
|
||||||
if (MainSubs[1] == this) MainSubs[1] = null;
|
if (MainSubs[1] == this) MainSubs[1] = null;
|
||||||
|
|
||||||
|
|||||||
@@ -114,6 +114,7 @@ namespace Barotrauma
|
|||||||
closestSub.ApplyForce(targetMovement * closestSub.SubBody.Body.Mass * 100.0f);
|
closestSub.ApplyForce(targetMovement * closestSub.SubBody.Body.Mass * 100.0f);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
if (GameMain.GameSession != null) GameMain.GameSession.Update((float)deltaTime);
|
if (GameMain.GameSession != null) GameMain.GameSession.Update((float)deltaTime);
|
||||||
|
|
||||||
if (Level.Loaded != null) Level.Loaded.Update((float)deltaTime);
|
if (Level.Loaded != null) Level.Loaded.Update((float)deltaTime);
|
||||||
@@ -164,18 +165,17 @@ namespace Barotrauma
|
|||||||
|
|
||||||
GameMain.World.Step((float)deltaTime);
|
GameMain.World.Step((float)deltaTime);
|
||||||
|
|
||||||
|
|
||||||
if (!PlayerInput.LeftButtonHeld())
|
if (!PlayerInput.LeftButtonHeld())
|
||||||
{
|
{
|
||||||
Inventory.draggingSlot = null;
|
Inventory.draggingSlot = null;
|
||||||
Inventory.draggingItem = null;
|
Inventory.draggingItem = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public override void Draw(double deltaTime, GraphicsDevice graphics, SpriteBatch spriteBatch)
|
public override void Draw(double deltaTime, GraphicsDevice graphics, SpriteBatch spriteBatch)
|
||||||
{
|
{
|
||||||
cam.UpdateTransform(true);
|
cam.UpdateTransform(true);
|
||||||
|
Submarine.CullEntities(cam);
|
||||||
|
|
||||||
DrawMap(graphics, spriteBatch);
|
DrawMap(graphics, spriteBatch);
|
||||||
|
|
||||||
@@ -258,7 +258,7 @@ namespace Barotrauma
|
|||||||
null, null, null, null,
|
null, null, null, null,
|
||||||
cam.Transform);
|
cam.Transform);
|
||||||
|
|
||||||
Submarine.DrawBack(spriteBatch, false, s => s is Structure, visibleSubs);
|
Submarine.DrawBack(spriteBatch, false, s => s is Structure);
|
||||||
|
|
||||||
spriteBatch.End();
|
spriteBatch.End();
|
||||||
|
|
||||||
@@ -274,7 +274,7 @@ namespace Barotrauma
|
|||||||
null, null, null, null,
|
null, null, null, null,
|
||||||
cam.Transform);
|
cam.Transform);
|
||||||
|
|
||||||
Submarine.DrawBack(spriteBatch, false, s => !(s is Structure), visibleSubs);
|
Submarine.DrawBack(spriteBatch, false, s => !(s is Structure));
|
||||||
|
|
||||||
foreach (Character c in Character.CharacterList) c.Draw(spriteBatch);
|
foreach (Character c in Character.CharacterList) c.Draw(spriteBatch);
|
||||||
|
|
||||||
@@ -355,8 +355,8 @@ namespace Barotrauma
|
|||||||
null, null, null,
|
null, null, null,
|
||||||
cam.Transform);
|
cam.Transform);
|
||||||
|
|
||||||
Submarine.DrawDamageable(spriteBatch, null, false, visibleSubs);
|
Submarine.DrawDamageable(spriteBatch, null, false);
|
||||||
Submarine.DrawFront(spriteBatch, false, s => s is Structure, visibleSubs);
|
Submarine.DrawFront(spriteBatch, false, s => s is Structure);
|
||||||
|
|
||||||
spriteBatch.End();
|
spriteBatch.End();
|
||||||
|
|
||||||
@@ -389,7 +389,7 @@ namespace Barotrauma
|
|||||||
null, null, null,
|
null, null, null,
|
||||||
cam.Transform);
|
cam.Transform);
|
||||||
|
|
||||||
Submarine.DrawFront(spriteBatch, false, null, visibleSubs);
|
Submarine.DrawFront(spriteBatch, false, null);
|
||||||
|
|
||||||
spriteBatch.End();
|
spriteBatch.End();
|
||||||
|
|
||||||
@@ -399,7 +399,7 @@ namespace Barotrauma
|
|||||||
damageEffect,
|
damageEffect,
|
||||||
cam.Transform);
|
cam.Transform);
|
||||||
|
|
||||||
Submarine.DrawDamageable(spriteBatch, damageEffect, false, visibleSubs);
|
Submarine.DrawDamageable(spriteBatch, damageEffect, false);
|
||||||
|
|
||||||
spriteBatch.End();
|
spriteBatch.End();
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user