Skip to content

Commit 175311c

Browse files
committed
enable import/export in native client
(cherry picked from commit 5396c38)
1 parent e1089e5 commit 175311c

File tree

4 files changed

+29
-23
lines changed

4 files changed

+29
-23
lines changed

Diff for: client/Cargo.toml

+4
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,10 @@ name = "client"
33
version = "0.1.0"
44
edition = "2021"
55

6+
[features]
7+
# disable file import and export
8+
wasm = []
9+
610
# may be needed for remote client
711
#[lib]
812
#name = "client"

Diff for: client/src/local_client.rs

+15-20
Original file line numberDiff line numberDiff line change
@@ -2,20 +2,19 @@
22

33
use crate::client;
44
use macroquad::prelude::next_frame;
5+
use std::fs::File;
6+
use std::io::BufReader;
57

68
use crate::client::{Features, GameSyncRequest, GameSyncResult};
79
use server::city::City;
8-
use server::game::Game;
10+
use server::game::{Game, GameData};
911
use server::map::Terrain;
1012
use server::position::Position;
1113
use server::resource_pile::ResourcePile;
1214
use server::unit::UnitType;
1315

14-
pub async fn run(mut game: Game) {
16+
pub async fn run(mut game: Game, features: &Features) {
1517
let mut state = client::init().await;
16-
let features = Features {
17-
import_export: true,
18-
};
1918

2019
let mut sync_result = GameSyncResult::None;
2120
loop {
@@ -110,23 +109,19 @@ fn add_terrain(game: &mut Game, pos: &str, terrain: Terrain) {
110109
game.map.tiles.insert(Position::from_offset(pos), terrain);
111110
}
112111

113-
// const EXPORT_FILE: &str = "game.json";
112+
const EXPORT_FILE: &str = "game.json";
114113

115114
fn import() -> Game {
116-
// todo only works with native client
117-
// let file = File::open(EXPORT_FILE).expect("Failed to open export file");
118-
// let reader = BufReader::new(file);
119-
// let data: GameData = serde_json::from_reader(reader).expect("Failed to read export file");
120-
// Game::from_data(data)
121-
panic!()
115+
let file = File::open(EXPORT_FILE).expect("Failed to open export file");
116+
let reader = BufReader::new(file);
117+
let data: GameData = serde_json::from_reader(reader).expect("Failed to read export file");
118+
Game::from_data(data)
122119
}
123120

124-
fn export(_game: &Game) {
125-
// todo only works with native client
126-
// serde_json::to_writer_pretty(
127-
// File::create(EXPORT_FILE).expect("Failed to create export file"),
128-
// &game.cloned_data(),
129-
// )
130-
// .expect("Failed to write export file");
131-
panic!()
121+
fn export(game: &Game) {
122+
serde_json::to_writer_pretty(
123+
File::create(EXPORT_FILE).expect("Failed to create export file"),
124+
&game.cloned_data(),
125+
)
126+
.expect("Failed to write export file");
132127
}

Diff for: client/src/local_client/bin/main.rs

+8-1
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,21 @@
1+
use client::client::Features;
12
use client::local_client;
23
use server::game::Game;
34

45
#[macroquad::main("Clash")]
56
async fn main() {
7+
let wasm = cfg!(feature = "wasm");
8+
9+
let features = Features {
10+
import_export: !wasm,
11+
};
12+
613
//todo add button to decide random or fixed game
714
let game = if false {
815
Game::new(2, "a".repeat(32), true)
916
} else {
1017
local_client::setup_local_game()
1118
};
1219

13-
local_client::run(game).await;
20+
local_client::run(game, &features).await;
1421
}

Diff for: client/wasm-bindgen-macroquad.sh

+2-2
Original file line numberDiff line numberDiff line change
@@ -114,10 +114,10 @@ TARGET_DIR="target/wasm32-unknown-unknown"
114114
# Build
115115
echo "Building $PROJECT_NAME..."
116116
if [ -n "$RELEASE" ]; then
117-
cargo build --release --target wasm32-unknown-unknown
117+
cargo build --release --target wasm32-unknown-unknown --features "wasm"
118118
TARGET_DIR="$TARGET_DIR/release"
119119
else
120-
cargo build --target wasm32-unknown-unknown
120+
cargo build --target wasm32-unknown-unknown --features "wasm"
121121
TARGET_DIR="$TARGET_DIR/debug"
122122
fi
123123

0 commit comments

Comments
 (0)