BackgroundCreatureManager and BackgroundSpriteManager can be overridden via Content packages

Changed "topshaft"
This commit is contained in:
Sebastian Broberg
2016-09-03 18:05:26 +02:00
parent 2c51ba50a8
commit 400084f9e5
5 changed files with 70 additions and 33 deletions
@@ -16,23 +16,37 @@ namespace Barotrauma
float checkActiveTimer; float checkActiveTimer;
private List<BackgroundCreaturePrefab> prefabs; private List<BackgroundCreaturePrefab> prefabs = new List<BackgroundCreaturePrefab>();
private List<BackgroundCreature> activeSprites; private List<BackgroundCreature> activeSprites = new List<BackgroundCreature>();
public BackgroundCreatureManager(string configPath) public BackgroundCreatureManager(string configPath)
{ {
activeSprites = new List<BackgroundCreature>(); LoadConfig(configPath);
prefabs = new List<BackgroundCreaturePrefab>(); }
public BackgroundCreatureManager(List<string> files)
XDocument doc = ToolBox.TryLoadXml(configPath); {
if (doc == null || doc.Root == null) return; foreach(var file in files)
foreach (XElement element in doc.Root.Elements())
{ {
prefabs.Add(new BackgroundCreaturePrefab(element)); LoadConfig(file);
} }
} }
private void LoadConfig(string configPath)
{
try
{
XDocument doc = ToolBox.TryLoadXml(configPath);
if (doc == null || doc.Root == null) return;
foreach (XElement element in doc.Root.Elements())
{
prefabs.Add(new BackgroundCreaturePrefab(element));
};
}
catch (Exception e)
{
DebugConsole.ThrowError(String.Format("Failed to load BackgroundCreatures from {0}", configPath), e);
}
}
public void SpawnSprites(int count, Vector2? position = null) public void SpawnSprites(int count, Vector2? position = null)
{ {
activeSprites.Clear(); activeSprites.Clear();
@@ -34,25 +34,39 @@ namespace Barotrauma
{ {
const int GridSize = 1000; const int GridSize = 1000;
private List<BackgroundSpritePrefab> prefabs; private List<BackgroundSpritePrefab> prefabs = new List<BackgroundSpritePrefab>();
//private List<BackgroundSprite> sprites;
private List<BackgroundSprite>[,] sprites; private List<BackgroundSprite>[,] sprites;
public BackgroundSpriteManager(string configPath) public BackgroundSpriteManager(string configPath)
{ {
//sprites = new List<BackgroundSprite>[2,2](); LoadConfig(configPath);
prefabs = new List<BackgroundSpritePrefab>(); }
public BackgroundSpriteManager(List<string> files)
XDocument doc = ToolBox.TryLoadXml(configPath); {
if (doc == null || doc.Root == null) return; foreach (var file in files)
foreach (XElement element in doc.Root.Elements())
{ {
prefabs.Add(new BackgroundSpritePrefab(element)); LoadConfig(file);
} }
} }
private void LoadConfig(string configPath)
{
try
{
XDocument doc = ToolBox.TryLoadXml(configPath);
if (doc == null || doc.Root == null) return;
foreach (XElement element in doc.Root.Elements())
{
prefabs.Add(new BackgroundSpritePrefab(element));
}
}
catch (Exception e)
{
DebugConsole.ThrowError(String.Format("Failed to load BackgroundSprites from {0}", configPath), e);
}
}
public void PlaceSprites(Level level, int amount) public void PlaceSprites(Level level, int amount)
{ {
sprites = new List<BackgroundSprite>[ sprites = new List<BackgroundSprite>[
+1 -1
View File
@@ -10,7 +10,7 @@ namespace Barotrauma
{ {
public enum ContentType public enum ContentType
{ {
None, Jobs, Item, Character, Structure, Executable, LocationTypes, RandomEvents, Missions None, Jobs, Item, Character, Structure, Executable, LocationTypes, RandomEvents, Missions, BackgroundCreaturePrefabs, BackgroundSpritePrefabs
} }
public class ContentPackage public class ContentPackage
+15 -10
View File
@@ -30,7 +30,7 @@ namespace Barotrauma
public LevelRenderer(Level level) public LevelRenderer(Level level)
{ {
if (shaftTexture == null) shaftTexture = TextureLoader.FromFile("Content/Map/shaft.png"); if (shaftTexture == null) shaftTexture = TextureLoader.FromFile("Content/Map/iceWall.png");
if (background==null) if (background==null)
{ {
@@ -50,7 +50,12 @@ namespace Barotrauma
if (backgroundSpriteManager==null) if (backgroundSpriteManager==null)
{ {
backgroundSpriteManager = new BackgroundSpriteManager("Content/BackgroundSprites/BackgroundSpritePrefabs.xml");
var files = GameMain.SelectedPackage.GetFilesOfType(ContentType.BackgroundSpritePrefabs);
if (files.Count > 0)
backgroundSpriteManager = new BackgroundSpriteManager(files);
else
backgroundSpriteManager = new BackgroundSpriteManager("Content/BackgroundSprites/BackgroundSpritePrefabs.xml");
} }
this.level = level; this.level = level;
@@ -173,22 +178,21 @@ namespace Barotrauma
Vector2 pos = new Vector2(0.0f, -level.Size.Y);// level.EndPosition; Vector2 pos = new Vector2(0.0f, -level.Size.Y);// level.EndPosition;
if (GameMain.GameScreen.Cam.WorldView.Y < -pos.Y - 512) return; if (GameMain.GameScreen.Cam.WorldView.Y < -pos.Y - 1024) return;
pos.X = GameMain.GameScreen.Cam.WorldView.X -512.0f; pos.X = GameMain.GameScreen.Cam.WorldView.X -1024;
int width = (int)(Math.Ceiling(GameMain.GameScreen.Cam.WorldView.Width / 512.0f + 2.0f) * 512.0f); int width = (int)(Math.Ceiling(GameMain.GameScreen.Cam.WorldView.Width / 1024 + 4.0f) * 1024);
GUI.DrawRectangle(spriteBatch,new Rectangle((int)(MathUtils.Round(pos.X, 1024)), (int)-GameMain.GameScreen.Cam.WorldView.Y, width, (int)(GameMain.GameScreen.Cam.WorldView.Y - level.Size.Y) + 30),Color.Black, true);
spriteBatch.Draw(shaftTexture, spriteBatch.Draw(shaftTexture,
new Rectangle((int)(MathUtils.Round(pos.X, 512.0f)), (int)pos.Y, width, 512), new Rectangle((int)(MathUtils.Round(pos.X, 1024)), (int)pos.Y, width, 1024),
new Rectangle(0, 0, width, 256), new Rectangle(0, 0, width, 1024),
level.BackgroundColor, 0.0f, level.BackgroundColor, 0.0f,
Vector2.Zero, Vector2.Zero,
SpriteEffects.None, 0.0f); SpriteEffects.None, 0.0f);
GUI.DrawRectangle(spriteBatch,
new Rectangle((int)(MathUtils.Round(pos.X, 512.0f)), (int)-GameMain.GameScreen.Cam.WorldView.Y, width, (int)(GameMain.GameScreen.Cam.WorldView.Y - level.Size.Y)+10),
Color.Black, true );
//background.DrawTiled(spriteBatch, //background.DrawTiled(spriteBatch,
// (backgroundPos.Y < 0) ? new Vector2(0.0f, -backgroundPos.Y) : Vector2.Zero, // (backgroundPos.Y < 0) ? new Vector2(0.0f, -backgroundPos.Y) : Vector2.Zero,
@@ -199,6 +203,7 @@ namespace Barotrauma
public void RenderWalls(GraphicsDevice graphicsDevice, Camera cam) public void RenderWalls(GraphicsDevice graphicsDevice, Camera cam)
{ {
if (wallVertices == null) return; if (wallVertices == null) return;
basicEffect.World = cam.ShaderTransform basicEffect.World = cam.ShaderTransform
+5 -1
View File
@@ -34,7 +34,11 @@ namespace Barotrauma
renderTargetWater = new RenderTarget2D(graphics, GameMain.GraphicsWidth, GameMain.GraphicsHeight); renderTargetWater = new RenderTarget2D(graphics, GameMain.GraphicsWidth, GameMain.GraphicsHeight);
renderTargetAir = new RenderTarget2D(graphics, GameMain.GraphicsWidth, GameMain.GraphicsHeight); renderTargetAir = new RenderTarget2D(graphics, GameMain.GraphicsWidth, GameMain.GraphicsHeight);
BackgroundCreatureManager = new BackgroundCreatureManager("Content/BackgroundSprites/BackgroundCreaturePrefabs.xml"); var files = GameMain.SelectedPackage.GetFilesOfType(ContentType.BackgroundCreaturePrefabs);
if(files.Count > 0)
BackgroundCreatureManager = new BackgroundCreatureManager(files);
else
BackgroundCreatureManager = new BackgroundCreatureManager("Content/BackgroundSprites/BackgroundCreaturePrefabs.xml");
#if LINUX #if LINUX
var blurEffect = content.Load<Effect>("blurshader_opengl"); var blurEffect = content.Load<Effect>("blurshader_opengl");