From 2cac857f2c84767cac108e9596ee92cdd4c2a936 Mon Sep 17 00:00:00 2001 From: Mashy Date: Thu, 20 Dec 2018 15:10:58 +1000 Subject: [PATCH] Trying to join the big leagues --- client/src/scenes/combat.cryps.js | 32 +++++++++++++++------------ client/src/scenes/combat.js | 2 -- client/src/scenes/game.list.js | 19 +++++++++++++++- client/src/socket.js | 4 ++-- server/src/game.rs | 36 ++++++++++++++++++++++++------- server/src/rpc.rs | 1 + 6 files changed, 67 insertions(+), 27 deletions(-) diff --git a/client/src/scenes/combat.cryps.js b/client/src/scenes/combat.cryps.js index 9e42f2d6..36ef1c14 100644 --- a/client/src/scenes/combat.cryps.js +++ b/client/src/scenes/combat.cryps.js @@ -208,20 +208,7 @@ class CombatCryps extends Phaser.Scene { } if (key === 'crypStatusUpdate' && data) { - const targetCryp = this.cryps.children.entries - .find(c => c.cryp.id === data.id); - - if (this.phase === 'Skill') { - targetCryp.statusText.text = data.target === targetCryp.cryp.account - ? `${data.skill} on ally team` - : `${data.skill} on enemy team`; - } - - if (this.phase === 'Target') { - const sourceCryp = this.cryps.children.entries - .find(c => c.cryp.id === data.skill.source_cryp_id); - targetCryp.statusText.text = `${sourceCryp.cryp.name} ${data.skill.skill} ${targetCryp.cryp.name}`; - } + this.updateCrypStatus(data); } return true; @@ -260,6 +247,23 @@ class CombatCryps extends Phaser.Scene { if (crypId) this.cryps.children.entries.find(c => c.cryp.id === crypId).select(); } + updateCrypStatus(status) { + const targetCryp = this.cryps.children.entries + .find(c => c.cryp.id === status.id); + + if (this.phase === 'Skill') { + targetCryp.statusText.text = status.target === targetCryp.cryp.account + ? `${status.skill} on ally team` + : `${status.skill} on enemy team`; + } + + if (this.phase === 'Target') { + const sourceCryp = this.cryps.children.entries + .find(c => c.cryp.id === status.skill.source_cryp_id); + targetCryp.statusText.text = `${sourceCryp.cryp.name} ${status.skill.skill} ${targetCryp.cryp.name}`; + } + } + cleanUp() { this.registry.events.off('changedata', this.updateData); this.scene.remove(); diff --git a/client/src/scenes/combat.js b/client/src/scenes/combat.js index 69a8104a..02be843e 100644 --- a/client/src/scenes/combat.js +++ b/client/src/scenes/combat.js @@ -24,8 +24,6 @@ class Combat extends Phaser.Scene { aztecImg.onload = () => { this.textures.addAtlas('aztec', aztecImg, aztecAtlas); }; - // this.textures.addBase64('alk', `data:image/png;base64,${new Buffer.from(fs.readFileSync('./assets/magmar.png')).toString('base64')}`); - // this.textures.addBase64('magmar', `data:image/png;base64,${new Buffer.from(fs.readFileSync('./assets/magmar.png')).toString('base64')}`); this.load.image('proj', 'https://labs.phaser.io/assets/sprites/bullet.png'); this.load.image('blue', 'https://labs.phaser.io/assets/particles/blue.png'); this.load.image('green', 'https://labs.phaser.io/assets/particles/green.png'); diff --git a/client/src/scenes/game.list.js b/client/src/scenes/game.list.js index 54abeb47..13e6601b 100644 --- a/client/src/scenes/game.list.js +++ b/client/src/scenes/game.list.js @@ -44,6 +44,16 @@ class GameList extends Phaser.GameObjects.Group { .text(pve.getCenter().x, pve.getCenter().y, 'new PVE\ngame', TEXT.HEADER) .setOrigin(0.5, 0.5)); + const boss = list.add + .rectangle(X, GAME_LIST.y(2), WIDTH, HEIGHT, 0x441122) + .setInteractive() + .setOrigin(0); + + this.add(list.add + .text(boss.getCenter().x, boss.getCenter().y, 'new Boss\ngame', TEXT.HEADER) + .setOrigin(0.5, 0.5)); + + const refresh = list.add .rectangle(X + WIDTH, GAME_LIST.y(1), WIDTH, HEIGHT, 0x000044) .setInteractive() @@ -88,9 +98,16 @@ class GameList extends Phaser.GameObjects.Group { pve.on('pointerdown', () => { const team = cryps.filter(c => c.active).map(c => c.id); if (team.length === 0) return false; - return ws.sendGamePve(team); + return ws.sendGamePve(team, 'normal'); }); + boss.on('pointerdown', () => { + const team = cryps.filter(c => c.active).map(c => c.id); + if (team.length === 0) return false; + return ws.sendGamePve(team, 'boss'); + }); + + refresh.on('pointerdown', () => { return ws.sendGameJoinableList(); }); diff --git a/client/src/socket.js b/client/src/socket.js index 87bd85bc..c8019a66 100644 --- a/client/src/socket.js +++ b/client/src/socket.js @@ -64,8 +64,8 @@ function createSocket(events) { send({ method: 'game_state', params: { id } }); } - function sendGamePve(crypIds) { - send({ method: 'game_pve', params: { cryp_ids: crypIds } }); + function sendGamePve(crypIds, mode) { + send({ method: 'game_pve', params: { cryp_ids: crypIds, mode } }); } function sendGamePvp(crypIds) { diff --git a/server/src/game.rs b/server/src/game.rs index 9499aac1..a658a90e 100644 --- a/server/src/game.rs +++ b/server/src/game.rs @@ -743,6 +743,32 @@ fn generate_mob(lvl: u8) -> Cryp { } +fn generate_mob_team(mode: String, cryps: &Vec) -> Team { + + let mut mob_team = Team::new(Uuid::nil()); + + // Default settings + let mut team_size = 1; + let mut mob_lvl = 1; + + // Modify the NPC cryps for game mode settings + if (mode == "normal") { + team_size = cryps.len(); + mob_lvl = cryps.iter().max_by_key(|c| c.lvl).unwrap().lvl; + } else if (mode == "boss") { + mob_lvl = cryps.iter().max_by_key(|c| c.lvl).unwrap().lvl + 2; + } + + // Generate and return the NPC team based on settings + let mobs = iter::repeat_with(|| generate_mob(mob_lvl).set_account(Uuid::nil())) + .take(team_size) + .collect::>(); + mob_team.set_cryps(mobs); + + return mob_team; + +} + pub fn game_pve(params: GamePveParams, tx: &mut Transaction, account: &Account) -> Result { let cryps = params.cryp_ids .iter() @@ -763,19 +789,13 @@ pub fn game_pve(params: GamePveParams, tx: &mut Transaction, account: &Account) .set_team_size(cryps.len()); // create the mob team - let mut mob_team = Team::new(Uuid::nil()); - let mob_lvl = cryps.iter().max_by_key(|c| c.lvl).unwrap().lvl; - let mobs = iter::repeat_with(|| generate_mob(mob_lvl).set_account(Uuid::nil())) - .take(cryps.len()) - .collect::>(); - + let mut mob_team = generate_mob_team(params.mode, &cryps); + // add the players let mut plr_team = Team::new(account.id); plr_team .set_cryps(cryps); - mob_team - .set_cryps(mobs); game .team_add(plr_team)? diff --git a/server/src/rpc.rs b/server/src/rpc.rs index b636ec6f..25c8e766 100644 --- a/server/src/rpc.rs +++ b/server/src/rpc.rs @@ -405,6 +405,7 @@ struct GamePveMsg { #[derive(Debug,Clone,Serialize,Deserialize)] pub struct GamePveParams { pub cryp_ids: Vec, + pub mode: String, } #[derive(Debug,Clone,Serialize,Deserialize)]