mirror of
https://github.com/unanmed/HumanBreak.git
synced 2025-05-05 15:03:24 +08:00
fix: 传送门 & 视角
This commit is contained in:
parent
cd9c95d24d
commit
7581a5ae5d
@ -71,6 +71,7 @@ import { texture } from './render/cache';
|
|||||||
import { RenderAdapter } from './render/adapter';
|
import { RenderAdapter } from './render/adapter';
|
||||||
import { getMainRenderer } from './render';
|
import { getMainRenderer } from './render';
|
||||||
import { Layer } from './render/preset/layer';
|
import { Layer } from './render/preset/layer';
|
||||||
|
import { LayerGroupFloorBinder } from './render/preset/floor';
|
||||||
|
|
||||||
// ----- 类注册
|
// ----- 类注册
|
||||||
Mota.register('class', 'AudioPlayer', AudioPlayer);
|
Mota.register('class', 'AudioPlayer', AudioPlayer);
|
||||||
@ -158,7 +159,8 @@ Mota.register('module', 'Render', {
|
|||||||
Image,
|
Image,
|
||||||
RenderItem,
|
RenderItem,
|
||||||
RenderAdapter,
|
RenderAdapter,
|
||||||
Layer
|
Layer,
|
||||||
|
LayerGroupFloorBinder
|
||||||
});
|
});
|
||||||
|
|
||||||
main.renderLoaded = true;
|
main.renderLoaded = true;
|
||||||
|
@ -131,8 +131,9 @@ export class LayerGroupFloorBinder
|
|||||||
this.emit('setBlock', x, y, floor, block);
|
this.emit('setBlock', x, y, floor, block);
|
||||||
}
|
}
|
||||||
|
|
||||||
private checkLayerExtends(layer: Layer) {
|
checkLayerExtends(layer: Layer) {
|
||||||
const ex = layer.getExtends('floor-binder');
|
const ex = layer.getExtends('floor-binder');
|
||||||
|
|
||||||
if (!ex) {
|
if (!ex) {
|
||||||
const extend = new LayerFloorBinder(this);
|
const extend = new LayerFloorBinder(this);
|
||||||
layer.extends(extend);
|
layer.extends(extend);
|
||||||
@ -147,15 +148,16 @@ export class LayerGroupFloorBinder
|
|||||||
|
|
||||||
awake(group: LayerGroup) {
|
awake(group: LayerGroup) {
|
||||||
this.group = group;
|
this.group = group;
|
||||||
|
|
||||||
for (const layer of group.layers.values()) {
|
for (const layer of group.layers.values()) {
|
||||||
this.checkLayerExtends(layer);
|
this.checkLayerExtends(layer);
|
||||||
}
|
}
|
||||||
LayerGroupFloorBinder.activedBinder.add(this);
|
LayerGroupFloorBinder.activedBinder.add(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
// onLayerAdd(group: LayerGroup, layer: Layer): void {
|
onLayerAdd(group: LayerGroup, layer: Layer): void {
|
||||||
// this.checkLayerExtends(layer);
|
this.checkLayerExtends(layer);
|
||||||
// }
|
}
|
||||||
|
|
||||||
onDestroy(group: LayerGroup) {
|
onDestroy(group: LayerGroup) {
|
||||||
LayerGroupFloorBinder.activedBinder.delete(this);
|
LayerGroupFloorBinder.activedBinder.delete(this);
|
||||||
@ -272,6 +274,7 @@ export class LayerFloorBinder implements ILayerRenderExtends {
|
|||||||
if (group instanceof LayerGroup) {
|
if (group instanceof LayerGroup) {
|
||||||
const ex = group.getExtends('floor-binder');
|
const ex = group.getExtends('floor-binder');
|
||||||
if (ex instanceof LayerGroupFloorBinder) {
|
if (ex instanceof LayerGroupFloorBinder) {
|
||||||
|
ex.checkLayerExtends(layer);
|
||||||
this.parent = ex;
|
this.parent = ex;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -211,7 +211,7 @@ export class LayerGroup extends Container implements IAnimateFrame {
|
|||||||
addLayer(layer: FloorLayer) {
|
addLayer(layer: FloorLayer) {
|
||||||
const l = new Layer();
|
const l = new Layer();
|
||||||
l.layer = layer;
|
l.layer = layer;
|
||||||
if (l.layer) this.layers.set(l.layer, l);
|
this.layers.set(layer, l);
|
||||||
l.setZIndex(layerZIndex[layer]);
|
l.setZIndex(layerZIndex[layer]);
|
||||||
this.appendChild(l);
|
this.appendChild(l);
|
||||||
|
|
||||||
@ -1069,6 +1069,7 @@ export class Layer extends Container {
|
|||||||
this.renderData = Array(width * height).fill(0);
|
this.renderData = Array(width * height).fill(0);
|
||||||
this.autotiles = {};
|
this.autotiles = {};
|
||||||
this.block.size(width, height);
|
this.block.size(width, height);
|
||||||
|
this.block.clearAllCache();
|
||||||
|
|
||||||
for (const ex of this.extend.values()) {
|
for (const ex of this.extend.values()) {
|
||||||
ex.onMapResize?.(this, width, height);
|
ex.onMapResize?.(this, width, height);
|
||||||
|
@ -326,15 +326,12 @@ export class FloorViewport implements ILayerGroupRenderExtends {
|
|||||||
const half = cell / 2;
|
const half = cell / 2;
|
||||||
nx = this.nx;
|
nx = this.nx;
|
||||||
ny = this.ny;
|
ny = this.ny;
|
||||||
const ox = nx * cell;
|
const ox = this.nx * cell - halfWidth + half;
|
||||||
const oy = ny * cell;
|
const oy = this.ny * cell - halfHeight + half;
|
||||||
core.bigmap.offsetX = ox;
|
core.bigmap.offsetX = ox;
|
||||||
core.bigmap.offsetY = oy;
|
core.bigmap.offsetY = oy;
|
||||||
|
|
||||||
this.group.camera.setTranslate(
|
this.group.camera.setTranslate(-ox, -oy);
|
||||||
-ox + halfWidth - half,
|
|
||||||
-oy + halfHeight - half
|
|
||||||
);
|
|
||||||
this.group.update(this.group);
|
this.group.update(this.group);
|
||||||
});
|
});
|
||||||
// this.createMoving();
|
// this.createMoving();
|
||||||
|
@ -24,6 +24,8 @@ interface HaloType {
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type A = Enemy;
|
||||||
|
|
||||||
export interface EnemyInfo extends Partial<Enemy> {
|
export interface EnemyInfo extends Partial<Enemy> {
|
||||||
atk: number;
|
atk: number;
|
||||||
def: number;
|
def: number;
|
||||||
@ -74,7 +76,7 @@ interface CriticalDamageDelta extends Omit<DamageDelta, 'info'> {
|
|||||||
type HaloFn = (info: EnemyInfo, enemy: EnemyInfo) => void;
|
type HaloFn = (info: EnemyInfo, enemy: EnemyInfo) => void;
|
||||||
|
|
||||||
/** 光环属性 */
|
/** 光环属性 */
|
||||||
export const haloSpecials: Set<number> = new Set([8, 21, 25, 26, 27, 29]);
|
export const haloSpecials: Set<number> = new Set([8, 21, 25, 26, 27, 29, 31]);
|
||||||
/** 特殊属性对应 */
|
/** 特殊属性对应 */
|
||||||
export const specialValue: Map<number, SelectKey<Enemy, number | undefined>[]> =
|
export const specialValue: Map<number, SelectKey<Enemy, number | undefined>[]> =
|
||||||
new Map();
|
new Map();
|
||||||
@ -643,6 +645,20 @@ export class DamageEnemy<T extends EnemyIds = EnemyIds> {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 再生光环
|
||||||
|
if (special.includes(31)) {
|
||||||
|
square7.push(e => {
|
||||||
|
e.hpBuff_ += this.info.hpHalo ?? 0;
|
||||||
|
});
|
||||||
|
this.providedHalo.add(31);
|
||||||
|
col.haloList.push({
|
||||||
|
type: 'square',
|
||||||
|
data: { x: this.x + dx, y: this.y + dy, d: 7 },
|
||||||
|
special: 31,
|
||||||
|
from: this
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
col.applyHalo(
|
col.applyHalo(
|
||||||
'square',
|
'square',
|
||||||
{ x: this.x + dx, y: this.y + dy, d: 7 },
|
{ x: this.x + dx, y: this.y + dy, d: 7 },
|
||||||
|
@ -246,5 +246,12 @@ export const specials: SpecialDeclaration[] = [
|
|||||||
)}格。不同怪物间为加算叠加`;
|
)}格。不同怪物间为加算叠加`;
|
||||||
},
|
},
|
||||||
color: '#FDCD0B'
|
color: '#FDCD0B'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
code: 31,
|
||||||
|
name: '再生光环',
|
||||||
|
desc: enemy =>
|
||||||
|
`怪物周围7*7范围内的所有怪物(包括自身)生命值提高${enemy.hpHalo}%`,
|
||||||
|
color: '#85FF99'
|
||||||
}
|
}
|
||||||
];
|
];
|
||||||
|
@ -92,12 +92,21 @@ export namespace BluePalace {
|
|||||||
export const portalMap: PortalMap = new Map();
|
export const portalMap: PortalMap = new Map();
|
||||||
|
|
||||||
export const portals: Partial<Record<FloorIds, Portal[]>> = {
|
export const portals: Partial<Record<FloorIds, Portal[]>> = {
|
||||||
MT75: [
|
// MT75: [
|
||||||
{ fx: 7, fy: 7, dir: 'left', tx: 9, ty: 9, toDir: 'down' },
|
// { fx: 7, fy: 7, dir: 'left', tx: 9, ty: 9, toDir: 'down' },
|
||||||
{ fx: 5, fy: 11, dir: 'right', tx: 7, ty: 9, toDir: 'up' },
|
// { fx: 5, fy: 11, dir: 'right', tx: 7, ty: 9, toDir: 'up' },
|
||||||
{ fx: 4, fy: 6, dir: 'right', tx: 9, ty: 4, toDir: 'up' },
|
// { fx: 4, fy: 6, dir: 'right', tx: 9, ty: 4, toDir: 'up' },
|
||||||
{ fx: 5, fy: 9, dir: 'right', tx: 3, ty: 7, toDir: 'up' },
|
// { fx: 5, fy: 9, dir: 'right', tx: 3, ty: 7, toDir: 'up' },
|
||||||
{ fx: 7, fy: 5, dir: 'right', tx: 4, ty: 9, toDir: 'up' }
|
// { fx: 7, fy: 5, dir: 'right', tx: 4, ty: 9, toDir: 'up' }
|
||||||
|
// ]
|
||||||
|
MT76: [
|
||||||
|
{ fx: 11, fy: 7, dir: 'right', tx: 4, ty: 6, toDir: 'down' },
|
||||||
|
{ fx: 6, fy: 5, dir: 'left', tx: 8, ty: 13, toDir: 'right' }
|
||||||
|
],
|
||||||
|
MT77: [
|
||||||
|
{ fx: 2, fy: 9, dir: 'down', tx: 9, ty: 13, toDir: 'right' },
|
||||||
|
{ fx: 10, fy: 8, dir: 'right', tx: 3, ty: 0, toDir: 'down' },
|
||||||
|
{ fx: 1, fy: 0, dir: 'down', tx: 8, ty: 1, toDir: 'left' }
|
||||||
]
|
]
|
||||||
};
|
};
|
||||||
loading.once('coreInit', initPortals);
|
loading.once('coreInit', initPortals);
|
||||||
@ -133,11 +142,12 @@ export namespace BluePalace {
|
|||||||
const [[toFdx, toFdy], [toTdx, toTdy]] =
|
const [[toFdx, toFdy], [toTdx, toTdy]] =
|
||||||
delta[backDir(v.toDir)];
|
delta[backDir(v.toDir)];
|
||||||
const fx = v.fx + fdx;
|
const fx = v.fx + fdx;
|
||||||
const fy = v.fy + fdy;
|
const fy = v.fy - fdy;
|
||||||
const tx = v.fx + tdx;
|
const tx = v.fx + tdx;
|
||||||
const ty = v.fy + tdy;
|
const ty = v.fy - tdy;
|
||||||
const index = fx + fy * width;
|
const index = fx + fy * width;
|
||||||
const backIndex = tx + ty * width;
|
const backIndex = tx + ty * width;
|
||||||
|
if (index < 0 || backIndex < 0) return;
|
||||||
let data = map.get(index);
|
let data = map.get(index);
|
||||||
let backData = map.get(backIndex);
|
let backData = map.get(backIndex);
|
||||||
if (!data) {
|
if (!data) {
|
||||||
@ -155,7 +165,7 @@ export namespace BluePalace {
|
|||||||
dir: backDir(v.toDir)
|
dir: backDir(v.toDir)
|
||||||
};
|
};
|
||||||
backData[backDir(v.dir)] = {
|
backData[backDir(v.dir)] = {
|
||||||
x: v.tx + toTdx,
|
x: v.tx - toTdx,
|
||||||
y: v.ty + toTdy,
|
y: v.ty + toTdy,
|
||||||
dir: v.toDir
|
dir: v.toDir
|
||||||
};
|
};
|
||||||
@ -164,9 +174,9 @@ export namespace BluePalace {
|
|||||||
p.forEach(v => {
|
p.forEach(v => {
|
||||||
const [[fdx, fdy], [tdx, tdy]] = delta[backDir(v.toDir)];
|
const [[fdx, fdy], [tdx, tdy]] = delta[backDir(v.toDir)];
|
||||||
const [[toFdx, toFdy], [toTdx, toTdy]] = delta[v.dir];
|
const [[toFdx, toFdy], [toTdx, toTdy]] = delta[v.dir];
|
||||||
const fx = v.tx + fdx;
|
const fx = v.tx - fdx;
|
||||||
const fy = v.ty + fdy;
|
const fy = v.ty + fdy;
|
||||||
const tx = v.tx + tdx;
|
const tx = v.tx - tdx;
|
||||||
const ty = v.ty + tdy;
|
const ty = v.ty + tdy;
|
||||||
const index = fx + fy * width;
|
const index = fx + fy * width;
|
||||||
const backIndex = tx + ty * width;
|
const backIndex = tx + ty * width;
|
||||||
@ -189,7 +199,7 @@ export namespace BluePalace {
|
|||||||
};
|
};
|
||||||
backData[backDir(v.toDir)] = {
|
backData[backDir(v.toDir)] = {
|
||||||
x: v.fx + toTdx,
|
x: v.fx + toTdx,
|
||||||
y: v.fy + toTdy,
|
y: v.fy - toTdy,
|
||||||
dir: v.dir
|
dir: v.dir
|
||||||
};
|
};
|
||||||
});
|
});
|
||||||
@ -198,5 +208,6 @@ export namespace BluePalace {
|
|||||||
|
|
||||||
function initPortals() {
|
function initPortals() {
|
||||||
generatePortalMap();
|
generatePortalMap();
|
||||||
|
console.log(portalMap);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -36,6 +36,7 @@ import type { RenderItem } from '@/core/render/item';
|
|||||||
import type { RenderAdapter } from '@/core/render/adapter';
|
import type { RenderAdapter } from '@/core/render/adapter';
|
||||||
import type { ItemState } from './state/item';
|
import type { ItemState } from './state/item';
|
||||||
import type { Layer } from '@/core/render/preset/layer';
|
import type { Layer } from '@/core/render/preset/layer';
|
||||||
|
import type { LayerGroupFloorBinder } from '@/core/render/preset/floor';
|
||||||
|
|
||||||
interface ClassInterface {
|
interface ClassInterface {
|
||||||
// 渲染进程与游戏进程通用
|
// 渲染进程与游戏进程通用
|
||||||
@ -116,6 +117,7 @@ interface ModuleInterface {
|
|||||||
RenderItem: typeof RenderItem;
|
RenderItem: typeof RenderItem;
|
||||||
RenderAdapter: typeof RenderAdapter;
|
RenderAdapter: typeof RenderAdapter;
|
||||||
Layer: typeof Layer;
|
Layer: typeof Layer;
|
||||||
|
LayerGroupFloorBinder: typeof LayerGroupFloorBinder;
|
||||||
};
|
};
|
||||||
State: {
|
State: {
|
||||||
ItemState: typeof ItemState;
|
ItemState: typeof ItemState;
|
||||||
@ -141,8 +143,8 @@ interface PluginInterface {
|
|||||||
fly_r: typeof import('../plugin/ui/fly');
|
fly_r: typeof import('../plugin/ui/fly');
|
||||||
chase_r: typeof import('../plugin/chase/chase');
|
chase_r: typeof import('../plugin/chase/chase');
|
||||||
// webglUtils: typeof import('../plugin/webgl/utils');
|
// webglUtils: typeof import('../plugin/webgl/utils');
|
||||||
shadow_r: typeof import('../plugin/shadow/shadow');
|
// shadow_r: typeof import('../plugin/shadow/shadow');
|
||||||
gameShadow_r: typeof import('../plugin/shadow/gameShadow');
|
// gameShadow_r: typeof import('../plugin/shadow/gameShadow');
|
||||||
// achievement: typeof import('../plugin/ui/achievement');
|
// achievement: typeof import('../plugin/ui/achievement');
|
||||||
completion_r: typeof import('../plugin/completion');
|
completion_r: typeof import('../plugin/completion');
|
||||||
// path: typeof import('../plugin/fx/path');
|
// path: typeof import('../plugin/fx/path');
|
||||||
@ -161,11 +163,11 @@ interface PluginInterface {
|
|||||||
chase_g: typeof import('../plugin/game/chase');
|
chase_g: typeof import('../plugin/game/chase');
|
||||||
skill_g: typeof import('../plugin/game/skill');
|
skill_g: typeof import('../plugin/game/skill');
|
||||||
towerBoss_g: typeof import('../plugin/game/towerBoss');
|
towerBoss_g: typeof import('../plugin/game/towerBoss');
|
||||||
heroFourFrames_g: typeof import('../plugin/game/fx/heroFourFrames');
|
// heroFourFrames_g: typeof import('../plugin/game/fx/heroFourFrames');
|
||||||
rewrite_g: typeof import('../plugin/game/fx/rewrite');
|
rewrite_g: typeof import('../plugin/game/fx/rewrite');
|
||||||
itemDetail_g: typeof import('../plugin/game/fx/itemDetail');
|
itemDetail_g: typeof import('../plugin/game/fx/itemDetail');
|
||||||
checkBlock_g: typeof import('../plugin/game/enemy/checkblock');
|
checkBlock_g: typeof import('../plugin/game/enemy/checkblock');
|
||||||
halo_g: typeof import('../plugin/game/fx/halo');
|
// halo_g: typeof import('../plugin/game/fx/halo');
|
||||||
// study_g: typeof import('../plugin/game/study');
|
// study_g: typeof import('../plugin/game/study');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -46,7 +46,8 @@ const haloColor: Record<number, string[]> = {
|
|||||||
25: ['purple'],
|
25: ['purple'],
|
||||||
26: ['blue'],
|
26: ['blue'],
|
||||||
27: ['red'],
|
27: ['red'],
|
||||||
29: ['#3CFF49']
|
29: ['#3CFF49'],
|
||||||
|
31: ['#51E9FF']
|
||||||
};
|
};
|
||||||
|
|
||||||
class Halo extends Sprite {
|
class Halo extends Sprite {
|
||||||
|
@ -44,7 +44,6 @@ export {};
|
|||||||
delete core.status.mapBlockObjs[data];
|
delete core.status.mapBlockObjs[data];
|
||||||
core.extractBlocks(data);
|
core.extractBlocks(data);
|
||||||
if (data === core.status.floorId) {
|
if (data === core.status.floorId) {
|
||||||
core.drawMap(data);
|
|
||||||
let weather = core.getFlag('__weather__', null);
|
let weather = core.getFlag('__weather__', null);
|
||||||
if (!weather && core.status.thisMap.weather)
|
if (!weather && core.status.thisMap.weather)
|
||||||
weather = core.status.thisMap.weather;
|
weather = core.status.thisMap.weather;
|
||||||
@ -54,6 +53,12 @@ export {};
|
|||||||
core.updateStatusBar(true, true);
|
core.updateStatusBar(true, true);
|
||||||
}
|
}
|
||||||
Mota.require('module', 'Shadow').Shadow.update(true);
|
Mota.require('module', 'Shadow').Shadow.update(true);
|
||||||
|
const Binder = Mota.require('module', 'Render').LayerGroupFloorBinder;
|
||||||
|
Binder.activedBinder.forEach(v => {
|
||||||
|
if (v.getFloor() === core.status.floorId) {
|
||||||
|
v.updateBindData();
|
||||||
|
}
|
||||||
|
});
|
||||||
console.log(`Floor hot reload: ${data}`);
|
console.log(`Floor hot reload: ${data}`);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
16
src/source/cls.d.ts
vendored
16
src/source/cls.d.ts
vendored
@ -601,6 +601,22 @@ interface IdToCls {
|
|||||||
E671: 'enemys';
|
E671: 'enemys';
|
||||||
E672: 'enemys';
|
E672: 'enemys';
|
||||||
E673: 'enemys';
|
E673: 'enemys';
|
||||||
|
E674: 'enemys';
|
||||||
|
E675: 'enemys';
|
||||||
|
E676: 'enemys';
|
||||||
|
E677: 'enemys';
|
||||||
|
E678: 'enemys';
|
||||||
|
E679: 'enemys';
|
||||||
|
E680: 'enemys';
|
||||||
|
E681: 'enemys';
|
||||||
|
E682: 'enemys';
|
||||||
|
E683: 'enemys';
|
||||||
|
E684: 'enemys';
|
||||||
|
E685: 'enemys';
|
||||||
|
E686: 'enemys';
|
||||||
|
E687: 'enemys';
|
||||||
|
E688: 'enemys';
|
||||||
|
E689: 'enemys';
|
||||||
X20032: 'tileset';
|
X20032: 'tileset';
|
||||||
X20033: 'tileset';
|
X20033: 'tileset';
|
||||||
X20034: 'tileset';
|
X20034: 'tileset';
|
||||||
|
32
src/source/maps.d.ts
vendored
32
src/source/maps.d.ts
vendored
@ -601,6 +601,22 @@ interface IdToNumber {
|
|||||||
E671: 671;
|
E671: 671;
|
||||||
E672: 672;
|
E672: 672;
|
||||||
E673: 673;
|
E673: 673;
|
||||||
|
E674: 674;
|
||||||
|
E675: 675;
|
||||||
|
E676: 676;
|
||||||
|
E677: 677;
|
||||||
|
E678: 678;
|
||||||
|
E679: 679;
|
||||||
|
E680: 680;
|
||||||
|
E681: 681;
|
||||||
|
E682: 682;
|
||||||
|
E683: 683;
|
||||||
|
E684: 684;
|
||||||
|
E685: 685;
|
||||||
|
E686: 686;
|
||||||
|
E687: 687;
|
||||||
|
E688: 688;
|
||||||
|
E689: 689;
|
||||||
X20032: 20032;
|
X20032: 20032;
|
||||||
X20033: 20033;
|
X20033: 20033;
|
||||||
X20034: 20034;
|
X20034: 20034;
|
||||||
@ -1287,6 +1303,22 @@ interface NumberToId {
|
|||||||
671: 'E671';
|
671: 'E671';
|
||||||
672: 'E672';
|
672: 'E672';
|
||||||
673: 'E673';
|
673: 'E673';
|
||||||
|
674: 'E674';
|
||||||
|
675: 'E675';
|
||||||
|
676: 'E676';
|
||||||
|
677: 'E677';
|
||||||
|
678: 'E678';
|
||||||
|
679: 'E679';
|
||||||
|
680: 'E680';
|
||||||
|
681: 'E681';
|
||||||
|
682: 'E682';
|
||||||
|
683: 'E683';
|
||||||
|
684: 'E684';
|
||||||
|
685: 'E685';
|
||||||
|
686: 'E686';
|
||||||
|
687: 'E687';
|
||||||
|
688: 'E688';
|
||||||
|
689: 'E689';
|
||||||
20032: 'X20032';
|
20032: 'X20032';
|
||||||
20033: 'X20033';
|
20033: 'X20033';
|
||||||
20034: 'X20034';
|
20034: 'X20034';
|
||||||
|
35
src/types/enemy.d.ts
vendored
35
src/types/enemy.d.ts
vendored
@ -29,7 +29,8 @@ type PartialNumbericEnemyProperty =
|
|||||||
| 'iceHalo'
|
| 'iceHalo'
|
||||||
| 'day'
|
| 'day'
|
||||||
| 'night'
|
| 'night'
|
||||||
| 'melt';
|
| 'melt'
|
||||||
|
| 'hpHalo';
|
||||||
|
|
||||||
type BooleanEnemyProperty =
|
type BooleanEnemyProperty =
|
||||||
| 'zoneSquare'
|
| 'zoneSquare'
|
||||||
@ -98,6 +99,38 @@ type Enemy<I extends EnemyIds = EnemyIds> = {
|
|||||||
[P in BooleanEnemyProperty]?: boolean;
|
[P in BooleanEnemyProperty]?: boolean;
|
||||||
} & EnemyInfoBase;
|
} & EnemyInfoBase;
|
||||||
|
|
||||||
|
interface EnemyInfoBase extends EnemySpecialBase {
|
||||||
|
/**
|
||||||
|
* 生命值
|
||||||
|
*/
|
||||||
|
hp: number;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 攻击力
|
||||||
|
*/
|
||||||
|
atk: number;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 防御力
|
||||||
|
*/
|
||||||
|
def: number;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 金币
|
||||||
|
*/
|
||||||
|
money: number;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 经验
|
||||||
|
*/
|
||||||
|
exp: number;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 加点量
|
||||||
|
*/
|
||||||
|
point: number;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 怪物的特殊属性定义
|
* 怪物的特殊属性定义
|
||||||
*/
|
*/
|
||||||
|
Loading…
Reference in New Issue
Block a user