binmat
Version:
binmat simulator
139 lines (138 loc) • 7.25 kB
JavaScript
function generateArgs(state, defender, attacker, binlog) {
return state.turn % 2 ?
generateArgsForAttacker(state, defender, attacker, binlog)
: generateArgsForDefender(state, defender, attacker, binlog)
}
function generateArgsForDefender(state, defender, attacker, binlog) {
const args = {
plr: "d0",
s: { turns: state.turn, ord: 0 },
plrs: [
["d0", defender],
["a0", attacker]
],
ops: binlog
}
return (
state.laneDecks[0].length && (args.s.l0 = { c: state.laneDecks[0].length, t: "X" }),
state.laneDecks[1].length && (args.s.l1 = { c: state.laneDecks[1].length, t: "X" }),
state.laneDecks[2].length && (args.s.l2 = { c: state.laneDecks[2].length, t: "X" }),
state.laneDecks[3].length && (args.s.l3 = { c: state.laneDecks[3].length, t: state.laneDecks[3].at(-1) }),
state.laneDecks[4].length && (args.s.l4 = { c: state.laneDecks[4].length, t: state.laneDecks[4].at(-1) }),
state.laneDecks[5].length && (args.s.l5 = { c: state.laneDecks[5].length, t: state.laneDecks[5].at(-1) }),
state.laneDiscardPiles[0].length && (args.s.x0 = state.laneDiscardPiles[0].map(card => `${card}u`)),
state.laneDiscardPiles[1].length && (args.s.x1 = state.laneDiscardPiles[1].map(card => `${card}u`)),
state.laneDiscardPiles[2].length && (args.s.x2 = state.laneDiscardPiles[2].map(card => `${card}u`)),
state.laneDiscardPiles[3].length && (args.s.x3 = state.laneDiscardPiles[3].map(card => `${card}u`)),
state.laneDiscardPiles[4].length && (args.s.x4 = state.laneDiscardPiles[4].map(card => `${card}u`)),
state.laneDiscardPiles[5].length && (args.s.x5 = state.laneDiscardPiles[5].map(card => `${card}u`)),
state.attackerDiscardPile.length && (args.s.xa = [...state.attackerDiscardPile]),
state.attackerDeck.length && (args.s.a = { c: state.attackerDeck.length, t: "X" }),
state.attackerStacks[0].length && (args.s.a0 = state.attackerStacks[0].map(() => "X")),
state.attackerStacks[1].length && (args.s.a1 = state.attackerStacks[1].map(() => "X")),
state.attackerStacks[2].length && (args.s.a2 = state.attackerStacks[2].map(() => "X")),
state.attackerStacks[3].length && (args.s.a3 = state.attackerStacks[3].map(() => "X")),
state.attackerStacks[4].length && (args.s.a4 = state.attackerStacks[4].map(() => "X")),
state.attackerStacks[5].length && (args.s.a5 = state.attackerStacks[5].map(() => "X")),
state.defenderStacks[0].cards.length &&
(args.s.d0 =
state.defenderStacks[0].isFaceUp ?
state.defenderStacks[0].cards.map(card => `${card}u`)
: [...state.defenderStacks[0].cards]),
state.defenderStacks[1].cards.length &&
(args.s.d1 =
state.defenderStacks[1].isFaceUp ?
state.defenderStacks[1].cards.map(card => `${card}u`)
: [...state.defenderStacks[1].cards]),
state.defenderStacks[2].cards.length &&
(args.s.d2 =
state.defenderStacks[2].isFaceUp ?
state.defenderStacks[2].cards.map(card => `${card}u`)
: [...state.defenderStacks[2].cards]),
state.defenderStacks[3].cards.length &&
(args.s.d3 =
state.defenderStacks[3].isFaceUp ?
state.defenderStacks[3].cards.map(card => `${card}u`)
: [...state.defenderStacks[3].cards]),
state.defenderStacks[4].cards.length &&
(args.s.d4 =
state.defenderStacks[4].isFaceUp ?
state.defenderStacks[4].cards.map(card => `${card}u`)
: [...state.defenderStacks[4].cards]),
state.defenderStacks[5].cards.length &&
(args.s.d5 =
state.defenderStacks[5].isFaceUp ?
state.defenderStacks[5].cards.map(card => `${card}u`)
: [...state.defenderStacks[5].cards]),
state.attackerHand.length && (args.s.ha0 = state.attackerHand.length),
state.defenderHand.length && (args.s.hd0 = [...state.defenderHand]),
args
)
}
function generateArgsForAttacker(state, defender, attacker, binlog) {
const args = {
plr: "a0",
s: { turns: state.turn, ord: 0 },
plrs: [
["d0", defender],
["a0", attacker]
],
ops: binlog
}
return (
state.laneDecks[0].length && (args.s.l0 = { c: state.laneDecks[0].length, t: "X" }),
state.laneDecks[1].length && (args.s.l1 = { c: state.laneDecks[1].length, t: "X" }),
state.laneDecks[2].length && (args.s.l2 = { c: state.laneDecks[2].length, t: "X" }),
state.laneDecks[3].length && (args.s.l3 = { c: state.laneDecks[3].length, t: state.laneDecks[3].at(-1) }),
state.laneDecks[4].length && (args.s.l4 = { c: state.laneDecks[4].length, t: state.laneDecks[4].at(-1) }),
state.laneDecks[5].length && (args.s.l5 = { c: state.laneDecks[5].length, t: state.laneDecks[5].at(-1) }),
state.laneDiscardPiles[0].length && (args.s.x0 = state.laneDiscardPiles[0].map(card => `${card}u`)),
state.laneDiscardPiles[1].length && (args.s.x1 = state.laneDiscardPiles[1].map(card => `${card}u`)),
state.laneDiscardPiles[2].length && (args.s.x2 = state.laneDiscardPiles[2].map(card => `${card}u`)),
state.laneDiscardPiles[3].length && (args.s.x3 = state.laneDiscardPiles[3].map(card => `${card}u`)),
state.laneDiscardPiles[4].length && (args.s.x4 = state.laneDiscardPiles[4].map(card => `${card}u`)),
state.laneDiscardPiles[5].length && (args.s.x5 = state.laneDiscardPiles[5].map(card => `${card}u`)),
state.attackerDiscardPile.length && (args.s.xa = [...state.attackerDiscardPile]),
state.attackerDeck.length && (args.s.a = { c: state.attackerDeck.length, t: "X" }),
state.attackerStacks[0].length && (args.s.a0 = [...state.attackerStacks[0]]),
state.attackerStacks[1].length && (args.s.a1 = [...state.attackerStacks[1]]),
state.attackerStacks[2].length && (args.s.a2 = [...state.attackerStacks[2]]),
state.attackerStacks[3].length && (args.s.a3 = [...state.attackerStacks[3]]),
state.attackerStacks[4].length && (args.s.a4 = [...state.attackerStacks[4]]),
state.attackerStacks[5].length && (args.s.a5 = [...state.attackerStacks[5]]),
state.defenderStacks[0].cards.length &&
(args.s.d0 =
state.defenderStacks[0].isFaceUp ?
state.defenderStacks[0].cards.map(card => `${card}u`)
: state.defenderStacks[0].cards.map(() => "X")),
state.defenderStacks[1].cards.length &&
(args.s.d1 =
state.defenderStacks[1].isFaceUp ?
state.defenderStacks[1].cards.map(card => `${card}u`)
: state.defenderStacks[1].cards.map(() => "X")),
state.defenderStacks[2].cards.length &&
(args.s.d2 =
state.defenderStacks[2].isFaceUp ?
state.defenderStacks[2].cards.map(card => `${card}u`)
: state.defenderStacks[2].cards.map(() => "X")),
state.defenderStacks[3].cards.length &&
(args.s.d3 =
state.defenderStacks[3].isFaceUp ?
state.defenderStacks[3].cards.map(card => `${card}u`)
: state.defenderStacks[3].cards.map(() => "X")),
state.defenderStacks[4].cards.length &&
(args.s.d4 =
state.defenderStacks[4].isFaceUp ?
state.defenderStacks[4].cards.map(card => `${card}u`)
: state.defenderStacks[4].cards.map(() => "X")),
state.defenderStacks[5].cards.length &&
(args.s.d5 =
state.defenderStacks[5].isFaceUp ?
state.defenderStacks[5].cards.map(card => `${card}u`)
: state.defenderStacks[5].cards.map(() => "X")),
state.attackerHand.length && (args.s.ha0 = [...state.attackerHand]),
state.defenderHand.length && (args.s.hd0 = state.defenderHand.length),
args
)
}
export { generateArgs, generateArgsForAttacker, generateArgsForDefender }