From e3fd0c703a5d7a79317aa0aa00d3cded223f0c88 Mon Sep 17 00:00:00 2001 From: yukirij Date: Sun, 11 Aug 2024 22:41:25 -0700 Subject: [PATCH] Add SVG assets. --- server/src/app/net/mod.rs | 81 -------------- server/src/main.rs | 44 ++++++++ server/src/system/cache/mod.rs | 186 +++++++++++++++++++++++++++++---- www/asset/castle_dawn.svg | 82 +++++++++++++++ www/asset/castle_dusk.svg | 82 +++++++++++++++ www/asset/dragon_dawn.svg | 85 +++++++++++++++ www/asset/dragon_dusk.svg | 85 +++++++++++++++ www/asset/favicon.svg | 73 +++++++++++++ www/asset/knight_dawn.svg | 72 +++++++++++++ www/asset/knight_dusk.svg | 72 +++++++++++++ www/asset/lance_dawn.svg | 82 +++++++++++++++ www/asset/lance_dusk.svg | 82 +++++++++++++++ www/asset/militia_dawn.svg | 72 +++++++++++++ www/asset/militia_dusk.svg | 72 +++++++++++++ www/asset/omen_dawn.svg | 90 ++++++++++++++++ www/asset/omen_dusk.svg | 90 ++++++++++++++++ www/asset/promote.svg | 65 ++++++++++++ www/asset/tower_dawn.svg | 111 ++++++++++++++++++++ www/asset/tower_dusk.svg | 111 ++++++++++++++++++++ www/js/game.js | 16 ++- www/js/interface.js | 20 +++- 21 files changed, 1565 insertions(+), 108 deletions(-) delete mode 100644 server/src/app/net/mod.rs create mode 100644 www/asset/castle_dawn.svg create mode 100644 www/asset/castle_dusk.svg create mode 100644 www/asset/dragon_dawn.svg create mode 100644 www/asset/dragon_dusk.svg create mode 100644 www/asset/favicon.svg create mode 100644 www/asset/knight_dawn.svg create mode 100644 www/asset/knight_dusk.svg create mode 100644 www/asset/lance_dawn.svg create mode 100644 www/asset/lance_dusk.svg create mode 100644 www/asset/militia_dawn.svg create mode 100644 www/asset/militia_dusk.svg create mode 100644 www/asset/omen_dawn.svg create mode 100644 www/asset/omen_dusk.svg create mode 100644 www/asset/promote.svg create mode 100644 www/asset/tower_dawn.svg create mode 100644 www/asset/tower_dusk.svg diff --git a/server/src/app/net/mod.rs b/server/src/app/net/mod.rs deleted file mode 100644 index 150f6e7..0000000 --- a/server/src/app/net/mod.rs +++ /dev/null @@ -1,81 +0,0 @@ -fn handle_packet(data:&Vec) -> Result,()> -{ - use game::protocol::{ - prelude::*, - code::*, - packet::*, - }; - - let response = Vec::::new(); - let mut status = STATUS_OK; - - let mut index = 2; - if data.len() < 2 { return Err(()); } - match ((data[0] as u16) << 8) + data[1] as u16 { - CODE_AUTH => { - status = STATUS_BAD; - - match PacketAuth::decode(data, index) { - Ok(data) => { - // check if handle exists - - status = STATUS_OK; - } - Err(_) => { } - } - } - - CODE_REGISTER => { - - } - - CODE_RESUME => { - - } - - CODE_EXIT => { - - } - - CODE_LIST_GAME => { - - } - - CODE_LIST_OPEN => { - - } - - CODE_LIST_LIVE => { - - } - - CODE_JOIN => { - - } - - CODE_SPECTATE => { - - } - - CODE_LEAVE => { - - } - - CODE_RETIRE => { - - } - - CODE_PLAY => { - - } - - _ => { - status = STATUS_NOT_IMPL; - } - } - - Ok([ - pack_u16(status), - response, - ].concat()) -} diff --git a/server/src/main.rs b/server/src/main.rs index 188ec10..7b37baf 100644 --- a/server/src/main.rs +++ b/server/src/main.rs @@ -43,6 +43,50 @@ async fn service_http(mut request:hyper::Request, args:Ht .header(CONTENT_TYPE, "image/png") .body(Full::new(Bytes::from(args.cache.favicon()))).unwrap()), + // Assets + "/asset/omen_dawn.svg" => Ok(Response::builder() + .header(CONTENT_TYPE, "image/svg") + .body(Full::new(Bytes::from(args.cache.asset(0, 6)))).unwrap()), + "/asset/dragon_dawn.svg" => Ok(Response::builder() + .header(CONTENT_TYPE, "image/svg") + .body(Full::new(Bytes::from(args.cache.asset(0, 5)))).unwrap()), + "/asset/castle_dawn.svg" => Ok(Response::builder() + .header(CONTENT_TYPE, "image/svg") + .body(Full::new(Bytes::from(args.cache.asset(0, 4)))).unwrap()), + "/asset/tower_dawn.svg" => Ok(Response::builder() + .header(CONTENT_TYPE, "image/svg") + .body(Full::new(Bytes::from(args.cache.asset(0, 3)))).unwrap()), + "/asset/lance_dawn.svg" => Ok(Response::builder() + .header(CONTENT_TYPE, "image/svg") + .body(Full::new(Bytes::from(args.cache.asset(0, 2)))).unwrap()), + "/asset/knight_dawn.svg" => Ok(Response::builder() + .header(CONTENT_TYPE, "image/svg") + .body(Full::new(Bytes::from(args.cache.asset(0, 1)))).unwrap()), + "/asset/militia_dawn.svg" => Ok(Response::builder() + .header(CONTENT_TYPE, "image/svg") + .body(Full::new(Bytes::from(args.cache.asset(0, 0)))).unwrap()), + "/asset/omen_dusk.svg" => Ok(Response::builder() + .header(CONTENT_TYPE, "image/svg") + .body(Full::new(Bytes::from(args.cache.asset(1, 6)))).unwrap()), + "/asset/dragon_dusk.svg" => Ok(Response::builder() + .header(CONTENT_TYPE, "image/svg") + .body(Full::new(Bytes::from(args.cache.asset(1, 5)))).unwrap()), + "/asset/castle_dusk.svg" => Ok(Response::builder() + .header(CONTENT_TYPE, "image/svg") + .body(Full::new(Bytes::from(args.cache.asset(1, 4)))).unwrap()), + "/asset/tower_dusk.svg" => Ok(Response::builder() + .header(CONTENT_TYPE, "image/svg") + .body(Full::new(Bytes::from(args.cache.asset(1, 3)))).unwrap()), + "/asset/lance_dusk.svg" => Ok(Response::builder() + .header(CONTENT_TYPE, "image/svg") + .body(Full::new(Bytes::from(args.cache.asset(1, 2)))).unwrap()), + "/asset/knight_dusk.svg" => Ok(Response::builder() + .header(CONTENT_TYPE, "image/svg") + .body(Full::new(Bytes::from(args.cache.asset(1, 1)))).unwrap()), + "/asset/militia_dusk.svg" => Ok(Response::builder() + .header(CONTENT_TYPE, "image/svg") + .body(Full::new(Bytes::from(args.cache.asset(1, 0)))).unwrap()), + _ => { if hyper_tungstenite::is_upgrade_request(&request) { if let Ok((response, websocket)) = hyper_tungstenite::upgrade(&mut request, None) { diff --git a/server/src/system/cache/mod.rs b/server/src/system/cache/mod.rs index 2622366..2056e31 100644 --- a/server/src/system/cache/mod.rs +++ b/server/src/system/cache/mod.rs @@ -7,6 +7,22 @@ struct WebCacheData { css:String, js:String, favicon:Vec, + + dawn_omen:Vec, + dawn_dragon:Vec, + dawn_castle:Vec, + dawn_tower:Vec, + dawn_lance:Vec, + dawn_knight:Vec, + dawn_militia:Vec, + + dusk_omen:Vec, + dusk_dragon:Vec, + dusk_castle:Vec, + dusk_tower:Vec, + dusk_lance:Vec, + dusk_knight:Vec, + dusk_militia:Vec, } #[derive(Clone)] @@ -18,19 +34,14 @@ impl WebCache { { use std::fs::File; + // HTML let mut html = String::new(); - let mut favicon = Vec::::new(); - - // Cache html file - match File::open("www/.html") { - Ok(mut file) => { - file.read_to_string(&mut html).ok(); + if let Ok(mut file) = File::open("www/.html") { + file.read_to_string(&mut html).ok(); html = minimize_whitespace(&html); - } - Err(_) => { } } - // Cache js file + // CSS let css_path = std::path::Path::new("www/css/"); let css: String = [ "main.css", @@ -40,14 +51,13 @@ impl WebCache { "game.css", ].map(|path| { let mut buffer = String::new(); - match File::open(css_path.join(path)) { - Ok(mut file) => { file.read_to_string(&mut buffer).ok(); } - Err(_) => { } + if let Ok(mut file) = File::open(css_path.join(path)) { + file.read_to_string(&mut buffer).ok(); } buffer }).concat(); - // Cache js file + // JavaScript let js_path = std::path::Path::new("www/js/"); let js = [ "const.js", @@ -61,24 +71,109 @@ impl WebCache { "main.js", ].map(|path| { let mut buffer = String::new(); - match File::open(js_path.join(path)) { - Ok(mut file) => { file.read_to_string(&mut buffer).ok(); } - Err(_) => { } + if let Ok(mut file) = File::open(js_path.join(path)) { + file.read_to_string(&mut buffer).ok(); } buffer }).concat(); - // Cache favicon file - match File::open("www/favicon.png") { - Ok(mut file) => { - file.read_to_end(&mut favicon).ok(); - } - Err(_) => { } + // Favicon + let mut favicon = Vec::::new(); + if let Ok(mut file) = File::open("www/favicon.png") { + file.read_to_end(&mut favicon).ok(); + } + + // Assets + let mut dawn_omen = Vec::::new(); + if let Ok(mut file) = File::open("www/asset/omen_dawn.svg") { + file.read_to_end(&mut dawn_omen).ok(); + } + + let mut dawn_dragon = Vec::::new(); + if let Ok(mut file) = File::open("www/asset/dragon_dawn.svg") { + file.read_to_end(&mut dawn_dragon).ok(); + } + + let mut dawn_castle = Vec::::new(); + if let Ok(mut file) = File::open("www/asset/castle_dawn.svg") { + file.read_to_end(&mut dawn_castle).ok(); + } + + let mut dawn_tower = Vec::::new(); + if let Ok(mut file) = File::open("www/asset/tower_dawn.svg") { + file.read_to_end(&mut dawn_tower).ok(); + } + + let mut dawn_lance = Vec::::new(); + if let Ok(mut file) = File::open("www/asset/lance_dawn.svg") { + file.read_to_end(&mut dawn_lance).ok(); + } + + let mut dawn_knight = Vec::::new(); + if let Ok(mut file) = File::open("www/asset/knight_dawn.svg") { + file.read_to_end(&mut dawn_knight).ok(); + } + + let mut dawn_militia = Vec::::new(); + if let Ok(mut file) = File::open("www/asset/militia_dawn.svg") { + file.read_to_end(&mut dawn_militia).ok(); + } + + + let mut dusk_omen = Vec::::new(); + if let Ok(mut file) = File::open("www/asset/omen_dusk.svg") { + file.read_to_end(&mut dusk_omen).ok(); + } + + let mut dusk_dragon = Vec::::new(); + if let Ok(mut file) = File::open("www/asset/dragon_dusk.svg") { + file.read_to_end(&mut dusk_dragon).ok(); + } + + let mut dusk_castle = Vec::::new(); + if let Ok(mut file) = File::open("www/asset/castle_dusk.svg") { + file.read_to_end(&mut dusk_castle).ok(); + } + + let mut dusk_tower = Vec::::new(); + if let Ok(mut file) = File::open("www/asset/tower_dusk.svg") { + file.read_to_end(&mut dusk_tower).ok(); + } + + let mut dusk_lance = Vec::::new(); + if let Ok(mut file) = File::open("www/asset/lance_dusk.svg") { + file.read_to_end(&mut dusk_lance).ok(); + } + + let mut dusk_knight = Vec::::new(); + if let Ok(mut file) = File::open("www/asset/knight_dusk.svg") { + file.read_to_end(&mut dusk_knight).ok(); + } + + let mut dusk_militia = Vec::::new(); + if let Ok(mut file) = File::open("www/asset/militia_dusk.svg") { + file.read_to_end(&mut dusk_militia).ok(); } Self { data:Arc::new(RwLock::new(WebCacheData { html, css, js, favicon, + + dawn_omen, + dawn_dragon, + dawn_castle, + dawn_tower, + dawn_lance, + dawn_knight, + dawn_militia, + + dusk_omen, + dusk_dragon, + dusk_castle, + dusk_tower, + dusk_lance, + dusk_knight, + dusk_militia, })), } } @@ -114,4 +209,51 @@ impl WebCache { Err(_) => Vec::new(), } } + + pub fn asset(&self, player:u8, id:u8) -> Vec + { + match self.data.read() { + Ok(reader) => { + match id { + 0 => match player { + 0 => reader.dawn_militia.clone(), + 1 => reader.dusk_militia.clone(), + _ => Vec::new(), + } + 1 => match player { + 0 => reader.dawn_knight.clone(), + 1 => reader.dusk_knight.clone(), + _ => Vec::new(), + } + 2 => match player { + 0 => reader.dawn_lance.clone(), + 1 => reader.dusk_lance.clone(), + _ => Vec::new(), + } + 3 => match player { + 0 => reader.dawn_tower.clone(), + 1 => reader.dusk_tower.clone(), + _ => Vec::new(), + } + 4 => match player { + 0 => reader.dawn_castle.clone(), + 1 => reader.dusk_castle.clone(), + _ => Vec::new(), + } + 5 => match player { + 0 => reader.dawn_dragon.clone(), + 1 => reader.dusk_dragon.clone(), + _ => Vec::new(), + } + 6 => match player { + 0 => reader.dawn_omen.clone(), + 1 => reader.dusk_omen.clone(), + _ => Vec::new(), + } + _ => Vec::new(), + } + } + Err(_) => Vec::new(), + } + } } diff --git a/www/asset/castle_dawn.svg b/www/asset/castle_dawn.svg new file mode 100644 index 0000000..a38d0ec --- /dev/null +++ b/www/asset/castle_dawn.svg @@ -0,0 +1,82 @@ + + + + + + + + + + + + + + + diff --git a/www/asset/castle_dusk.svg b/www/asset/castle_dusk.svg new file mode 100644 index 0000000..64ff251 --- /dev/null +++ b/www/asset/castle_dusk.svg @@ -0,0 +1,82 @@ + + + + + + + + + + + + + + + diff --git a/www/asset/dragon_dawn.svg b/www/asset/dragon_dawn.svg new file mode 100644 index 0000000..796dc08 --- /dev/null +++ b/www/asset/dragon_dawn.svg @@ -0,0 +1,85 @@ + + + + + + + + + + + + + + + diff --git a/www/asset/dragon_dusk.svg b/www/asset/dragon_dusk.svg new file mode 100644 index 0000000..da3735e --- /dev/null +++ b/www/asset/dragon_dusk.svg @@ -0,0 +1,85 @@ + + + + + + + + + + + + + + + diff --git a/www/asset/favicon.svg b/www/asset/favicon.svg new file mode 100644 index 0000000..f44dbaf --- /dev/null +++ b/www/asset/favicon.svg @@ -0,0 +1,73 @@ + + + + + + + + + + + + + diff --git a/www/asset/knight_dawn.svg b/www/asset/knight_dawn.svg new file mode 100644 index 0000000..adca537 --- /dev/null +++ b/www/asset/knight_dawn.svg @@ -0,0 +1,72 @@ + + + + + + + + + + + + + diff --git a/www/asset/knight_dusk.svg b/www/asset/knight_dusk.svg new file mode 100644 index 0000000..eaf7d00 --- /dev/null +++ b/www/asset/knight_dusk.svg @@ -0,0 +1,72 @@ + + + + + + + + + + + + + diff --git a/www/asset/lance_dawn.svg b/www/asset/lance_dawn.svg new file mode 100644 index 0000000..fe32f48 --- /dev/null +++ b/www/asset/lance_dawn.svg @@ -0,0 +1,82 @@ + + + + + + + + + + + + + + + diff --git a/www/asset/lance_dusk.svg b/www/asset/lance_dusk.svg new file mode 100644 index 0000000..5c37a9b --- /dev/null +++ b/www/asset/lance_dusk.svg @@ -0,0 +1,82 @@ + + + + + + + + + + + + + + + diff --git a/www/asset/militia_dawn.svg b/www/asset/militia_dawn.svg new file mode 100644 index 0000000..b60e980 --- /dev/null +++ b/www/asset/militia_dawn.svg @@ -0,0 +1,72 @@ + + + + + + + + + + + + + diff --git a/www/asset/militia_dusk.svg b/www/asset/militia_dusk.svg new file mode 100644 index 0000000..67a304e --- /dev/null +++ b/www/asset/militia_dusk.svg @@ -0,0 +1,72 @@ + + + + + + + + + + + + + diff --git a/www/asset/omen_dawn.svg b/www/asset/omen_dawn.svg new file mode 100644 index 0000000..05fa281 --- /dev/null +++ b/www/asset/omen_dawn.svg @@ -0,0 +1,90 @@ + + + + + + + + + + + + + + + + + diff --git a/www/asset/omen_dusk.svg b/www/asset/omen_dusk.svg new file mode 100644 index 0000000..2a58b61 --- /dev/null +++ b/www/asset/omen_dusk.svg @@ -0,0 +1,90 @@ + + + + + + + + + + + + + + + + + diff --git a/www/asset/promote.svg b/www/asset/promote.svg new file mode 100644 index 0000000..52a2be8 --- /dev/null +++ b/www/asset/promote.svg @@ -0,0 +1,65 @@ + + + + + + + + + + + + diff --git a/www/asset/tower_dawn.svg b/www/asset/tower_dawn.svg new file mode 100644 index 0000000..38c1ea0 --- /dev/null +++ b/www/asset/tower_dawn.svg @@ -0,0 +1,111 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/www/asset/tower_dusk.svg b/www/asset/tower_dusk.svg new file mode 100644 index 0000000..459adef --- /dev/null +++ b/www/asset/tower_dusk.svg @@ -0,0 +1,111 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/www/js/game.js b/www/js/game.js index c797621..2dd42ad 100644 --- a/www/js/game.js +++ b/www/js/game.js @@ -5,8 +5,6 @@ GAME.Board = class { constructor() { this.tiles = [ ]; for(let i = 0; i < 61; ++i) { this.tiles.push(new GAME.Tile()); } this.pieces = [ ]; - this.dawn = new GAME.Player(); - this.dusk = new GAME.Player(); this.init(); } @@ -113,9 +111,18 @@ GAME.Move = class { GAME.GamePiece = class { constructor(name, assets, moves, promote_moves) { this.name = name; - this.assets = assets; this.moves = moves; this.pmoves = promote_moves; + this.assets = null; + + if(assets !== null) { + this.assets = [ + new Image(), + new Image() + ]; + this.assets[0].src = assets[0]; + this.assets[1].src = assets[1]; + } } }; @@ -158,7 +165,10 @@ GAME.Piece = class { GAME.Game = class { constructor() { this.turn = 0; + this.board = new GAME.Board(); + this.dawn = new GAME.Player(); + this.dusk = new GAME.Player(); } update_board() { diff --git a/www/js/interface.js b/www/js/interface.js index 6570416..65fa506 100644 --- a/www/js/interface.js +++ b/www/js/interface.js @@ -77,6 +77,7 @@ const INTERFACE = { let radius = INTERFACE.Radius * gui_scale; let basis_x = gui_offset.x + radius; let basis_y = gui_offset.y + (13 * gui_scale); + let icon_radius = 0.7 * radius; const TILE_SCALE = 0.9; ctx.lineWidth = gui_scale * 0.06; @@ -111,6 +112,7 @@ const INTERFACE = { // Draw tile content if(tile.piece !== null) { let piece = GAME_DATA.board.pieces[tile.piece]; + let game_piece = GAME.Const.Piece[piece.piece]; // Draw border if(piece.player == GAME.Const.Player.Dawn) { ctx.strokeStyle = INTERFACE.Color.DawnDark; } @@ -122,7 +124,9 @@ const INTERFACE = { // Draw border hints draw.hints(piece); - // Draw piece + // Draw piece icon + //if(piece.promoted) { ctx.drawImage(I_PROMOTE, -icon_radius, -icon_radius, icon_radius * 2., icon_radius * 2.); } + //ctx.drawImage(game_piece.assets[piece.player], -icon_radius, -icon_radius, icon_radius * 2., icon_radius * 2.); } else { // Draw standard border @@ -136,6 +140,8 @@ const INTERFACE = { } + ctx.font = Math.ceil(gui_scale / 2) + "px sans-serif"; + // Draw player pool for(let i = 0; i < 6; ++i) { let gui_x = basis_x + (radius * 14); @@ -158,6 +164,11 @@ const INTERFACE = { draw.hex(); ctx.stroke(); + ctx.fillStyle = INTERFACE.Color.Dawn; + ctx.textBaseline = "middle"; + ctx.textAlign = "center"; + ctx.fillText(GAME_DATA.dawn.pool.pieces[i], -0.5 * radius, 0); + ctx.restore(); } @@ -186,12 +197,17 @@ const INTERFACE = { draw.hex(); ctx.stroke(); + ctx.fillStyle = INTERFACE.Color.Dusk; + ctx.textBaseline = "middle"; + ctx.textAlign = "center"; + ctx.fillText(GAME_DATA.dusk.pool.pieces[i], -0.5 * radius, 0); + ctx.restore(); } // Draw informational text - ctx.font = Math.ceil(gui_scale / 24) + "px sans-serif"; + ctx.font = Math.ceil(gui_scale / 2) + "px sans-serif"; /*