mirror of
https://github.com/nolen777/eagle0.git
synced 2026-07-28 21:55:42 +00:00
Compare commits
1
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
0dc0a6d5e6 |
+19
@@ -36,6 +36,25 @@ namespace eagle0.Tests {
|
||||
}
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void TerrainTextureLabelsForMonthOnlyIncludeRelevantSeason() {
|
||||
var julyLabels = ImageForTerrainTracker.RequiredAddressableLabelsForMonth(7).ToList();
|
||||
var januaryLabels =
|
||||
ImageForTerrainTracker.RequiredAddressableLabelsForMonth(1).ToList();
|
||||
|
||||
Assert.Contains("hex-plains", julyLabels);
|
||||
Assert.Contains("hex-castle", julyLabels);
|
||||
Assert.IsFalse(julyLabels.Contains("hex-winter-plains"));
|
||||
Assert.IsFalse(julyLabels.Contains("hex-plains-full-snow"));
|
||||
Assert.IsFalse(julyLabels.Contains("hex-winter-castle"));
|
||||
|
||||
Assert.Contains("hex-winter-plains", januaryLabels);
|
||||
Assert.Contains("hex-plains-full-snow", januaryLabels);
|
||||
Assert.Contains("hex-winter-castle", januaryLabels);
|
||||
Assert.IsFalse(januaryLabels.Contains("hex-plains"));
|
||||
Assert.IsFalse(januaryLabels.Contains("hex-castle"));
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void SoundManagerRequiredCombatClipsResolveToAddressableSfx() {
|
||||
var addressableSoundNames = AddressableAssetNamesForLabel(CombatSfxLabel);
|
||||
|
||||
+43
-21
@@ -74,6 +74,18 @@ namespace eagle0 {
|
||||
}
|
||||
}
|
||||
|
||||
public static IEnumerable<string> RequiredAddressableLabelsForMonth(int month) {
|
||||
if (WINTER_MONTHS.Contains(month)) {
|
||||
return winterTerrainLabels.Values.Concat(partialSnowTerrainLabels.Values)
|
||||
.Concat(fullSnowTerrainLabels.Values)
|
||||
.Concat(new[] { winterCastleLabel, iceLabel, thawingIceLabel })
|
||||
.Distinct();
|
||||
}
|
||||
|
||||
return terrainLabels.Values.Concat(new[] { castleLabel, iceLabel, thawingIceLabel })
|
||||
.Distinct();
|
||||
}
|
||||
|
||||
private Dictionary<TerrainType, List<Texture>> terrainImages;
|
||||
private Dictionary<TerrainType, List<Texture>> winterTerrainImages;
|
||||
private Dictionary<TerrainType, List<Texture>> partialSnowTerrainImages;
|
||||
@@ -82,41 +94,42 @@ namespace eagle0 {
|
||||
private List<Texture> winterCastleImages;
|
||||
private List<Texture> iceImages;
|
||||
private List<Texture> thawingIceImages;
|
||||
private int? loadedMonth;
|
||||
private int? loadingMonth;
|
||||
|
||||
void Awake() {
|
||||
Instance = this;
|
||||
StartCoroutine(LoadAsync());
|
||||
void Awake() { Instance = this; }
|
||||
|
||||
public void EnsureLoadedForMonth(int month) {
|
||||
if ((IsLoaded && loadedMonth == month) || loadingMonth == month) { return; }
|
||||
|
||||
IsLoaded = false;
|
||||
loadedMonth = null;
|
||||
loadingMonth = month;
|
||||
StartCoroutine(LoadAsync(month));
|
||||
}
|
||||
|
||||
private IEnumerator LoadAsync() {
|
||||
private IEnumerator LoadAsync(int month) {
|
||||
var loadedTextures = new Dictionary<string, List<Texture>>();
|
||||
|
||||
var uniqueLabels = new HashSet<string>();
|
||||
foreach (var l in terrainLabels.Values) uniqueLabels.Add(l);
|
||||
foreach (var l in winterTerrainLabels.Values) uniqueLabels.Add(l);
|
||||
foreach (var l in partialSnowTerrainLabels.Values) uniqueLabels.Add(l);
|
||||
foreach (var l in fullSnowTerrainLabels.Values) uniqueLabels.Add(l);
|
||||
uniqueLabels.Add(castleLabel);
|
||||
uniqueLabels.Add(winterCastleLabel);
|
||||
uniqueLabels.Add(iceLabel);
|
||||
uniqueLabels.Add(thawingIceLabel);
|
||||
|
||||
foreach (string label in uniqueLabels) {
|
||||
foreach (string label in RequiredAddressableLabelsForMonth(month)) {
|
||||
yield return AddressableLoader.LoadWithRetry<Texture>(
|
||||
label,
|
||||
results => { loadedTextures[label] = results.ToList(); },
|
||||
() => { loadedTextures[label] = new List<Texture>(); });
|
||||
}
|
||||
|
||||
if (loadingMonth != month) { yield break; }
|
||||
|
||||
terrainImages = BuildTerrainDict(terrainLabels, loadedTextures);
|
||||
winterTerrainImages = BuildTerrainDict(winterTerrainLabels, loadedTextures);
|
||||
partialSnowTerrainImages = BuildTerrainDict(partialSnowTerrainLabels, loadedTextures);
|
||||
fullSnowTerrainImages = BuildTerrainDict(fullSnowTerrainLabels, loadedTextures);
|
||||
castleImages = loadedTextures[castleLabel];
|
||||
winterCastleImages = loadedTextures[winterCastleLabel];
|
||||
iceImages = loadedTextures[iceLabel];
|
||||
thawingIceImages = loadedTextures[thawingIceLabel];
|
||||
castleImages = LoadedTextures(castleLabel, loadedTextures);
|
||||
winterCastleImages = LoadedTextures(winterCastleLabel, loadedTextures);
|
||||
iceImages = LoadedTextures(iceLabel, loadedTextures);
|
||||
thawingIceImages = LoadedTextures(thawingIceLabel, loadedTextures);
|
||||
|
||||
loadedMonth = month;
|
||||
loadingMonth = null;
|
||||
IsLoaded = true;
|
||||
}
|
||||
|
||||
@@ -124,10 +137,19 @@ namespace eagle0 {
|
||||
Dictionary<TerrainType, string> labelMap,
|
||||
Dictionary<string, List<Texture>> loadedTextures) {
|
||||
var dict = new Dictionary<TerrainType, List<Texture>>();
|
||||
foreach (var entry in labelMap) { dict[entry.Key] = loadedTextures[entry.Value]; }
|
||||
foreach (var entry in labelMap) {
|
||||
dict[entry.Key] = LoadedTextures(entry.Value, loadedTextures);
|
||||
}
|
||||
return dict;
|
||||
}
|
||||
|
||||
static List<Texture> LoadedTextures(
|
||||
string label,
|
||||
Dictionary<string, List<Texture>> loadedTextures) {
|
||||
return loadedTextures.TryGetValue(label, out var textures) ? textures
|
||||
: new List<Texture>();
|
||||
}
|
||||
|
||||
private Texture GetWinterImageForTerrain(Terrain terrain, int random) {
|
||||
List<Texture> images = winterTerrainImages[terrain.Type];
|
||||
|
||||
|
||||
+2
@@ -579,6 +579,8 @@ namespace Shardok {
|
||||
private IEnumerator SetUpGameAfterLoad(
|
||||
ShardokGameModel shardokGameModel,
|
||||
int setupGameGeneration) {
|
||||
ImageForTerrainTracker.Instance.EnsureLoadedForMonth(shardokGameModel.Month);
|
||||
|
||||
// Wait for asset preloading to finish (runs on persistent Main Camera object)
|
||||
while (!ImageForTerrainTracker.Instance.IsLoaded) {
|
||||
if (!IsActiveSetup(shardokGameModel, setupGameGeneration)) { yield break; }
|
||||
|
||||
Reference in New Issue
Block a user