set animfocus server side

This commit is contained in:
Mashy 2019-12-06 20:50:47 +10:00
parent 261ab1d48b
commit b405608510
3 changed files with 11 additions and 18 deletions

View File

@ -23,22 +23,7 @@ function getAnimTarget(resolution, account) {
}; };
} }
function getFocusTargets(resolution, game, account) {
if (resolution.variant[1] === 'HitAoe') {
const playerTeam = game.players.find(t => t.id === account.id);
const playerTeamIds = playerTeam.constructs.map(c => c.id);
const otherTeam = game.players.find(t => t.id !== account.id);
const otherTeamIds = otherTeam.constructs.map(c => c.id);
if (resolution.cast.player === account) return playerTeamIds;
return otherTeamIds;
}
const { source, target } = resolution.cast;
return [source, target];
}
module.exports = { module.exports = {
getAnimSource, getAnimSource,
getAnimTarget, getAnimTarget,
getFocusTargets,
}; };

View File

@ -5,7 +5,7 @@ const eachSeries = require('async/eachSeries');
const sample = require('lodash/sample'); const sample = require('lodash/sample');
const actions = require('./actions'); const actions = require('./actions');
const { getAnimSource, getAnimTarget, getFocusTargets } = require('./animations.utils'); const { getAnimSource, getAnimTarget } = require('./animations.utils');
const { infoToast, errorToast } = require('./utils'); const { infoToast, errorToast } = require('./utils');
const { tutorialVbox } = require('./tutorial.utils'); const { tutorialVbox } = require('./tutorial.utils');
const { TIMES } = require('./constants'); const { TIMES } = require('./constants');
@ -90,18 +90,19 @@ function registerEvents(store) {
const newRes = game.events[currentGame.events.length]; const newRes = game.events[currentGame.events.length];
return eachSeries(newRes, (r, cb) => { return eachSeries(newRes, (r, cb) => {
const timeout = r.delay; const timeout = r.delay;
const focusTargets = getFocusTargets(r, game, account); store.dispatch(actions.setAnimFocus(r.focus));
store.dispatch(actions.setAnimFocus(focusTargets));
if (r.variant[0] === 'Cast') { if (r.variant[0] === 'Cast') {
const animSource = getAnimSource(r, account); const animSource = getAnimSource(r, account);
store.dispatch(actions.setAnimSource(animSource)); store.dispatch(actions.setAnimSource(animSource));
store.dispatch(actions.setAnimText(null)); store.dispatch(actions.setAnimText(null));
setTimeout(() => store.dispatch(actions.setAnimSource(null)), TIMES.SOURCE_DURATION_MS); setTimeout(() => store.dispatch(actions.setAnimSource(null)), TIMES.SOURCE_DURATION_MS);
} else if (r.variant[0].includes('Hit')) { } else if (r.variant[0].includes('Hit')) {
const animTarget = getAnimTarget(r, account); const animTarget = getAnimTarget(r, account);
store.dispatch(actions.setAnimTarget(animTarget)); store.dispatch(actions.setAnimTarget(animTarget));
store.dispatch(actions.setAnimText(null)); store.dispatch(actions.setAnimText(null));
setTimeout(() => store.dispatch(actions.setAnimTarget(null)), TIMES.TARGET_DURATION_MS); setTimeout(() => store.dispatch(actions.setAnimTarget(null)), TIMES.TARGET_DURATION_MS);
} else { } else {
store.dispatch(actions.setAnimText(r)); store.dispatch(actions.setAnimText(r));

View File

@ -231,6 +231,7 @@ pub type Disable = Vec<Effect>;
#[derive(Debug,Clone,PartialEq,Serialize,Deserialize)] #[derive(Debug,Clone,PartialEq,Serialize,Deserialize)]
pub struct Event { pub struct Event {
pub cast: Cast, pub cast: Cast,
pub focus: Vec<Uuid>,
pub variant: EventVariant, pub variant: EventVariant,
pub delay: i64, pub delay: i64,
} }
@ -274,8 +275,14 @@ impl EventVariant {
pub fn to_event(&self, cast: Cast) -> Event { pub fn to_event(&self, cast: Cast) -> Event {
let delay = self.delay(); let delay = self.delay();
let focus = match self {
EventVariant::HitAoe { target: _ } => vec![cast.source, cast.target], // some tricky multi target here l8r
_ => vec![cast.source, cast.target],
};
Event { Event {
cast, cast,
focus,
variant: *self, variant: *self,
delay, delay,
} }