24 ресурсные точки по решениям 31.10 (п. 6): лес 8, камень 7, металл 5, золото 4; размеры 12/8/4

Число по ресурсу и размеру -- в WorldResourceConfig; новая точка -- того же размера;
старые сохранения дополняются до таблицы.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
Alexander
2026-11-01 13:08:51 +01:00
co-authored by Claude Opus 5.5
parent 5c4ba98fef
commit 3a86eadc0b
6 changed files with 114 additions and 21 deletions
+36 -4
View File
@@ -788,7 +788,18 @@ public class ModuleTests
var world = new WorldSimulation(WorldMapLayout.CreateDefault(), new BattleSystem());
world.Advance(0, new List<WorldEvent>());
var rules = world.PointRules;
Assert.AreEqual(ResourcePointRules.Resources.Length * rules.PointsPerResource, world.ResourcePoints.Count);
// Решения 31.10, п. 6: 24 точки -- лес 8, камень 7, металл 5, золото 4; размеры 12 / 8 / 4; точек еды нет
Assert.AreEqual(24, world.ResourcePoints.Count);
var byKind = new int[4];
var bySize = new int[3];
foreach (var p in world.ResourcePoints) { byKind[p.kind]++; bySize[p.size]++; }
Assert.AreEqual(8, byKind[0], "лес");
Assert.AreEqual(7, byKind[1], "камень");
Assert.AreEqual(5, byKind[2], "металл");
Assert.AreEqual(4, byKind[3], "золото");
Assert.AreEqual(12, bySize[0], "малых");
Assert.AreEqual(8, bySize[1], "средних");
Assert.AreEqual(4, bySize[2], "крупных");
foreach (var p in world.ResourcePoints)
{
Assert.IsTrue(p.active);
@@ -848,9 +859,11 @@ public class ModuleTests
Assert.AreEqual(stock, m.cargo, "унесут весь запас");
world.Advance(m.gatherEndMs, new List<WorldEvent>());
Assert.IsFalse(gold.active, "точка истощена");
int activeGold = 0;
foreach (var p in world.ResourcePoints) if (p.active && p.kind == 3) activeGold++;
Assert.AreEqual(world.PointRules.PointsPerResource, activeGold, "новая точка золота появилась в другом месте");
int activeGold = 0, sameSize = 0;
foreach (var p in world.ResourcePoints)
if (p.active && p.kind == 3) { activeGold++; if (p.size == gold.size) sameSize++; }
Assert.AreEqual(4, activeGold, "новая точка золота появилась в другом месте");
Assert.AreEqual(world.PointRules.Count[3][gold.size], sameSize, "того же размера -- раскладка размеров не плывёт");
string name = world.GetNode(gold.id).displayName;
world.Advance(m.returnMs, new List<WorldEvent>());
@@ -1567,4 +1580,23 @@ public class ModuleTests
Assert.AreNotEqual(MapVisibility.Unexplored, intel.GetVisibility(px, py), $"точка пути {i}/20");
}
}
// Старое сохранение (до решений 31.10) с несколькими точками: недостающие до таблицы появляются, свои -- на месте
[Test]
public void World_ResourcePoints_OldSaveIsToppedUp()
{
var old = new WorldSimulation(WorldMapLayout.CreateDefault(), new BattleSystem());
old.Advance(0, new List<WorldEvent>());
var state = old.GetPointsState();
state.points.RemoveRange(2, state.points.Count - 2); // как было в старой игре -- мало точек
string keep = state.points[0].id;
var world = new WorldSimulation(WorldMapLayout.CreateDefault(), new BattleSystem());
world.LoadPointsState(state);
world.Advance(1000, new List<WorldEvent>());
Assert.AreEqual(24, world.ResourcePoints.Count, "дополнено до таблицы");
Assert.IsNotNull(world.GetPoint(keep), "старые точки остались");
world.Advance(2000, new List<WorldEvent>());
Assert.AreEqual(24, world.ResourcePoints.Count, "повторный расчёт ничего не добавляет");
}
}