- Новый модуль Bogatyri.Intelligence (без Unity): туман в трёх состояниях, обзор поселения 5 / армии 1 клетка, «Обзор» +10/20/30% (заменяет), примерная численность ±20%, опознание 50% на событие наблюдения, последний контакт 10 реальных минут, офлайн-досчёт шагами 10 с, сохранение в секции intelligence. - Мир: IWorldMap (армии в момент времени), WorldAdvancingEvent, патрули-заглушки соседей (временно, выключаются в MarchConfig). - Карта: IntelligenceOverlay — туман и метки чужих армий. - Таблица IntelligenceConfig, 11 новых тестов, документы. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
78 lines
4.4 KiB
C#
78 lines
4.4 KiB
C#
using UnityEngine;
|
|
|
|
// ТАБЛИЦА МАРШЕЙ: скорости войск по типам и слоты похода (регламент 31.10, раздел 7). Числа -- ТЕСТ.
|
|
//
|
|
// Ассет: Assets/Resources/MarchConfig.asset (выдели его в окне Project и меняй числа в Inspector;
|
|
// изменения действуют со следующего запуска игры). Создать заново: правый клик в Project ->
|
|
// Create -> Bogatyri -> March Config, имя файла -- MarchConfig, папка -- Resources.
|
|
//
|
|
// Модули таблицу не видят: App/GameModules передаёт скорости в модуль Мира, слоты -- в модуль Армии.
|
|
// Бонусы героя (+15%) и технологии (+20%) к скорости появятся вместе с героями и технологиями.
|
|
[CreateAssetMenu(fileName = "MarchConfig", menuName = "Bogatyri/March Config")]
|
|
public class MarchConfig : ScriptableObject
|
|
{
|
|
[Header("Скорость: клеток карты за 1 РЕАЛЬНЫЙ час (марш идёт в реальном времени)")]
|
|
[Tooltip("Пехота. Регламент 31.10: 8")]
|
|
public float infantry = 8f;
|
|
[Tooltip("Лучники. Регламент 31.10: 9")]
|
|
public float archers = 9f;
|
|
[Tooltip("Кавалерия. Регламент 31.10: 12")]
|
|
public float cavalry = 12f;
|
|
[Tooltip("Осадные. Регламент 31.10: 4")]
|
|
public float siege = 4f;
|
|
[Tooltip("Смешанное войско идёт со скоростью самого медленного типа. Выключено -- средняя скорость по числу воинов. Правило для одной армии регламент не задаёт -- открытый вопрос")]
|
|
public bool mixedUsesSlowest = true;
|
|
|
|
[Header("Слоты похода")]
|
|
[Tooltip("Сколько походов игрока могут идти одновременно. Регламент 31.10: 2 (технология «Военная логистика» -- до 7)")]
|
|
public int baseMarchSlots = 2;
|
|
|
|
[Header("Патрули-заглушки соседей (Разведка М1, ВРЕМЕННАЯ тестовая механика)")]
|
|
[Tooltip("Соседние города иногда отправляют отряды к другим городам и лагерям -- проверить обнаружение, численность, опознание и потерю контакта. Выключить, когда появится настоящий PvP")]
|
|
public bool patrolsEnabled = true;
|
|
[Tooltip("Сколько патрулей одновременно на карте")]
|
|
public int patrolMaxActive = 3;
|
|
[Tooltip("Новый патруль -- раз в столько РЕАЛЬНЫХ минут (если не превышен предел)")]
|
|
public float patrolIntervalMinutes = 10f;
|
|
public int patrolSoldiersMin = 10;
|
|
public int patrolSoldiersMax = 40;
|
|
|
|
static MarchConfig cached;
|
|
|
|
public static MarchConfig Load()
|
|
{
|
|
if (cached != null) return cached;
|
|
cached = Resources.Load<MarchConfig>("MarchConfig");
|
|
if (cached == null)
|
|
{
|
|
Debug.LogWarning("[МАРШИ] Нет Assets/Resources/MarchConfig.asset -- берутся числа по умолчанию из MarchConfig.cs.");
|
|
cached = CreateInstance<MarchConfig>();
|
|
}
|
|
return cached;
|
|
}
|
|
|
|
// Скорости для модуля Мира: милли-единиц карты (1000 = клетка) за реальный час
|
|
public Bogatyri.World.MarchSpeedRules ToSpeedRules()
|
|
{
|
|
return new Bogatyri.World.MarchSpeedRules
|
|
{
|
|
SpeedMilliPerHour = new[] { Milli(infantry), Milli(archers), Milli(cavalry), Milli(siege) },
|
|
MixedUsesSlowest = mixedUsesSlowest
|
|
};
|
|
}
|
|
|
|
public Bogatyri.World.PatrolRules ToPatrolRules()
|
|
{
|
|
return new Bogatyri.World.PatrolRules
|
|
{
|
|
Enabled = patrolsEnabled,
|
|
MaxActive = Mathf.Max(0, patrolMaxActive),
|
|
IntervalMs = (long)(Mathf.Max(1f, patrolIntervalMinutes) * 60_000f),
|
|
SoldiersMin = Mathf.Max(1, patrolSoldiersMin),
|
|
SoldiersMax = Mathf.Max(1, patrolSoldiersMax)
|
|
};
|
|
}
|
|
|
|
static int Milli(float cellsPerHour) => Mathf.Max(1, Mathf.RoundToInt(cellsPerHour * 1000f));
|
|
}
|