Bond strip follows the watched teammate (v2.5.2): prep scouting, after the own battle, 联防, Final Assault, eliminated observers
- the strip, its counts / layers / tiers and the bond popups show the player whose field or half is on screen, with an amber "👁 name" tag; live in-battle layers (runner bondLayers, ≤ 999) and the finished battle's gains until SETTLE - shared fields follow the ‹ › half's player; 全景 shows your own when you fight there, else the picked teammate [ASSUMED] - a card's bond chips and popups belong to the unit's owner; a teammate's popup lists their operators on the field - m.public players[].bonds for living players only; a reload while watching after the own battle returns to it - DESIGN §20.15, META, PLAYING; tests (unit, UI logic, 4 browser scenarios)
This commit is contained in:
1 parent
620f88c0d8
commit
82c64086d5
21 files changed
+2087
-57
No files matched your search
@@ -17,6 +17,8 @@
|
||||
// `tier` = number of thresholds reached (downward: 1 when active); `active = tier ≥ 1`.
|
||||
// Layers (`ps.layers[bondId]`) persist the whole match; they are reported for every bond but only matter while active.
|
||||
|
||||
import { layerGainRoom } from '../../shared/constants.js';
|
||||
|
||||
export const HARMONY_BOND = 'maniShip';
|
||||
export const DEPUTY_BOND = 'deputShip';
|
||||
|
||||
@@ -164,6 +166,29 @@ export function bondList(gd, bonds, { full = false } = {}) {
|
||||
return list;
|
||||
}
|
||||
|
||||
/**
|
||||
* The bond states the views show (m.private / m.public players[].bonds, DESIGN §20.15): `bonds` with this round's
|
||||
* IN_BATTLE gains of a finished normal battle (`gains` = the result's layerGains, PlayerState.pendingLayerGains, set
|
||||
* when the COMBAT phase ends) added the way settle() will add them — at most up to BOND_LAYER_CAP — so the strip of a
|
||||
* player (and of a teammate watching him) keeps the layers his battle reached through the 联防 until the settlement
|
||||
* makes them persistent. `bonds` itself when there is nothing to add; the persistent state is never touched.
|
||||
* @param {ReturnType<typeof computeBonds>} bonds
|
||||
* @param {Record<string, number>|null|undefined} gains
|
||||
*/
|
||||
export function bondsWithGains(bonds, gains) {
|
||||
if (!gains || typeof gains !== 'object') return bonds;
|
||||
let out = null;
|
||||
for (const [id, n] of Object.entries(gains)) {
|
||||
const b = bonds && bonds[id];
|
||||
if (!b) continue;
|
||||
const add = layerGainRoom(b.layers, Math.floor(Number(n) || 0));
|
||||
if (!(add > 0)) continue;
|
||||
if (!out) out = { ...bonds };
|
||||
out[id] = { ...b, layers: (b.layers || 0) + add };
|
||||
}
|
||||
return out || bonds;
|
||||
}
|
||||
|
||||
/** Snapshot for PlayerBattleInput.bonds: { [bondId]: { count, active, tier, layers } } (plain copy). */
|
||||
export function bondSnapshot(bonds) {
|
||||
const o = {};
|
||||
|
||||
Reference in new issue
Block a user