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++;
            }
        }
Example #2
0
            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++;
            }
        }