This commit is contained in:
ntr 2018-12-21 13:18:08 +11:00
parent a6e91a1442
commit 114a6d505c
9 changed files with 48 additions and 133 deletions

View File

@ -1,42 +0,0 @@
const SET_ACCOUNT = 'SET_ACCOUNT';
const setAccount = value => ({ type: SET_ACCOUNT, value });
const SET_CRYPS = 'SET_CRYPS';
const setCryps = value => ({ type: SET_CRYPS, value });
const SET_ITEMS = 'SET_ITEMS';
const setItems = value => ({ type: SET_ITEMS, value });
const SET_GAME = 'SET_GAME';
const setGame = value => ({ type: SET_GAME, value });
const SET_ACTIVE_ITEM = 'SET_ACTIVE_ITEM';
const setActiveItem = value => ({ type: SET_ACTIVE_ITEM, value });
const SET_ACTIVE_INCOMING = 'SET_ACTIVE_INCOMING';
const setActiveIncoming = value => ({ type: SET_ACTIVE_INCOMING, value });
const SET_ACTIVE_SKILL = 'SET_ACTIVE_SKILL';
const setActiveSkill = (crypId, skill) => ({ type: SET_ACTIVE_SKILL, value: crypId ? { crypId, skill } : null });
const SET_WS = 'SET_WS';
const setWs = value => ({ type: SET_WS, value });
module.exports = {
SET_ACCOUNT,
setAccount,
SET_CRYPS,
setCryps,
SET_ITEMS,
setItems,
SET_GAME,
setGame,
SET_ACTIVE_ITEM,
setActiveItem,
SET_ACTIVE_INCOMING,
setActiveIncoming,
SET_ACTIVE_SKILL,
setActiveSkill,
SET_WS,
setWs,
};

View File

@ -24,7 +24,7 @@ function registerEvents(registry, events) {
} }
function setItems(items) { function setItems(items) {
registry.set('items', items); registry.set('itemList', items);
} }
function setGameList(gameList) { function setGameList(gameList) {

View File

@ -3,6 +3,7 @@ const Phaser = require('phaser');
const Combat = require('./combat'); const Combat = require('./combat');
const CrypRows = require('./cryp.row'); const CrypRows = require('./cryp.row');
const GameList = require('./game.list'); const GameList = require('./game.list');
const ItemList = require('./item.list');
const StatSheet = require('./statsheet'); const StatSheet = require('./statsheet');
class CrypList extends Phaser.Scene { class CrypList extends Phaser.Scene {
@ -29,6 +30,10 @@ class CrypList extends Phaser.Scene {
this.renderGameList(); this.renderGameList();
} }
if (key === 'itemList') {
return this.renderItemList();
}
if (key === 'game' && this.scene.isActive()) { if (key === 'game' && this.scene.isActive()) {
this.scene.sleep(); this.scene.sleep();
this.scene.add('Combat', Combat); this.scene.add('Combat', Combat);
@ -62,6 +67,19 @@ class CrypList extends Phaser.Scene {
this.gameList = new GameList({ list: this, ws, cryps, gameList, events: this.game.events }); this.gameList = new GameList({ list: this, ws, cryps, gameList, events: this.game.events });
} }
renderItemList() {
const ws = this.registry.get('ws');
const itemList = this.registry.get('itemList');
if (this.itemList) {
this.itemList.cleanup();
this.itemList.destroy(true);
}
this.itemList = new ItemList({ list: this, ws, itemList, events: this.game.events });
}
displaySkills(cryp) { displaySkills(cryp) {
if (cryp) { if (cryp) {
this.scene.add('StatSheet', StatSheet); this.scene.add('StatSheet', StatSheet);

View File

@ -1,61 +0,0 @@
const Phaser = require('phaser');
const { TEXT, SKILLS, POSITIONS: { STATS } } = require('./constants');
class CrypPage extends Phaser.GameObjects.Group {
constructor(scene, cryp) {
super(scene);
this.id = cryp.id;
this.scene = scene;
this.ws = scene.registry.get('ws');
const TEXT_MARGIN = STATS.textMargin();
const crypStat = (stat, i) => {
const STAT_X = STATS.x();
const STAT_Y = (i * TEXT_MARGIN) + STATS.y() + TEXT_MARGIN;
const text = scene.add.text(STAT_X, STAT_Y, `${stat.stat}: ${stat.base}`, TEXT.NORMAL);
this.add(text);
};
const knownSkill = (skill, i) => {
const SKILL_X = STATS.knownX();
const SKILL_Y = (i * TEXT_MARGIN) + STATS.y() + TEXT_MARGIN;
const text = scene.add.text(SKILL_X, SKILL_Y, skill.skill, TEXT.NORMAL)
.setInteractive();
text.on('pointerdown', () => {
this.ws.sendCrypForget(cryp.id, skill.skill);
});
this.add(text);
};
const learnable = (skill, i) => {
const SKILL_X = STATS.learnableX();
const SKILL_Y = (i * TEXT_MARGIN) + STATS.y() + TEXT_MARGIN;
const text = scene.add.text(SKILL_X, SKILL_Y, `${skill.name}\n${skill.description}`, TEXT.NORMAL)
.setInteractive();
text.on('pointerdown', () => {
this.ws.sendCrypLearn(cryp.id, skill);
});
this.add(text);
text.cryp = cryp;
};
const CRYP_STATS = [cryp.stamina, cryp.phys_dmg, cryp.spell_dmg];
this.add(scene.add.text(STATS.x(), STATS.y(), cryp.name, TEXT.HEADER));
CRYP_STATS.forEach(crypStat);
this.add(scene.add.text(STATS.knownX(), STATS.y(), 'Skills', TEXT.HEADER));
cryp.skills.forEach(knownSkill);
this.add(scene.add.text(STATS.learnableX(), STATS.y(), 'Learnable', TEXT.HEADER));
SKILLS.LEARNABLE.forEach(learnable);
}
}
module.exports = CrypPage;

View File

@ -8,7 +8,7 @@ const {
class GameList extends Phaser.GameObjects.Group { class GameList extends Phaser.GameObjects.Group {
constructor(args) { constructor(args) {
super(list); super(args.list);
const { list, events, ws, cryps, gameList } = args; const { list, events, ws, cryps, gameList } = args;
@ -98,13 +98,13 @@ class GameList extends Phaser.GameObjects.Group {
pve.on('pointerdown', () => { pve.on('pointerdown', () => {
const team = cryps.filter(c => c.active).map(c => c.id); const team = cryps.filter(c => c.active).map(c => c.id);
if (team.length === 0) return false; if (team.length === 0) return false;
return ws.sendGamePve(team, 'normal'); return ws.sendGamePve(team, 'Normal');
}); });
boss.on('pointerdown', () => { boss.on('pointerdown', () => {
const team = cryps.filter(c => c.active).map(c => c.id); const team = cryps.filter(c => c.active).map(c => c.id);
if (team.length === 0) return false; if (team.length === 0) return false;
return ws.sendGamePve(team, 'boss'); return ws.sendGamePve(team, 'Boss');
}); });

View File

@ -22,9 +22,9 @@ pub struct CrypSkill {
impl CrypSkill { impl CrypSkill {
pub fn new(skill: Skill) -> CrypSkill { pub fn new(skill: Skill) -> CrypSkill {
CrypSkill { CrypSkill {
skill, skill,
self_targeting: skill.self_targeting(), self_targeting: skill.self_targeting(),
cd: skill.base_cd(), cd: skill.base_cd(),
} }
} }
} }

View File

@ -18,6 +18,12 @@ use item::{item_drop};
pub type Log = Vec<String>; pub type Log = Vec<String>;
#[derive(Debug,Clone,Serialize,Deserialize)]
pub enum PveMode {
Boss,
Normal,
}
#[derive(Debug,Clone,Serialize,Deserialize)] #[derive(Debug,Clone,Serialize,Deserialize)]
pub struct Team { pub struct Team {
id: Uuid, id: Uuid,
@ -308,12 +314,6 @@ impl Game {
.filter(|s| s.target_cryp_id.is_none() && s.target_team_id == mob_team_id) .filter(|s| s.target_cryp_id.is_none() && s.target_team_id == mob_team_id)
.enumerate() .enumerate()
.map(|(i, s)| (i, s.id)) { .map(|(i, s)| (i, s.id)) {
// let target_id = match mobs.cryps.iter().find(|c| {
// self.cryp_targetable(mob_team_id, c.id).is_ok()})
// {
// Some(c) => c.id,
// None => panic!("could not find a targetable pve cryp"),
// };
let targets = mobs.cryps let targets = mobs.cryps
.iter() .iter()
.filter(|c| self.cryp_targetable(mob_team_id, c.id).is_ok()) .filter(|c| self.cryp_targetable(mob_team_id, c.id).is_ok())
@ -753,30 +753,30 @@ fn generate_mob(lvl: u8) -> Cryp {
} }
fn generate_mob_team(mode: String, cryps: &Vec<Cryp>) -> Team { fn generate_mob_team(mode: PveMode, cryps: &Vec<Cryp>) -> Team {
let mut mob_team = Team::new(Uuid::nil()); let mut mob_team = Team::new(Uuid::nil());
// Default settings // Default settings
let mut team_size = 1; let mut team_size = 1;
let mut mob_lvl = 1;
// Modify the NPC cryps for game mode settings // Modify the NPC cryps for game mode settings
if (mode == "normal") { let mob_lvl = match mode {
team_size = cryps.len(); PveMode::Normal => {
mob_lvl = cryps.iter().max_by_key(|c| c.lvl).unwrap().lvl; team_size = cryps.len();
} else if (mode == "boss") { cryps.iter().max_by_key(|c| c.lvl).unwrap().lvl
mob_lvl = cryps.iter().max_by_key(|c| c.lvl).unwrap().lvl + 2; },
} PveMode::Boss => cryps.iter().max_by_key(|c| c.lvl).unwrap().lvl + 2,
};
// Generate and return the NPC team based on settings // Generate and return the NPC team based on settings
let mobs = iter::repeat_with(|| generate_mob(mob_lvl).set_account(Uuid::nil())) let mobs = iter::repeat_with(|| generate_mob(mob_lvl).set_account(Uuid::nil()))
.take(team_size) .take(team_size)
.collect::<Vec<Cryp>>(); .collect::<Vec<Cryp>>();
mob_team.set_cryps(mobs); mob_team.set_cryps(mobs);
return mob_team; return mob_team;
} }
pub fn game_pve(params: GamePveParams, tx: &mut Transaction, account: &Account) -> Result<Game, Error> { pub fn game_pve(params: GamePveParams, tx: &mut Transaction, account: &Account) -> Result<Game, Error> {
@ -800,7 +800,7 @@ pub fn game_pve(params: GamePveParams, tx: &mut Transaction, account: &Account)
// create the mob team // create the mob team
let mut mob_team = generate_mob_team(params.mode, &cryps); let mut mob_team = generate_mob_team(params.mode, &cryps);
// add the players // add the players
let mut plr_team = Team::new(account.id); let mut plr_team = Team::new(account.id);
plr_team plr_team

View File

@ -16,7 +16,7 @@ use failure::err_msg;
use net::Db; use net::Db;
use cryp::{Cryp, cryp_spawn, cryp_learn, cryp_forget}; use cryp::{Cryp, cryp_spawn, cryp_learn, cryp_forget};
use game::{Game, game_state, game_pve, game_pvp, game_join, game_joinable_list, game_skill, game_target}; use game::{Game, PveMode, game_state, game_pve, game_pvp, game_join, game_joinable_list, game_skill, game_target};
use account::{Account, account_create, account_login, account_from_token, account_cryps}; use account::{Account, account_create, account_login, account_from_token, account_cryps};
use item::{Item, items_list, item_use}; use item::{Item, items_list, item_use};
use skill::{Skill}; use skill::{Skill};
@ -395,7 +395,7 @@ struct GamePveMsg {
#[derive(Debug,Clone,Serialize,Deserialize)] #[derive(Debug,Clone,Serialize,Deserialize)]
pub struct GamePveParams { pub struct GamePveParams {
pub cryp_ids: Vec<Uuid>, pub cryp_ids: Vec<Uuid>,
pub mode: String, pub mode: PveMode,
} }
#[derive(Debug,Clone,Serialize,Deserialize)] #[derive(Debug,Clone,Serialize,Deserialize)]

View File

@ -834,8 +834,8 @@ fn empower(_cryp: &mut Cryp, target: &mut Cryp, mut resolution: Resolution) -> R
} }
// TODO put overhealing back // TODO put overhealing back
fn heal(cryp: &mut Cryp, target: &mut Cryp, mut resolution: Resolution) -> Resolution { fn heal(cryp: &mut Cryp, _target: &mut Cryp, resolution: Resolution) -> Resolution {
let amount = cryp.phys_dmg(); let _amount = cryp.phys_dmg();
return resolution; return resolution;
} }