mnml/client/src/animations.utils.jsx

67 lines
2.1 KiB
JavaScript

const direction = (game, account, source, target) => {
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);
const sourceIsPlayer = playerTeamIds.includes(source);
const targetIsPlayer = playerTeamIds.includes(target);
const sameTeam = (sourceIsPlayer && targetIsPlayer) || (!sourceIsPlayer && !targetIsPlayer);
let y = 0;
if (!sameTeam) y = targetIsPlayer ? 1 : -1;
const i = sourceIsPlayer
? playerTeamIds.findIndex(c => c === source)
: otherTeamIds.findIndex(c => c === source);
const j = targetIsPlayer
? playerTeamIds.findIndex(c => c === target)
: otherTeamIds.findIndex(c => c === target);
const x = j - i;
return { x, y };
};
function getAnimSource(resolution, game, account) {
const { source, target } = resolution.cast;
const animSource = {
animation: 'sourceCast',
constructId: source,
direction: direction(game, account, source, target),
};
return animSource;
}
function getAnimTarget(resolution, game, account) {
const { source, target, skill } = resolution.cast;
const player = resolution.cast.player === account;
const animTarget = {
constructId: resolution.cast.target,
player,
direction: direction(game, account, source, target),
skill,
};
return animTarget;
}
function getFocusTargets(resolution, game, account) {
if (resolution.variant[1] === 'AoeHit') {
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 = {
getAnimSource,
getAnimTarget,
getFocusTargets,
};