private void AddStructures(DbGame game, DbTurn turn, JArray structures, DbRegion region, Dictionary <string, string> structuresMemory, Dictionary <int, string> unitMemory, Dictionary <int, string> orders) { int structureOrder = 0; foreach (JObject structure in structures) { var str = structure["structure"] as JObject; var s = new DbStructure { GameId = game.Id, TurnId = turn.Id, Sequence = structureOrder, Number = str.Value <int>("number"), Type = str.Value <string>("type"), Name = str.Value <string>("name"), Units = new List <DbUnit>(), Json = str.ToString() }; var emphId = DbStructure.GetEmpheralId(region.X, region.Y, region.Z, s.Number, s.Type); s.Memory = structuresMemory.TryGetValue(emphId, out var structMem) ? structMem : null; var units = structure["units"] as JArray; if (units != null) { AddUnits(game, turn, units, region, s, unitMemory, orders); } region.Structures.Add(s); turn.Structures.Add(s); structureOrder++; } }
public async Task <Unit> Handle(Command request, CancellationToken cancellationToken) { var region = new DbRegion { RegionId = request.RegionId, RowVersion = request.RowVersion }; _context.Set <DbRegion>().Attach(region); _context.Set <DbRegion>().Remove(region); await _context.SaveChangesAsync(cancellationToken); return(Unit.Value); }
private static void CopyInvisibleRegions(long gameId, DbTurn turn, DbTurn lastTurn, DbGame game) { var visibleRegions = turn.Regions.ToDictionary(k => k.EmpheralId); var allRegions = lastTurn.Regions.ToDictionary(k => k.EmpheralId); foreach (var key in allRegions.Keys.Except(visibleRegions.Keys)) { var invisibleRegion = allRegions[key]; var regCopy = new DbRegion { GameId = gameId, TurnId = turn.Id, UpdatedAtTurn = invisibleRegion.UpdatedAtTurn, X = invisibleRegion.X, Y = invisibleRegion.Y, Z = invisibleRegion.Z, Label = invisibleRegion.Label, Province = invisibleRegion.Province, Terrain = invisibleRegion.Terrain, Structures = new List <DbStructure>(), Units = new List <DbUnit>(), Json = invisibleRegion.Json, Memory = invisibleRegion.Memory }; if (invisibleRegion.Structures != null) { foreach (var str in invisibleRegion.Structures) { var strCopy = new DbStructure { GameId = game.Id, TurnId = turn.Id, Sequence = str.Sequence, Number = str.Number, Type = str.Type, Name = str.Name, Units = new List <DbUnit>(), Json = str.Json }; regCopy.Structures.Add(strCopy); turn.Structures.Add(strCopy); } } turn.Regions.Add(regCopy); } }
private static void AddUnits(DbGame game, DbTurn turn, JArray units, DbRegion region, DbStructure structure, Dictionary <int, string> unitMemory, Dictionary <int, string> orders) { int unitOrder = 0; foreach (JObject unit in units) { var unitFaction = unit["faction"] as JObject; var u = new DbUnit { GameId = game.Id, TurnId = turn.Id, Number = unit.Value <int>("number"), Name = unit.Value <string>("name"), FactionNumber = unitFaction != null ? unitFaction.Value <int>("number") : (int?)null, Sequence = unitOrder }; u.Own = game.PlayerFactionNumber == u.FactionNumber; u.Memory = u.Own && unitMemory.TryGetValue(u.Number, out var unitMem) ? unitMem : null; u.Orders = orders.TryGetValue(u.Number, out var unitOrders) ? unitOrders : null; unit["own"] = u.Own; // because could be loaded several reports from different factions u.Json = unit.ToString(); region.Units.Add(u); turn.Units.Add(u); if (structure != null) { structure.Units.Add(u); } unitOrder++; } }