public void WriteTo(GameStream writer, Player player, byte deltas = 0) { byte metaFlags = 0; if (!IsVisibleTo(player)) { metaFlags = metaFlags |= (byte)TileMetaFlags.IS_UNEXPLORED; writer.Write(metaFlags); return; } if (Units.Count > 0) { metaFlags = metaFlags |= (byte)TileMetaFlags.HAS_UNITS; } if (ResourceData != 0) { metaFlags = metaFlags |= (byte)TileMetaFlags.HAS_RESOURCE; } if (Building != 0) { metaFlags = metaFlags |= (byte)TileMetaFlags.HAS_BUILDING; } if (Owner != 0) { metaFlags = metaFlags |= (byte)TileMetaFlags.IS_OWNED; } writer.Write(metaFlags); writer.Write(TerrainData); if (HasMetaFlag(metaFlags, TileMetaFlags.HAS_RESOURCE)) { writer.Write(ResourceData); } if (HasMetaFlag(metaFlags, TileMetaFlags.HAS_BUILDING)) { writer.Write(Building); } if (HasMetaFlag(metaFlags, TileMetaFlags.IS_OWNED)) { writer.Write(Owner); } if (HasMetaFlag(metaFlags, TileMetaFlags.HAS_UNITS)) { writer.WriteByte((byte)Units.Count); foreach (var unit in Units) { unit.WriteTo(writer, player); } } }
public void WriteTo(GameStream writer, Player player, byte deltas = 0) { writer.Write(x); writer.Write(y); writer.WriteByte(Sprite); writer.Write(id); writer.Write(this.Controller.MapData.InternalPlayerId); if (this.Controller == player) { writer.WriteString(this.Name); } }