mirror of
https://github.com/unanmed/HumanBreak.git
synced 2025-02-28 17:37:07 +08:00
fix: 高倍速录像出错
This commit is contained in:
parent
ffc4aaa865
commit
001c91c312
@ -13,6 +13,7 @@ import type {
|
|||||||
} from '@/core/render/preset/layer';
|
} from '@/core/render/preset/layer';
|
||||||
import type { LayerFloorBinder } from '@/core/render/preset/floor';
|
import type { LayerFloorBinder } from '@/core/render/preset/floor';
|
||||||
import { BluePalace, MiscData } from '../mechanism/misc';
|
import { BluePalace, MiscData } from '../mechanism/misc';
|
||||||
|
import { sleep } from 'mutate-animate';
|
||||||
|
|
||||||
interface MoveStepDir {
|
interface MoveStepDir {
|
||||||
type: 'dir';
|
type: 'dir';
|
||||||
@ -168,8 +169,7 @@ export abstract class ObjectMoverBase extends EventEmitter<EObjectMovingEvent> {
|
|||||||
const code = await this.onStepStart(step, controller);
|
const code = await this.onStepStart(step, controller);
|
||||||
await this.onStepEnd(step, code, controller);
|
await this.onStepEnd(step, code, controller);
|
||||||
} else {
|
} else {
|
||||||
const replay = core.status.replay.speed;
|
const speed = step.value;
|
||||||
const speed = replay === 24 ? 1 : step.value / replay;
|
|
||||||
this.moveSpeed = speed;
|
this.moveSpeed = speed;
|
||||||
this.onSetMoveSpeed(speed, controller);
|
this.onSetMoveSpeed(speed, controller);
|
||||||
}
|
}
|
||||||
@ -379,7 +379,8 @@ export class BlockMover extends ObjectMoverBase {
|
|||||||
const fy = this.y;
|
const fy = this.y;
|
||||||
const { x: dx, y: dy } = core.utils.scan2[this.moveDir];
|
const { x: dx, y: dy } = core.utils.scan2[this.moveDir];
|
||||||
const start = Date.now();
|
const start = Date.now();
|
||||||
const time = this.moveSpeed;
|
const replay = core.status.replay.speed ?? 1;
|
||||||
|
const time = replay === 24 ? 1 : this.moveSpeed / replay;
|
||||||
|
|
||||||
return new Promise<void>(res => {
|
return new Promise<void>(res => {
|
||||||
layer.delegateTicker(
|
layer.delegateTicker(
|
||||||
@ -485,7 +486,10 @@ export class HeroMover extends ObjectMoverBase {
|
|||||||
const adapter = HeroMover.adapter;
|
const adapter = HeroMover.adapter;
|
||||||
const viewport = HeroMover.viewport;
|
const viewport = HeroMover.viewport;
|
||||||
if (!adapter || !viewport) return;
|
if (!adapter || !viewport) return;
|
||||||
await adapter.all('readyMove');
|
if (!core.isReplaying()) {
|
||||||
|
adapter.sync('startAnimate');
|
||||||
|
await adapter.all('readyMove');
|
||||||
|
}
|
||||||
// 这里要检查前面那一格能不能走,不能走则不触发平滑视角,以避免撞墙上视角卡住
|
// 这里要检查前面那一格能不能走,不能走则不触发平滑视角,以避免撞墙上视角卡住
|
||||||
if (!this.ignoreTerrain) {
|
if (!this.ignoreTerrain) {
|
||||||
const { x, y } = core.status.hero.loc;
|
const { x, y } = core.status.hero.loc;
|
||||||
@ -499,7 +503,6 @@ export class HeroMover extends ObjectMoverBase {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
adapter.sync('startAnimate');
|
|
||||||
}
|
}
|
||||||
|
|
||||||
protected async onMoveEnd(controller: IMoveController): Promise<void> {
|
protected async onMoveEnd(controller: IMoveController): Promise<void> {
|
||||||
@ -508,9 +511,11 @@ export class HeroMover extends ObjectMoverBase {
|
|||||||
const adapter = HeroMover.adapter;
|
const adapter = HeroMover.adapter;
|
||||||
const viewport = HeroMover.viewport;
|
const viewport = HeroMover.viewport;
|
||||||
if (!adapter || !viewport) return;
|
if (!adapter || !viewport) return;
|
||||||
await adapter.all('endMove');
|
if (!core.isReplaying()) {
|
||||||
|
await adapter.all('endMove');
|
||||||
|
adapter.sync('endAnimate');
|
||||||
|
}
|
||||||
viewport.sync('endMove');
|
viewport.sync('endMove');
|
||||||
adapter.sync('endAnimate');
|
|
||||||
core.clearContinueAutomaticRoute();
|
core.clearContinueAutomaticRoute();
|
||||||
core.stopAutomaticRoute();
|
core.stopAutomaticRoute();
|
||||||
}
|
}
|
||||||
@ -560,16 +565,10 @@ export class HeroMover extends ObjectMoverBase {
|
|||||||
if (MiscData.loopMaps.has(core.status.floorId)) {
|
if (MiscData.loopMaps.has(core.status.floorId)) {
|
||||||
const floor = core.status.maps[floorId];
|
const floor = core.status.maps[floorId];
|
||||||
const width = floor.width;
|
const width = floor.width;
|
||||||
if (x === 0 && dir === 'left') {
|
if (
|
||||||
if (noPass) {
|
(x === 0 && dir === 'left') ||
|
||||||
return HeroMoveCode.LoopHit;
|
(x === width - 1 && dir === 'right')
|
||||||
}
|
) {
|
||||||
await Promise.all([
|
|
||||||
this.renderHeroLoop(),
|
|
||||||
this.moveAnimate(nx, ny, showDir, dir)
|
|
||||||
]);
|
|
||||||
return HeroMoveCode.Loop;
|
|
||||||
} else if (x === width - 1 && dir === 'right') {
|
|
||||||
if (noPass) {
|
if (noPass) {
|
||||||
return HeroMoveCode.LoopHit;
|
return HeroMoveCode.LoopHit;
|
||||||
}
|
}
|
||||||
@ -587,6 +586,7 @@ export class HeroMover extends ObjectMoverBase {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// 可以移动,显示移动动画
|
// 可以移动,显示移动动画
|
||||||
|
|
||||||
await this.moveAnimate(nx, ny, showDir, dir);
|
await this.moveAnimate(nx, ny, showDir, dir);
|
||||||
|
|
||||||
return HeroMoveCode.Step;
|
return HeroMoveCode.Step;
|
||||||
@ -681,9 +681,16 @@ export class HeroMover extends ObjectMoverBase {
|
|||||||
const adapter = HeroMover.adapter;
|
const adapter = HeroMover.adapter;
|
||||||
const viewport = HeroMover.viewport;
|
const viewport = HeroMover.viewport;
|
||||||
if (!adapter || !viewport) return;
|
if (!adapter || !viewport) return;
|
||||||
viewport.all('moveTo', x, y, this.moveSpeed * 1.6);
|
const replay = core.status.replay.speed;
|
||||||
|
const speed = replay === 24 ? 1 : this.moveSpeed / replay;
|
||||||
|
viewport.all('moveTo', x, y, speed * 1.6);
|
||||||
adapter.sync('setAnimateDir', showDir);
|
adapter.sync('setAnimateDir', showDir);
|
||||||
await adapter.all('move', moveDir);
|
if (core.isReplaying()) {
|
||||||
|
await sleep(speed);
|
||||||
|
await adapter.all('setHeroLoc', x, y);
|
||||||
|
} else {
|
||||||
|
await adapter.all('move', moveDir);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
Loading…
Reference in New Issue
Block a user