adding farms
This commit is contained in:
@@ -15,9 +15,11 @@ public class LocationService
|
||||
private readonly int _visibilityDepth;
|
||||
private readonly int _logCampWoodPerMinute;
|
||||
private readonly int _mineOrePerMinute;
|
||||
private readonly int _farmFoodPerMinute;
|
||||
private readonly int _defaultLogCampBuildSeconds;
|
||||
private readonly int _defaultMineBuildSeconds;
|
||||
private readonly int _defaultBarracksBuildSeconds;
|
||||
private readonly int _defaultFarmBuildSeconds;
|
||||
private readonly int _barracksGoldCost;
|
||||
private readonly int _barracksWoodCost;
|
||||
private readonly int _barracksOreCost;
|
||||
@@ -42,6 +44,9 @@ public class LocationService
|
||||
_mineOrePerMinute = int.TryParse(cfg["Buildings:MineOrePerMinute"], out var mineOrePerMinute)
|
||||
? Math.Max(1, mineOrePerMinute)
|
||||
: 5;
|
||||
_farmFoodPerMinute = int.TryParse(cfg["Buildings:FarmFoodPerMinute"], out var farmFoodPerMinute)
|
||||
? Math.Max(1, farmFoodPerMinute)
|
||||
: 5;
|
||||
_defaultLogCampBuildSeconds = int.TryParse(cfg["Buildings:LogCampBuildSeconds"], out var logCampBuildSeconds)
|
||||
? Math.Max(1, logCampBuildSeconds)
|
||||
: 60;
|
||||
@@ -51,6 +56,9 @@ public class LocationService
|
||||
_defaultBarracksBuildSeconds = int.TryParse(cfg["Buildings:BarracksBuildSeconds"], out var barracksBuildSeconds)
|
||||
? Math.Max(1, barracksBuildSeconds)
|
||||
: 60;
|
||||
_defaultFarmBuildSeconds = int.TryParse(cfg["Buildings:FarmBuildSeconds"], out var farmBuildSeconds)
|
||||
? Math.Max(1, farmBuildSeconds)
|
||||
: 60;
|
||||
_barracksGoldCost = int.TryParse(cfg["Buildings:BarracksGoldCost"], out var barracksGoldCost)
|
||||
? Math.Max(0, barracksGoldCost)
|
||||
: 500;
|
||||
@@ -215,7 +223,10 @@ public class LocationService
|
||||
|
||||
if (buildingType == "Barracks")
|
||||
{
|
||||
var spent = await _resources.TrySpendResourcesAsync(username, _barracksGoldCost, _barracksWoodCost, _barracksOreCost);
|
||||
var barracksGoldCost = await _settings.GetNonNegativeIntAsync(GameSettingsService.BarracksGoldCost, _barracksGoldCost);
|
||||
var barracksWoodCost = await _settings.GetNonNegativeIntAsync(GameSettingsService.BarracksWoodCost, _barracksWoodCost);
|
||||
var barracksOreCost = await _settings.GetNonNegativeIntAsync(GameSettingsService.BarracksOreCost, _barracksOreCost);
|
||||
var spent = await _resources.TrySpendResourcesAsync(username, barracksGoldCost, barracksWoodCost, barracksOreCost);
|
||||
if (!spent)
|
||||
{
|
||||
var rollback = Builders<Location>.Update
|
||||
@@ -230,7 +241,7 @@ public class LocationService
|
||||
x => x.Id == updated.Id && x.BuildingType == "Barracks" && x.BuildingStatus == "Building" && x.BuildingStartedAtUtc == now,
|
||||
rollback);
|
||||
|
||||
throw new InvalidOperationException($"Not enough resources to build Barracks. Required: {_barracksGoldCost} gold, {_barracksWoodCost} wood, {_barracksOreCost} ore.");
|
||||
throw new InvalidOperationException($"Not enough resources to build Barracks. Required: {barracksGoldCost} gold, {barracksWoodCost} wood, {barracksOreCost} ore.");
|
||||
}
|
||||
}
|
||||
|
||||
@@ -242,7 +253,7 @@ public class LocationService
|
||||
var now = DateTime.UtcNow;
|
||||
var readyBuildings = await _locations.Find(x =>
|
||||
x.OwnerUsername == username &&
|
||||
(x.BuildingType == "LogCamp" || x.BuildingType == "Mine" || x.BuildingType == "Barracks") &&
|
||||
(x.BuildingType == "LogCamp" || x.BuildingType == "Mine" || x.BuildingType == "Barracks" || x.BuildingType == "Farm") &&
|
||||
x.BuildingStatus == "Building" &&
|
||||
x.BuildingCompletesAtUtc <= now)
|
||||
.ToListAsync();
|
||||
@@ -266,11 +277,18 @@ public class LocationService
|
||||
{
|
||||
if (updated.BuildingType == "LogCamp")
|
||||
{
|
||||
await _resources.AddWoodGenerationAsync(username, _logCampWoodPerMinute);
|
||||
var woodPerMinute = await _settings.GetNonNegativeIntAsync(GameSettingsService.LogCampWoodPerMinute, _logCampWoodPerMinute);
|
||||
await _resources.AddWoodGenerationAsync(username, woodPerMinute);
|
||||
}
|
||||
else if (updated.BuildingType == "Mine")
|
||||
{
|
||||
await _resources.AddOreGenerationAsync(username, _mineOrePerMinute);
|
||||
var orePerMinute = await _settings.GetNonNegativeIntAsync(GameSettingsService.MineOrePerMinute, _mineOrePerMinute);
|
||||
await _resources.AddOreGenerationAsync(username, orePerMinute);
|
||||
}
|
||||
else if (updated.BuildingType == "Farm")
|
||||
{
|
||||
var foodPerMinute = await _settings.GetNonNegativeIntAsync(GameSettingsService.FarmFoodPerMinute, _farmFoodPerMinute);
|
||||
await _resources.AddFoodGenerationAsync(username, foodPerMinute);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -758,6 +776,7 @@ public class LocationService
|
||||
"logcamp" or "log camp" => "LogCamp",
|
||||
"mine" => "Mine",
|
||||
"barracks" => "Barracks",
|
||||
"farm" => "Farm",
|
||||
_ => null
|
||||
};
|
||||
}
|
||||
@@ -767,6 +786,7 @@ public class LocationService
|
||||
{
|
||||
"LogCamp" => "Forest",
|
||||
"Mine" => "Ore",
|
||||
"Farm" => "Field",
|
||||
"Barracks" => null,
|
||||
_ => null
|
||||
};
|
||||
@@ -777,6 +797,7 @@ public class LocationService
|
||||
"LogCamp" => GameSettingsService.LogCampBuildSeconds,
|
||||
"Mine" => GameSettingsService.MineBuildSeconds,
|
||||
"Barracks" => GameSettingsService.BarracksBuildSeconds,
|
||||
"Farm" => GameSettingsService.FarmBuildSeconds,
|
||||
_ => GameSettingsService.LogCampBuildSeconds
|
||||
};
|
||||
|
||||
@@ -786,6 +807,7 @@ public class LocationService
|
||||
"LogCamp" => _defaultLogCampBuildSeconds,
|
||||
"Mine" => _defaultMineBuildSeconds,
|
||||
"Barracks" => _defaultBarracksBuildSeconds,
|
||||
"Farm" => _defaultFarmBuildSeconds,
|
||||
_ => 60
|
||||
};
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user