67 lines
2.1 KiB
JavaScript
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,
|
|
};
|