internal City(byte owner) { Owner = owner; if (!Game.Started) { return; } CurrentProduction = Reflect.GetUnits().Where(u => Player.ProductionAvailable(u)).OrderBy(u => Common.HasAttribute <Default>(u) ? -1 : (int)u.Type).First(); SetResourceTiles(); }
private SaveData.UnitType GetUnitType(byte typeId) { IUnit unit = Reflect.GetUnits().FirstOrDefault(u => u.Type == (UnitType)typeId); SaveData.UnitType output = new SaveData.UnitType(); if (unit != null) { SetArray <SaveData.UnitType>(ref output, nameof(SaveData.UnitType.Name), 12, new string[] { unit.Name }); output.ObsoleteTechId = (ushort)(unit.ObsoleteTech?.Id ?? 0x7F); output.TerrainCategory = (ushort)unit.Class; output.TotalMoves = (ushort)unit.Move; output.Attack = (ushort)unit.Attack; output.Defense = (ushort)unit.Defense; output.Price = (ushort)unit.Price; switch (unit) { case BaseUnitAir airUnit: output.OutsideMoves = (ushort)airUnit.TotalFuel; output.ViewRange = 2; break; case BaseUnitSea seaUnit: output.ViewRange = (ushort)seaUnit.Range; break; default: output.ViewRange = 1; break; } if (unit is IBoardable) { output.TransportCapacity = (ushort)(unit as IBoardable).Cargo; } output.Role = (ushort)unit.Role; output.TechId = (ushort)(unit.RequiredTech?.Id ?? ushort.MaxValue); } return(output); }