diff --git a/Subsurface/Source/Characters/BackgroundSprite/BackgroundCreatureManager.cs b/Subsurface/Source/Characters/BackgroundSprite/BackgroundCreatureManager.cs index 1153c3b6b..4a3de9511 100644 --- a/Subsurface/Source/Characters/BackgroundSprite/BackgroundCreatureManager.cs +++ b/Subsurface/Source/Characters/BackgroundSprite/BackgroundCreatureManager.cs @@ -16,23 +16,37 @@ namespace Barotrauma float checkActiveTimer; - private List prefabs; - private List activeSprites; + private List prefabs = new List(); + private List activeSprites = new List(); public BackgroundCreatureManager(string configPath) { - activeSprites = new List(); - prefabs = new List(); - - XDocument doc = ToolBox.TryLoadXml(configPath); - if (doc == null || doc.Root == null) return; - - foreach (XElement element in doc.Root.Elements()) + LoadConfig(configPath); + } + public BackgroundCreatureManager(List files) + { + foreach(var file in files) { - 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) { activeSprites.Clear(); diff --git a/Subsurface/Source/Characters/BackgroundSprite/BackgroundSpriteManager.cs b/Subsurface/Source/Characters/BackgroundSprite/BackgroundSpriteManager.cs index a69c83229..67521f327 100644 --- a/Subsurface/Source/Characters/BackgroundSprite/BackgroundSpriteManager.cs +++ b/Subsurface/Source/Characters/BackgroundSprite/BackgroundSpriteManager.cs @@ -34,25 +34,39 @@ namespace Barotrauma { const int GridSize = 1000; - private List prefabs; - //private List sprites; + private List prefabs = new List(); + private List[,] sprites; public BackgroundSpriteManager(string configPath) { - //sprites = new List[2,2](); - prefabs = new List(); - - XDocument doc = ToolBox.TryLoadXml(configPath); - if (doc == null || doc.Root == null) return; - - foreach (XElement element in doc.Root.Elements()) + LoadConfig(configPath); + } + public BackgroundSpriteManager(List files) + { + foreach (var file in files) { - 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) { sprites = new List[ diff --git a/Subsurface/Source/ContentPackage.cs b/Subsurface/Source/ContentPackage.cs index caa18b81c..52a3397de 100644 --- a/Subsurface/Source/ContentPackage.cs +++ b/Subsurface/Source/ContentPackage.cs @@ -10,7 +10,7 @@ namespace Barotrauma { 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 diff --git a/Subsurface/Source/Map/Levels/LevelRenderer.cs b/Subsurface/Source/Map/Levels/LevelRenderer.cs index 22e4a433a..6324bcd89 100644 --- a/Subsurface/Source/Map/Levels/LevelRenderer.cs +++ b/Subsurface/Source/Map/Levels/LevelRenderer.cs @@ -30,7 +30,7 @@ namespace Barotrauma 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) { @@ -50,7 +50,12 @@ namespace Barotrauma 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; @@ -173,22 +178,21 @@ namespace Barotrauma 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, - new Rectangle((int)(MathUtils.Round(pos.X, 512.0f)), (int)pos.Y, width, 512), - new Rectangle(0, 0, width, 256), + new Rectangle((int)(MathUtils.Round(pos.X, 1024)), (int)pos.Y, width, 1024), + new Rectangle(0, 0, width, 1024), level.BackgroundColor, 0.0f, Vector2.Zero, 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, // (backgroundPos.Y < 0) ? new Vector2(0.0f, -backgroundPos.Y) : Vector2.Zero, @@ -199,6 +203,7 @@ namespace Barotrauma public void RenderWalls(GraphicsDevice graphicsDevice, Camera cam) { + if (wallVertices == null) return; basicEffect.World = cam.ShaderTransform diff --git a/Subsurface/Source/Screens/GameScreen.cs b/Subsurface/Source/Screens/GameScreen.cs index dd0880ec7..611616aad 100644 --- a/Subsurface/Source/Screens/GameScreen.cs +++ b/Subsurface/Source/Screens/GameScreen.cs @@ -33,8 +33,12 @@ namespace Barotrauma renderTarget = new RenderTarget2D(graphics, GameMain.GraphicsWidth, GameMain.GraphicsHeight); renderTargetWater = 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 var blurEffect = content.Load("blurshader_opengl");