public override void ReadPayload(ISerializationContext context, IValueReader reader) { world = new ObservedWorld(); world.time = reader.ReadInt32(); world.tiles = new List <(Position, TileRef)>(); var tileCount = reader.ReadInt32(); for (var i = 0; i < tileCount; i++) { var pos = reader.readPosition(); var tile = reader.readTile(); world.tiles.Add((pos, tile)); } world.buildings = new List <BuildingRef>(); var buildingCount = reader.ReadInt32(); for (var i = 0; i < buildingCount; i++) { var building = reader.readBuilding(); world.buildings.Add(building); } world.pawns = new List <PawnRef>(); var pawnCount = reader.ReadInt32(); for (var i = 0; i < pawnCount; i++) { var pawn = reader.readPawn(); world.pawns.Add(pawn); } }
private void sendWorldUpdates() { // send an update to everyone lock (players) { foreach (var player in players) { var observedWorld = new ObservedWorld(simulation.world, simulation.empires[player.empireId], simulation.time); observedWorld.see(); player.connection.SendAsync(new WorldUpdateMessage { world = observedWorld }); } } }
private void onJoinMessage(MessageEventArgs <JoinMessage> msg) { // assign the empire or something // TODO: this should properly support picking _your_ empire on a save var player = players.First(x => x.connection == msg.Connection); player.empireId = player.id; var empire = simulation.empires[player.empireId]; msg.Connection.SendAsync(new GameInfoMessage { empireCount = simulation.empires.Count, mapSize = simulation.world.map.size, empireId = player.empireId, empires = simulation.empires.Select(x => new EmpireRef(x)).ToList() }); msg.Connection.SendAsync(new EmpireFetchMessage(empire)); var observedWorld = new ObservedWorld(simulation.world, empire, simulation.time); observedWorld.see(); msg.Connection.SendAsync(new WorldUpdateMessage { world = observedWorld }); }