Updating peasants
This commit is contained in:
@@ -7,6 +7,7 @@ public class UnitTrainingService
|
||||
{
|
||||
private const string ScoutUnitType = "Scout";
|
||||
private const string ArcherUnitType = "Archer";
|
||||
private const string PeasantUnitType = "Peasant";
|
||||
|
||||
private readonly IMongoCollection<UnitTraining> _training;
|
||||
private readonly IMongoCollection<UnitInstance> _units;
|
||||
@@ -16,8 +17,10 @@ public class UnitTrainingService
|
||||
private readonly int _scoutGoldCost;
|
||||
private readonly int _archerGoldCost;
|
||||
private readonly int _archerWoodCost;
|
||||
private readonly int _peasantGoldCost;
|
||||
private readonly int _defaultScoutTrainingSeconds;
|
||||
private readonly int _defaultArcherTrainingSeconds;
|
||||
private readonly int _defaultPeasantTrainingSeconds;
|
||||
private readonly int _visibilityDepth;
|
||||
|
||||
public UnitTrainingService(IConfiguration cfg, ResourceService resources, GameSettingsService settings)
|
||||
@@ -34,12 +37,16 @@ public class UnitTrainingService
|
||||
_scoutGoldCost = int.TryParse(cfg["Units:ScoutGoldCost"], out var scoutGoldCost) ? Math.Max(0, scoutGoldCost) : 50;
|
||||
_archerGoldCost = int.TryParse(cfg["Units:ArcherGoldCost"], out var archerGoldCost) ? Math.Max(0, archerGoldCost) : 100;
|
||||
_archerWoodCost = int.TryParse(cfg["Units:ArcherWoodCost"], out var archerWoodCost) ? Math.Max(0, archerWoodCost) : 100;
|
||||
_peasantGoldCost = int.TryParse(cfg["Units:PeasantGoldCost"], out var peasantGoldCost) ? Math.Max(0, peasantGoldCost) : 25;
|
||||
_defaultScoutTrainingSeconds = int.TryParse(cfg["Units:ScoutTrainingSeconds"], out var scoutTrainingSeconds)
|
||||
? Math.Max(1, scoutTrainingSeconds)
|
||||
: 60;
|
||||
_defaultArcherTrainingSeconds = int.TryParse(cfg["Units:ArcherTrainingSeconds"], out var archerTrainingSeconds)
|
||||
? Math.Max(1, archerTrainingSeconds)
|
||||
: 60;
|
||||
_defaultPeasantTrainingSeconds = int.TryParse(cfg["Units:PeasantTrainingSeconds"], out var peasantTrainingSeconds)
|
||||
? Math.Max(1, peasantTrainingSeconds)
|
||||
: 60;
|
||||
_visibilityDepth = int.TryParse(cfg["World:VisibilityDepth"], out var visibilityDepth) ? Math.Max(0, visibilityDepth) : 3;
|
||||
|
||||
_training.Indexes.CreateOne(new CreateIndexModel<UnitTraining>(
|
||||
@@ -64,6 +71,7 @@ public class UnitTrainingService
|
||||
var allUnits = await _units.Find(x => x.Username == username).ToListAsync();
|
||||
var completedScouts = allTraining.Count(x => x.UnitType == ScoutUnitType && x.Status == "Completed");
|
||||
var completedArchers = allUnits.Count(x => x.UnitType == ArcherUnitType);
|
||||
var completedPeasants = allUnits.Count(x => x.UnitType == PeasantUnitType && x.Status == "Idle");
|
||||
var activeTraining = allTraining
|
||||
.Where(x => x.Status == "Training")
|
||||
.OrderBy(x => x.CompletesAtUtc)
|
||||
@@ -74,6 +82,7 @@ public class UnitTrainingService
|
||||
{
|
||||
CompletedScouts = completedScouts,
|
||||
CompletedArchers = completedArchers,
|
||||
CompletedPeasants = completedPeasants,
|
||||
Training = activeTraining,
|
||||
Units = allUnits
|
||||
.OrderBy(x => x.Q)
|
||||
@@ -106,10 +115,20 @@ public class UnitTrainingService
|
||||
throw new InvalidOperationException("A completed Barracks is required to train Archers.");
|
||||
}
|
||||
}
|
||||
else if (normalizedUnitType == PeasantUnitType)
|
||||
{
|
||||
origin = await _locations.Find(x => x.OwnerUsername == username && x.Kind == "Home").FirstOrDefaultAsync();
|
||||
if (origin is null)
|
||||
{
|
||||
throw new InvalidOperationException("A town hall is required to train Peasants.");
|
||||
}
|
||||
}
|
||||
|
||||
var goldCost = normalizedUnitType == ArcherUnitType
|
||||
? await _settings.GetNonNegativeIntAsync(GameSettingsService.ArcherGoldCost, _archerGoldCost)
|
||||
: await _settings.GetNonNegativeIntAsync(GameSettingsService.ScoutGoldCost, _scoutGoldCost);
|
||||
: normalizedUnitType == PeasantUnitType
|
||||
? await _settings.GetNonNegativeIntAsync(GameSettingsService.PeasantGoldCost, _peasantGoldCost)
|
||||
: await _settings.GetNonNegativeIntAsync(GameSettingsService.ScoutGoldCost, _scoutGoldCost);
|
||||
var woodCost = normalizedUnitType == ArcherUnitType
|
||||
? await _settings.GetNonNegativeIntAsync(GameSettingsService.ArcherWoodCost, _archerWoodCost)
|
||||
: 0;
|
||||
@@ -124,6 +143,8 @@ public class UnitTrainingService
|
||||
var now = DateTime.UtcNow;
|
||||
var trainingSeconds = normalizedUnitType == ArcherUnitType
|
||||
? await _settings.GetIntAsync(GameSettingsService.ArcherTrainingSeconds, _defaultArcherTrainingSeconds)
|
||||
: normalizedUnitType == PeasantUnitType
|
||||
? await _settings.GetIntAsync(GameSettingsService.PeasantTrainingSeconds, _defaultPeasantTrainingSeconds)
|
||||
: await _settings.GetIntAsync(GameSettingsService.ScoutTrainingSeconds, _defaultScoutTrainingSeconds);
|
||||
var training = new UnitTraining
|
||||
{
|
||||
@@ -350,7 +371,7 @@ public class UnitTrainingService
|
||||
ReturnDocument = ReturnDocument.After
|
||||
});
|
||||
|
||||
if (completed is null || completed.UnitType != ArcherUnitType)
|
||||
if (completed is null || (completed.UnitType != ArcherUnitType && completed.UnitType != PeasantUnitType))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
@@ -358,7 +379,7 @@ public class UnitTrainingService
|
||||
var unit = new UnitInstance
|
||||
{
|
||||
Username = completed.Username,
|
||||
UnitType = ArcherUnitType,
|
||||
UnitType = completed.UnitType,
|
||||
Q = completed.OriginQ ?? 0,
|
||||
R = completed.OriginR ?? 0,
|
||||
Status = "Idle",
|
||||
@@ -384,6 +405,7 @@ public class UnitTrainingService
|
||||
{
|
||||
"scout" => ScoutUnitType,
|
||||
"archer" => ArcherUnitType,
|
||||
"peasant" => PeasantUnitType,
|
||||
_ => null
|
||||
};
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user