diff --git a/Server/Config/MapParameters/MainLocation/Desert.json b/Server/Config/MapParameters/MainLocation/Desert.json index 6fee87b..e6081e6 100644 --- a/Server/Config/MapParameters/MainLocation/Desert.json +++ b/Server/Config/MapParameters/MainLocation/Desert.json @@ -27,11 +27,13 @@ { "Name": "Salt Pan", "Color": "WhiteSmoke", + "BackgroundImage": "../assets/background/desert.jpg", "MinTemperature": 0.0, "MaxTemperature": 1.0, "Locations": [ { "Name": "Town", + "BackgroundImage": "../assets/background/cementary.jpg", "Weight": 10, "Mult": 1.0 } @@ -48,11 +50,13 @@ { "Name": "Shifting Dunes", "Color": "SandyBrown", + "BackgroundImage": "../assets/background/desert.jpg", "MinTemperature": 0.7, "MaxTemperature": 1.0, "Locations": [ { "Name": "Town", + "BackgroundImage": "../assets/background/cementary.jpg", "Weight": 10, "Mult": 1.0 } @@ -61,11 +65,13 @@ { "Name": "Stable Dunes", "Color": "Goldenrod", + "BackgroundImage": "../assets/background/desert.jpg", "MinTemperature": 0.3, "MaxTemperature": 0.7, "Locations": [ { "Name": "Town", + "BackgroundImage": "../assets/background/cementary.jpg", "Weight": 15, "Mult": 1.0 } @@ -74,11 +80,13 @@ { "Name": "Gravel Plains", "Color": "DarkGray", + "BackgroundImage": "../assets/background/desert.jpg", "MinTemperature": 0.0, "MaxTemperature": 0.3, "Locations": [ { "Name": "Town", + "BackgroundImage": "../assets/background/cementary.jpg", "Weight": 20, "Mult": 1.0 } @@ -95,11 +103,13 @@ { "Name": "Sandstone Outcrops", "Color": "Peru", + "BackgroundImage": "../assets/background/desert.jpg", "MinTemperature": 0.6, "MaxTemperature": 1.0, "Locations": [ { "Name": "Town", + "BackgroundImage": "../assets/background/cementary.jpg", "Weight": 15, "Mult": 1.0 } @@ -108,11 +118,13 @@ { "Name": "Desert Pavement", "Color": "Sienna", + "BackgroundImage": "../assets/background/desert.jpg", "MinTemperature": 0.3, "MaxTemperature": 0.6, "Locations": [ { "Name": "Town", + "BackgroundImage": "../assets/background/cementary.jpg", "Weight": 20, "Mult": 1.0 } @@ -121,11 +133,13 @@ { "Name": "Fossil Beds", "Color": "BurlyWood", + "BackgroundImage": "../assets/background/desert.jpg", "MinTemperature": 0.0, "MaxTemperature": 0.3, "Locations": [ { "Name": "Town", + "BackgroundImage": "../assets/background/cementary.jpg", "Weight": 25, "Mult": 1.0 } @@ -142,11 +156,13 @@ { "Name": "Sandstone Mesa", "Color": "Chocolate", + "BackgroundImage": "../assets/background/desert.jpg", "MinTemperature": 0.5, "MaxTemperature": 1.0, "Locations": [ { "Name": "Town", + "BackgroundImage": "../assets/background/cementary.jpg", "Weight": 10, "Mult": 1.0 } @@ -155,11 +171,13 @@ { "Name": "Petrified Forest", "Color": "SaddleBrown", + "BackgroundImage": "../assets/background/desert.jpg", "MinTemperature": 0.2, "MaxTemperature": 0.5, "Locations": [ { "Name": "Town", + "BackgroundImage": "../assets/background/cementary.jpg", "Weight": 15, "Mult": 1.0 } @@ -168,11 +186,13 @@ { "Name": "Canyon Lands", "Color": "Maroon", + "BackgroundImage": "../assets/background/desert.jpg", "MinTemperature": 0.0, "MaxTemperature": 0.2, "Locations": [ { "Name": "Town", + "BackgroundImage": "../assets/background/cementary.jpg", "Weight": 20, "Mult": 1.0 } diff --git a/Server/Config/MapParameters/MainLocation/Lava.json b/Server/Config/MapParameters/MainLocation/Lava.json index 88c864f..7150400 100644 --- a/Server/Config/MapParameters/MainLocation/Lava.json +++ b/Server/Config/MapParameters/MainLocation/Lava.json @@ -27,16 +27,19 @@ { "Name": "Molten Core", "Color": "DarkRed", + "BackgroundImage": "../assets/background/lava.jpg", "MinTemperature": 0.0, "MaxTemperature": 1.0, "Locations": [ { "Name": "Town", + "BackgroundImage": "../assets/background/church.jpg", "Weight": 0, "Mult": 0.0 }, { "Name": "Cave", + "BackgroundImage": "../assets/background/swamp.jpg", "Weight": 0, "Mult": 0.0 } @@ -53,16 +56,19 @@ { "Name": "Lava Rivers", "Color": "Red", + "BackgroundImage": "../assets/background/lava.jpg", "MinTemperature": 0.0, "MaxTemperature": 1.0, "Locations": [ { "Name": "Town", + "BackgroundImage": "../assets/background/church.jpg", "Weight": 20, "Mult": 0.6 }, { "Name": "Cave", + "BackgroundImage": "../assets/background/swamp.jpg", "Weight": 20, "Mult": 0.6 } @@ -79,16 +85,19 @@ { "Name": "Volcanic Ash", "Color": "Firebrick", + "BackgroundImage": "../assets/background/lava.jpg", "MinTemperature": 0.0, "MaxTemperature": 1.0, "Locations": [ { "Name": "Town", + "BackgroundImage": "../assets/background/church.jpg", "Weight": 4, "Mult": 1.0 }, { "Name": "Cave", + "BackgroundImage": "../assets/background/swamp.jpg", "Weight": 13, "Mult": 1.0 } @@ -105,16 +114,19 @@ { "Name": "Obsidian Fields", "Color": "Maroon", + "BackgroundImage": "../assets/background/lava.jpg", "MinTemperature": 0.0, "MaxTemperature": 1.0, "Locations": [ { "Name": "Town", + "BackgroundImage": "../assets/background/church.jpg", "Weight": 11, "Mult": 1.0 }, { "Name": "Cave", + "BackgroundImage": "../assets/background/swamp.jpg", "Weight": 11, "Mult": 1.0 } @@ -131,16 +143,19 @@ { "Name": "Smoldering Craters", "Color": "OrangeRed", + "BackgroundImage": "../assets/background/lava.jpg", "MinTemperature": 0.7, "MaxTemperature": 1.0, "Locations": [ { "Name": "Town", + "BackgroundImage": "../assets/background/church.jpg", "Weight": 9, "Mult": 0.7 }, { "Name": "Cave", + "BackgroundImage": "../assets/background/swamp.jpg", "Weight": 9, "Mult": 0.7 } @@ -149,17 +164,20 @@ { "Name": "Basalt Columns", "Color": "DarkSlateGray", + "BackgroundImage": "../assets/background/lava.jpg", "MinTemperature": 0.3, "MaxTemperature": 0.7, "Walkable": false, "Locations": [ { "Name": "Town", + "BackgroundImage": "../assets/background/church.jpg", "Weight": 9, "Mult": 1.0 }, { "Name": "Cave", + "BackgroundImage": "../assets/background/swamp.jpg", "Weight": 9, "Mult": 1.0 } @@ -168,16 +186,19 @@ { "Name": "Charred Wasteland", "Color": "Sienna", + "BackgroundImage": "../assets/background/lava.jpg", "MinTemperature": 0.0, "MaxTemperature": 0.3, "Locations": [ { "Name": "Town", + "BackgroundImage": "../assets/background/church.jpg", "Weight": 7, "Mult": 1.0 }, { "Name": "Cave", + "BackgroundImage": "../assets/background/swamp.jpg", "Weight": 5, "Mult": 1.0 } @@ -194,16 +215,19 @@ { "Name": "Fumarole Fields", "Color": "DarkGray", + "BackgroundImage": "../assets/background/lava.jpg", "MinTemperature": 0.6, "MaxTemperature": 1.0, "Locations": [ { "Name": "Town", + "BackgroundImage": "../assets/background/church.jpg", "Weight": 5, "Mult": 1.0 }, { "Name": "Cave", + "BackgroundImage": "../assets/background/swamp.jpg", "Weight": 5, "Mult": 1.0 } @@ -212,16 +236,19 @@ { "Name": "Magma Chambers", "Color": "Crimson", + "BackgroundImage": "../assets/background/lava.jpg", "MinTemperature": 0.3, "MaxTemperature": 0.6, "Locations": [ { "Name": "Town", + "BackgroundImage": "../assets/background/church.jpg", "Weight": 4, "Mult": 1.0 }, { "Name": "Cave", + "BackgroundImage": "../assets/background/swamp.jpg", "Weight": 4, "Mult": 1.0 } @@ -230,16 +257,19 @@ { "Name": "Sulfuric Rocks", "Color": "Goldenrod", + "BackgroundImage": "../assets/background/lava.jpg", "MinTemperature": 0.0, "MaxTemperature": 0.3, "Locations": [ { "Name": "Town", + "BackgroundImage": "../assets/background/church.jpg", "Weight": 6, "Mult": 1.0 }, { "Name": "Cave", + "BackgroundImage": "../assets/background/swamp.jpg", "Weight": 6, "Mult": 1.0 } @@ -256,11 +286,13 @@ { "Name": "Volcanic Caldera", "Color": "Black", + "BackgroundImage": "../assets/background/lava.jpg", "MinTemperature": 0.0, "MaxTemperature": 1.0, "Locations": [ { "Name": "Town", + "BackgroundImage": "../assets/background/church.jpg", "Weight": 5, "Mult": 1.0 } diff --git a/Server/Config/MapParameters/MainLocation/Normal.json b/Server/Config/MapParameters/MainLocation/Normal.json index 0d78283..ef184ac 100644 --- a/Server/Config/MapParameters/MainLocation/Normal.json +++ b/Server/Config/MapParameters/MainLocation/Normal.json @@ -27,11 +27,13 @@ { "Name": "Deep Ocean", "Color": "DarkBlue", + "BackgroundImage": "../assets/background/ocean.jpg", "MinTemperature": 0.0, "MaxTemperature": 1.0, "Locations":[ { "Name": "Town", + "BackgroundImage": "../assets/background/market.jpg", "Weight": 0, "Mult": 0.0 } @@ -49,11 +51,13 @@ { "Name": "Shallow Water", "Color": "Blue", + "BackgroundImage": "../assets/background/ocean.jpg", "MinTemperature": 0.0, "MaxTemperature": 1.0, "Locations":[ { "Name": "Town", + "BackgroundImage": "../assets/background/market.jpg", "Weight": 20, "Mult": 1.0 } @@ -73,11 +77,13 @@ { "Name": "Beach", "Color": "BurlyWood", + "BackgroundImage": "../assets/background/river.jpg", "MinTemperature": 0.0, "MaxTemperature": 1.0, "Locations":[ { "Name": "Town", + "BackgroundImage": "../assets/background/market.jpg", "Weight": 20, "Mult": 1.0 } @@ -96,11 +102,13 @@ { "Name": "Grassland", "Color": "ForestGreen", + "BackgroundImage": "../assets/background/river.jpg", "MinTemperature": 0.0, "MaxTemperature": 1.0, "Locations":[ { "Name": "Town", + "BackgroundImage": "../assets/background/market.jpg", "Weight": 20, "Mult": 1.0 } @@ -118,11 +126,13 @@ { "Name": "Tropical Forest", "Color": "DarkGreen", + "BackgroundImage": "../assets/background/river.jpg", "MinTemperature": 0.7, "MaxTemperature": 1.0, "Locations":[ { "Name": "Town", + "BackgroundImage": "../assets/background/market.jpg", "Weight": 20, "Mult": 1.0 } @@ -132,11 +142,13 @@ { "Name": "Temperate Forest", "Color": "DarkOliveGreen", + "BackgroundImage": "../assets/background/river.jpg", "MinTemperature": 0.4, "MaxTemperature": 0.7, "Locations":[ { "Name": "Town", + "BackgroundImage": "../assets/background/market.jpg", "Weight": 20, "Mult": 1.0 } @@ -146,11 +158,13 @@ { "Name": "Forest", "Color": "Green", + "BackgroundImage": "../assets/background/river.jpg", "MinTemperature": 0.0, "MaxTemperature": 0.4, "Locations":[ { "Name": "Town", + "BackgroundImage": "../assets/background/market.jpg", "Weight": 20, "Mult": 1.0 } @@ -168,11 +182,13 @@ { "Name": "Rainy Mountains", "Color": "SlateGray", + "BackgroundImage": "../assets/background/mountains.jpg", "MinTemperature": 0.0, "MaxTemperature": 0.45, "Locations":[ { "Name": "Town", + "BackgroundImage": "../assets/background/market.jpg", "Weight": 20, "Mult": 1.0 } @@ -182,11 +198,13 @@ { "Name": "Snowy Mountains", "Color": "Snow", + "BackgroundImage": "../assets/background/mountains.jpg", "MinTemperature": 0.45, "MaxTemperature": 0.6, "Locations":[ { "Name": "Town", + "BackgroundImage": "../assets/background/market.jpg", "Weight": 20, "Mult": 1.0 } @@ -196,11 +214,13 @@ { "Name": "Default", "Color": "Gray", + "BackgroundImage": "../assets/background/mountains.jpg", "MinTemperature": 0.6, "MaxTemperature": 1.0, "Locations":[ { "Name": "Town", + "BackgroundImage": "../assets/background/market.jpg", "Weight": 20, "Mult": 1.0 } @@ -218,11 +238,13 @@ { "Name": "High Mountains", "Color": "DarkGray", + "BackgroundImage": "../assets/background/mountainsRiver.jpg", "MinTemperature": 0.0, "MaxTemperature": 1.0, "Locations":[ { "Name": "Town", + "BackgroundImage": "../assets/background/market.jpg", "Weight": 20, "Mult": 1.0 } diff --git a/Server/Modules/MapGenerator/Models/Map/Biome/Biome.cs b/Server/Modules/MapGenerator/Models/Map/Biome/Biome.cs index 89429c5..be9f13e 100644 --- a/Server/Modules/MapGenerator/Models/Map/Biome/Biome.cs +++ b/Server/Modules/MapGenerator/Models/Map/Biome/Biome.cs @@ -9,6 +9,6 @@ public class Biome public float MinTemperature { get; set; } public float MaxTemperature { get; set; } public bool Walkable { get; set; } = true; - + public string BackgroundImage { get; set; } public List Locations { get; set; } = new(); } diff --git a/Server/Modules/MapGenerator/Models/Map/Biome/BiomeCategory.cs b/Server/Modules/MapGenerator/Models/Map/Biome/BiomeCategory.cs index a21a804..8d8f0af 100644 --- a/Server/Modules/MapGenerator/Models/Map/Biome/BiomeCategory.cs +++ b/Server/Modules/MapGenerator/Models/Map/Biome/BiomeCategory.cs @@ -7,6 +7,8 @@ public class BiomeCategory public string BiomeType { get; set; } public string TerrainType { get; set; } + public string BackgroundImage { get; set; } + public float MaxHeight { get; set; } public float MinHeight { get; set; } diff --git a/Server/Modules/MapGenerator/Models/Map/Biome/Location.cs b/Server/Modules/MapGenerator/Models/Map/Biome/Location.cs index 248e4a4..70c1e10 100644 --- a/Server/Modules/MapGenerator/Models/Map/Biome/Location.cs +++ b/Server/Modules/MapGenerator/Models/Map/Biome/Location.cs @@ -5,4 +5,5 @@ public class Location public string? Name { get; set; } // name of the location what you want to generate for example town public int Weight { get; set; } public float Mult { get; set; } + public string BackgroundImage { get; set; } } diff --git a/Server/Modules/MapGenerator/UI/MapView.razor b/Server/Modules/MapGenerator/UI/MapView.razor index 473bae3..3a646b2 100644 --- a/Server/Modules/MapGenerator/UI/MapView.razor +++ b/Server/Modules/MapGenerator/UI/MapView.razor @@ -128,8 +128,6 @@ } private async void HandleKeyDown(KeyboardEventArgs e) { - await BackgroundImageChanger.ChangeBackgroundImageAsync(); - if (IsMiniMap == false) { if (isMoving) return; isMoving = true; @@ -165,6 +163,7 @@ if (CanMoveToTile(newX, newY)) { CharacterXX = newX; CharacterYY = newY; + await BackgroundImageChanger.ChangeBackgroundImageAsync(); StateHasChanged(); } @@ -181,4 +180,3 @@ } } - diff --git a/Server/Modules/Shared/ImageChangers/BackgroundImageChanger.cs b/Server/Modules/Shared/ImageChangers/BackgroundImageChanger.cs index 26883c7..6c41b21 100644 --- a/Server/Modules/Shared/ImageChangers/BackgroundImageChanger.cs +++ b/Server/Modules/Shared/ImageChangers/BackgroundImageChanger.cs @@ -1,79 +1,103 @@ -using Fracture.Server.Modules.MapGenerator.Models.Map.Biome; +using Fracture.Server.Modules.MapGenerator.Models.Map; using Fracture.Server.Modules.MapGenerator.Services; using Fracture.Server.Modules.MapGenerator.UI; namespace Fracture.Server.Modules.Shared.ImageChangers; -public class BackgroundImageChanger +public class BackgroundImageChanger( + ILogger logger, + MapManagerService mapManagerService +) { - private readonly ILogger logger; - - public BackgroundImageChanger( - ILogger logger, - MapManagerService mapManagerService - ) - { - this.logger = logger; - MapManagerService = mapManagerService; - } - public required BackgroundImage? BackgroundImage { get; set; } - public required MapManagerService MapManagerService { get; set; } + public required MapManagerService MapManagerService { get; set; } = mapManagerService; public Task ChangeBackgroundImageAsync() { - var biome = MapManagerService - .CurrentMap - .Grid[MapView.CharacterXX, MapView.CharacterYY] - .TerrainType; - if (BackgroundImage is null) { - logger.LogError("BackgroundImage is missing"); + logger.LogError("BackgroundImage is null"); + return Task.CompletedTask; + } + var currentMap = MapManagerService.CurrentMap; + if (currentMap.Grid is null) + { + logger.LogError("Grid is null"); + return Task.CompletedTask; + } + + var x = MapView.CharacterXX; + var y = MapView.CharacterYY; + if (x < 0 || y < 0 || x >= currentMap.Width || y >= currentMap.Height) + { + logger.LogError("Character is out of map"); + return Task.CompletedTask; + } + var cell = currentMap.Grid[x, y]; + var biome = cell.Biome; + + if (biome is null) + { + logger.LogError("Biome is null"); + return Task.CompletedTask; + } + + string? imagePath = null; + if (cell.LocationType != LocationType.None) + { + var currentLocationName = cell.LocationType.ToString(); + var location = biome.Locations.FirstOrDefault(l => + string.Equals(l.Name, currentLocationName, StringComparison.OrdinalIgnoreCase) + ); + + if (location is null) + { + logger.LogWarning( + "No matching location config for LocationType {LocationType} at ({X},{Y}) in biome {BiomeName}. Available: {Locations}", + cell.LocationType, + x, + y, + biome.Name, + string.Join( + ", ", + biome + .Locations.Where(l => !string.IsNullOrWhiteSpace(l.Name)) + .Select(l => l.Name) + ) + ); + } + else + { + imagePath = location.BackgroundImage; + logger.LogInformation( + "Using location background image '{ImagePath}' for LocationType {LocationType} at ({X},{Y})", + imagePath, + cell.LocationType, + x, + y + ); + } + } + if (string.IsNullOrWhiteSpace(imagePath)) + { + imagePath = biome.BackgroundImage; + logger.LogInformation( + "Using biome background image '{ImagePath}' for biome {BiomeName} at ({X},{Y})", + imagePath, + biome.Name, + x, + y + ); + } + + if (string.IsNullOrWhiteSpace(imagePath)) + { + logger.LogError("Background image path is null or empty"); return Task.CompletedTask; } - // switch (biome) - // { - // case TerrainType.Forest: - // { - // BackgroundImage.ImagePath = "../assets/background/river.jpg"; - // break; - // } - // case TerrainType.Grassland: - // { - // BackgroundImage.ImagePath = "../assets/background/river.jpg"; - // break; - // } - // case TerrainType.Mountains: - // { - // BackgroundImage.ImagePath = "../assets/background/mountains.jpg"; - // break; - // } - // case TerrainType.Beach: - // { - // BackgroundImage.ImagePath = "../assets/background/lava.jpg"; - // break; - // } - // case TerrainType.HighMountains: - // { - // BackgroundImage.ImagePath = "../assets/background/mountainsRiver.jpg"; - // break; - // } - // case TerrainType.DeepOcean: - // { - // BackgroundImage.ImagePath = "../assets/background/mountainsRiver.jpg"; - // break; - // } - // case TerrainType.ShallowWater: - // { - // BackgroundImage.ImagePath = "../assets/background/mountainsRiver.jpg"; - // break; - // } - // default: - // BackgroundImage.ImagePath = "../assets/background/mountainsRiver.jpg"; - // break; - // } + BackgroundImage.ImagePath = imagePath; + NotifyListChanged(this, EventArgs.Empty); return Task.CompletedTask; }