为AI类以及其涉及到的其他类的函数进行注释
This commit is contained in:
parent
f7495db4b2
commit
f9a111dc8b
|
@ -47,10 +47,7 @@ new Promise(resolve => {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @type { Promise<import('../noname.js')> }
|
* @type { Promise<import('../noname.js')> }
|
||||||
*
|
|
||||||
* game.js不是一个模块,所以导入的路径是从html文件开始算起的
|
|
||||||
*/
|
*/
|
||||||
// @ts-ignore
|
|
||||||
const module = import('../noname.js');
|
const module = import('../noname.js');
|
||||||
|
|
||||||
module.then(({ ai, game, get, lib, _status, ui }) => {
|
module.then(({ ai, game, get, lib, _status, ui }) => {
|
||||||
|
|
|
@ -7,11 +7,17 @@ import { GNC as gnc } from '../gnc/index.js';
|
||||||
import { Uninstantable } from "../util/index.js";
|
import { Uninstantable } from "../util/index.js";
|
||||||
|
|
||||||
export class Basic extends Uninstantable {
|
export class Basic extends Uninstantable {
|
||||||
|
/**
|
||||||
|
* @param { (
|
||||||
|
* button: import('../library/index.js').Button,
|
||||||
|
* buttons?: import('../library/index.js').Button[]
|
||||||
|
* ) => number } check
|
||||||
|
*/
|
||||||
static chooseButton(check) {
|
static chooseButton(check) {
|
||||||
var event = _status.event;
|
const event = _status.event;
|
||||||
var i, j, range, buttons, buttons2;
|
let i, j, range, buttons, buttons2;
|
||||||
var ok = false, forced = event.forced;
|
let ok = false, forced = event.forced;
|
||||||
var iwhile = 100;
|
let iwhile = 100;
|
||||||
while (iwhile--) {
|
while (iwhile--) {
|
||||||
range = get.select(event.selectButton);
|
range = get.select(event.selectButton);
|
||||||
if (ui.selected.buttons.length >= range[0]) {
|
if (ui.selected.buttons.length >= range[0]) {
|
||||||
|
@ -29,10 +35,10 @@ export class Basic extends Uninstantable {
|
||||||
return ok;
|
return ok;
|
||||||
}
|
}
|
||||||
buttons2 = buttons.slice(0);
|
buttons2 = buttons.slice(0);
|
||||||
var ix = 0;
|
let ix = 0;
|
||||||
var checkix = check(buttons[0], buttons2);
|
let checkix = check(buttons[0], buttons2);
|
||||||
for (i = 1; i < buttons.length; i++) {
|
for (i = 1; i < buttons.length; i++) {
|
||||||
var checkixtmp = check(buttons[i], buttons2);
|
let checkixtmp = check(buttons[i], buttons2);
|
||||||
if (checkixtmp > checkix) {
|
if (checkixtmp > checkix) {
|
||||||
ix = i;
|
ix = i;
|
||||||
checkix = checkixtmp;
|
checkix = checkixtmp;
|
||||||
|
@ -57,12 +63,19 @@ export class Basic extends Uninstantable {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
/**
|
||||||
|
* @param { (
|
||||||
|
* card?: import('../library/index.js').Card,
|
||||||
|
* cards?: import('../library/index.js').Card[]
|
||||||
|
* ) => number } check
|
||||||
|
* @returns { boolean | undefined }
|
||||||
|
*/
|
||||||
static chooseCard(check) {
|
static chooseCard(check) {
|
||||||
var event = _status.event;
|
const event = _status.event;
|
||||||
if (event.filterCard == undefined) return (check() > 0);
|
if (event.filterCard == undefined) return (check() > 0);
|
||||||
var i, j, range, cards, cards2, skills, check, effect;
|
let i, j, range, cards, cards2, skills, effect;
|
||||||
var ok = false, forced = event.forced;
|
let ok = false, forced = event.forced;
|
||||||
var iwhile = 100;
|
let iwhile = 100;
|
||||||
while (iwhile--) {
|
while (iwhile--) {
|
||||||
range = get.select(event.selectCard);
|
range = get.select(event.selectCard);
|
||||||
if (ui.selected.cards.length >= range[0]) {
|
if (ui.selected.cards.length >= range[0]) {
|
||||||
|
@ -80,6 +93,7 @@ export class Basic extends Uninstantable {
|
||||||
}
|
}
|
||||||
cards = get.selectableCards();
|
cards = get.selectableCards();
|
||||||
if (!_status.event.player._noSkill) {
|
if (!_status.event.player._noSkill) {
|
||||||
|
// @ts-ignore
|
||||||
cards = cards.concat(get.skills());
|
cards = cards.concat(get.skills());
|
||||||
}
|
}
|
||||||
if (cards.length == 0) {
|
if (cards.length == 0) {
|
||||||
|
@ -127,12 +141,18 @@ export class Basic extends Uninstantable {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
/**
|
||||||
|
* @param { (
|
||||||
|
* target?: import('../library/index.js').Player,
|
||||||
|
* targets?: import('../library/index.js').Player[]
|
||||||
|
* ) => number } check
|
||||||
|
*/
|
||||||
static chooseTarget(check) {
|
static chooseTarget(check) {
|
||||||
var event = _status.event;
|
const event = _status.event;
|
||||||
if (event.filterTarget == undefined) return (check() > 0);
|
if (event.filterTarget == undefined) return (check() > 0);
|
||||||
var i, j, range, targets, targets2, effect;
|
let i, j, range, targets, targets2, effect;
|
||||||
var ok = false, forced = event.forced;
|
let ok = false, forced = event.forced;
|
||||||
var iwhile = 100;
|
let iwhile = 100;
|
||||||
while (iwhile--) {
|
while (iwhile--) {
|
||||||
range = get.select(event.selectTarget);
|
range = get.select(event.selectTarget);
|
||||||
if (ui.selected.targets.length >= range[0]) {
|
if (ui.selected.targets.length >= range[0]) {
|
||||||
|
@ -158,10 +178,10 @@ export class Basic extends Uninstantable {
|
||||||
// targets.sort(function(a,b){
|
// targets.sort(function(a,b){
|
||||||
// return check(b)-check(a);
|
// return check(b)-check(a);
|
||||||
// });
|
// });
|
||||||
var ix = 0;
|
let ix = 0;
|
||||||
var checkix = check(targets[0], targets2);
|
let checkix = check(targets[0], targets2);
|
||||||
for (i = 1; i < targets.length; i++) {
|
for (i = 1; i < targets.length; i++) {
|
||||||
var checkixtmp = check(targets[i], targets2);
|
let checkixtmp = check(targets[i], targets2);
|
||||||
if (checkixtmp > checkix) {
|
if (checkixtmp > checkix) {
|
||||||
ix = i;
|
ix = i;
|
||||||
checkix = checkixtmp;
|
checkix = checkixtmp;
|
||||||
|
|
|
@ -11,14 +11,17 @@ export class Game extends Uninstantable {
|
||||||
static onlineID = null;
|
static onlineID = null;
|
||||||
static onlineKey = null;
|
static onlineKey = null;
|
||||||
/**
|
/**
|
||||||
* @type {Player[]}
|
* @type {import('../library/index.js').Player[]}
|
||||||
*/
|
*/
|
||||||
static players = [];
|
static players = [];
|
||||||
/**
|
/**
|
||||||
* @type {Player[]}
|
* @type {import('../library/index.js').Player[]}
|
||||||
*/
|
*/
|
||||||
static dead = [];
|
static dead = [];
|
||||||
static imported = [];
|
static imported = [];
|
||||||
|
/**
|
||||||
|
* @type { { [key: string]: import('../library/index.js').Player } }
|
||||||
|
*/
|
||||||
static playerMap = {};
|
static playerMap = {};
|
||||||
static phaseNumber = 0;
|
static phaseNumber = 0;
|
||||||
static roundNumber = 0;
|
static roundNumber = 0;
|
||||||
|
|
|
@ -1832,12 +1832,17 @@ export class Get extends Uninstantable {
|
||||||
return Math.sqrt(dx * dx + dy * dy);
|
return Math.sqrt(dx * dx + dy * dy);
|
||||||
}
|
}
|
||||||
static xyDistance(from, to) { return Math.sqrt((from[0] - to[0]) * (from[0] - to[0]) + (from[1] - to[1]) * (from[1] - to[1])) }
|
static xyDistance(from, to) { return Math.sqrt((from[0] - to[0]) * (from[0] - to[0]) + (from[1] - to[1]) * (from[1] - to[1])) }
|
||||||
|
/**
|
||||||
|
* @param { [number, number] | string | import('../library/index.js').Player[] |
|
||||||
|
* import('../library/index.js').Card[] | [number, number, number, number] | import('../library/index.js').Button |
|
||||||
|
* import('../library/index.js').Dialog | import('../library/index.js').Player | import('../library/index.js').Card |
|
||||||
|
* import('../library/index.js').GameEvent | import('../library/index.js').GameEventPromise } obj
|
||||||
|
*/
|
||||||
static itemtype(obj) {
|
static itemtype(obj) {
|
||||||
var i, j;
|
|
||||||
if (typeof obj == 'string') {
|
if (typeof obj == 'string') {
|
||||||
if (obj.length <= 5) {
|
if (obj.length <= 5) {
|
||||||
var bool = true;
|
let bool = true;
|
||||||
for (i = 0; i < obj.length; i++) {
|
for (let i = 0; i < obj.length; i++) {
|
||||||
if (/h|e|j|s|x/.test(obj[i]) == false) {
|
if (/h|e|j|s|x/.test(obj[i]) == false) {
|
||||||
bool = false; break;
|
bool = false; break;
|
||||||
}
|
}
|
||||||
|
@ -1847,18 +1852,13 @@ export class Get extends Uninstantable {
|
||||||
if (obj.includes(lib.natureSeparator) && obj.split(lib.natureSeparator).every(n => lib.nature.has(n))) return 'natures';
|
if (obj.includes(lib.natureSeparator) && obj.split(lib.natureSeparator).every(n => lib.nature.has(n))) return 'natures';
|
||||||
if (lib.nature.has(obj)) return 'nature';
|
if (lib.nature.has(obj)) return 'nature';
|
||||||
}
|
}
|
||||||
if (Array.isArray(obj) && obj.length) {
|
if (Array.isArray(obj) && obj.length > 0) {
|
||||||
var isPlayers = true;
|
if (obj.every(p => p instanceof lib.element.Player)) {
|
||||||
for (i = 0; i < obj.length; i++) {
|
return 'players';
|
||||||
if (get.itemtype(obj[i]) != 'player') { isPlayers = false; break; }
|
|
||||||
}
|
}
|
||||||
if (isPlayers) return 'players';
|
if (obj.every(p => p instanceof lib.element.Card)) {
|
||||||
|
return 'cards';
|
||||||
var isCards = true;
|
|
||||||
for (i = 0; i < obj.length; i++) {
|
|
||||||
if (get.itemtype(obj[i]) != 'card') { isCards = false; break; }
|
|
||||||
}
|
}
|
||||||
if (isCards) return 'cards';
|
|
||||||
|
|
||||||
if (obj.length == 2) {
|
if (obj.length == 2) {
|
||||||
if (typeof obj[0] == 'number' && typeof obj[1] == 'number') {
|
if (typeof obj[0] == 'number' && typeof obj[1] == 'number') {
|
||||||
|
@ -1867,22 +1867,17 @@ export class Get extends Uninstantable {
|
||||||
}
|
}
|
||||||
|
|
||||||
if (obj.length == 4) {
|
if (obj.length == 4) {
|
||||||
var isPosition = true;
|
if (obj.every(p => typeof p == 'number')) {
|
||||||
for (i = 0; i < obj.length; i++) {
|
return 'divposition';
|
||||||
if (typeof obj[i] != 'number') { isPosition = false; break; }
|
|
||||||
}
|
}
|
||||||
if (isPosition) return 'divposition';
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (get.objtype(obj) == 'div') {
|
if (obj instanceof lib.element.Button) return 'button';
|
||||||
if (obj.classList.contains('button')) return 'button';
|
if (obj instanceof lib.element.Card) return 'card';
|
||||||
if (obj.classList.contains('card')) return 'card';
|
if (obj instanceof lib.element.Player) return 'player';
|
||||||
if (obj.classList.contains('player')) return 'player';
|
if (obj instanceof lib.element.Dialog) return 'dialog';
|
||||||
if (obj.classList.contains('dialog')) return 'dialog';
|
if (obj instanceof lib.element.GameEvent ||
|
||||||
}
|
obj instanceof lib.element.GameEventPromise) return 'event';
|
||||||
if (get.is.object(obj)) {
|
|
||||||
if (obj.isMine == lib.element.GameEvent.prototype.isMine) return 'event';
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
static equipNum(card) {
|
static equipNum(card) {
|
||||||
if (get.type(card) == 'equip') {
|
if (get.type(card) == 'equip') {
|
||||||
|
@ -2172,11 +2167,16 @@ export class Get extends Uninstantable {
|
||||||
return lib.card[name];
|
return lib.card[name];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
/**
|
||||||
|
* @param { number | [number, number] | (()=>[number, number]) } [select]
|
||||||
|
* @returns { [number, number] }
|
||||||
|
*/
|
||||||
static select(select) {
|
static select(select) {
|
||||||
if (typeof select == 'number') return [select, select];
|
if (typeof select == 'number') return [select, select];
|
||||||
|
// @ts-ignore
|
||||||
if (get.itemtype(select) == 'select') return select;
|
if (get.itemtype(select) == 'select') return select;
|
||||||
if (typeof select == 'function') return get.select(select());
|
if (typeof select == 'function') return get.select(select());
|
||||||
return [1, 1]
|
return [1, 1];
|
||||||
}
|
}
|
||||||
static card(original) {
|
static card(original) {
|
||||||
if (_status.event.skill) {
|
if (_status.event.skill) {
|
||||||
|
@ -2428,6 +2428,10 @@ export class Get extends Uninstantable {
|
||||||
result = handleZero(result);
|
result = handleZero(result);
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
/**
|
||||||
|
* @param {((a: import('../library/index.js').Button, b: import('../library/index.js').Button) => number)} [sort] 排序函数
|
||||||
|
* @returns { import('../library/index.js').Button[] }
|
||||||
|
*/
|
||||||
static selectableButtons(sort) {
|
static selectableButtons(sort) {
|
||||||
if (!_status.event.player) return [];
|
if (!_status.event.player) return [];
|
||||||
var buttons = _status.event.dialog.buttons;
|
var buttons = _status.event.dialog.buttons;
|
||||||
|
@ -2443,6 +2447,10 @@ export class Get extends Uninstantable {
|
||||||
}
|
}
|
||||||
return selectable;
|
return selectable;
|
||||||
}
|
}
|
||||||
|
/**
|
||||||
|
* @param {((a: import('../library/index.js').Card, b: import('../library/index.js').Card) => number)} [sort] 排序函数
|
||||||
|
* @returns { import('../library/index.js').Card[] }
|
||||||
|
*/
|
||||||
static selectableCards(sort) {
|
static selectableCards(sort) {
|
||||||
if (!_status.event.player) return [];
|
if (!_status.event.player) return [];
|
||||||
var cards = _status.event.player.getCards('hes');
|
var cards = _status.event.player.getCards('hes');
|
||||||
|
@ -2458,6 +2466,9 @@ export class Get extends Uninstantable {
|
||||||
}
|
}
|
||||||
return selectable;
|
return selectable;
|
||||||
}
|
}
|
||||||
|
/**
|
||||||
|
* @returns { string[] } 技能名数组
|
||||||
|
*/
|
||||||
static skills() {
|
static skills() {
|
||||||
var skills = [];
|
var skills = [];
|
||||||
if (ui.skills) {
|
if (ui.skills) {
|
||||||
|
@ -2532,6 +2543,10 @@ export class Get extends Uninstantable {
|
||||||
}
|
}
|
||||||
return list;
|
return list;
|
||||||
}
|
}
|
||||||
|
/**
|
||||||
|
* @param {((a: import('../library/index.js').Player, b: import('../library/index.js').Player) => number)} [sort] 排序函数
|
||||||
|
* @returns { import('../library/index.js').Player[] }
|
||||||
|
*/
|
||||||
static selectableTargets(sort) {
|
static selectableTargets(sort) {
|
||||||
var selectable = [];
|
var selectable = [];
|
||||||
var players = game.players.slice(0);
|
var players = game.players.slice(0);
|
||||||
|
|
|
@ -2,6 +2,8 @@
|
||||||
* @typedef {InstanceType<typeof lib.element.Player>} Player
|
* @typedef {InstanceType<typeof lib.element.Player>} Player
|
||||||
* @typedef {InstanceType<typeof lib.element.Card>} Card
|
* @typedef {InstanceType<typeof lib.element.Card>} Card
|
||||||
* @typedef {InstanceType<typeof lib.element.VCard>} VCard
|
* @typedef {InstanceType<typeof lib.element.VCard>} VCard
|
||||||
|
* @typedef {InstanceType<typeof lib.element.Button>} Button
|
||||||
|
* @typedef {InstanceType<typeof lib.element.Dialog>} Dialog
|
||||||
* @typedef {InstanceType<typeof lib.element.GameEvent>} GameEvent
|
* @typedef {InstanceType<typeof lib.element.GameEvent>} GameEvent
|
||||||
* @typedef {InstanceType<typeof lib.element.GameEventPromise>} GameEventPromise
|
* @typedef {InstanceType<typeof lib.element.GameEventPromise>} GameEventPromise
|
||||||
* @typedef {InstanceType<typeof lib.element.NodeWS>} NodeWS
|
* @typedef {InstanceType<typeof lib.element.NodeWS>} NodeWS
|
||||||
|
@ -32105,7 +32107,7 @@ export class Library extends Uninstantable {
|
||||||
/**
|
/**
|
||||||
* 事件转为Promise化
|
* 事件转为Promise化
|
||||||
*
|
*
|
||||||
* @returns { Promise<GameEvent> & GameEvent & GameEventPromise }
|
* @returns { Promise<GameEvent> & GameEvent & GameEventPromise<> }
|
||||||
*/
|
*/
|
||||||
toPromise() {
|
toPromise() {
|
||||||
if (!this.#promise) {
|
if (!this.#promise) {
|
||||||
|
|
|
@ -6,8 +6,9 @@ export const status = {
|
||||||
clicked: false,
|
clicked: false,
|
||||||
auto: false,
|
auto: false,
|
||||||
/**
|
/**
|
||||||
* @type {GameEvent}
|
* @type {import('../library/index.js').GameEventPromise & import('../library/index.js').GameEvent}
|
||||||
*/
|
*/
|
||||||
|
// @ts-ignore
|
||||||
event: null,
|
event: null,
|
||||||
ai: {},
|
ai: {},
|
||||||
lastdragchange: [],
|
lastdragchange: [],
|
||||||
|
|
|
@ -14001,7 +14001,18 @@ export class UI extends Uninstantable {
|
||||||
static create = Create;
|
static create = Create;
|
||||||
static click = Click;
|
static click = Click;
|
||||||
static selected = {
|
static selected = {
|
||||||
buttons: [], cards: [], targets: []
|
/**
|
||||||
|
* @type { import('../library/index.js').Button[]}
|
||||||
|
*/
|
||||||
|
buttons: [],
|
||||||
|
/**
|
||||||
|
* @type { import('../library/index.js').Card[]}
|
||||||
|
*/
|
||||||
|
cards: [],
|
||||||
|
/**
|
||||||
|
* @type { import('../library/index.js').Player[]}
|
||||||
|
*/
|
||||||
|
targets: []
|
||||||
}
|
}
|
||||||
static refresh(node) {
|
static refresh(node) {
|
||||||
void window.getComputedStyle(node, null).getPropertyValue("opacity");
|
void window.getComputedStyle(node, null).getPropertyValue("opacity");
|
||||||
|
|
Loading…
Reference in New Issue