mirror of
https://github.com/unanmed/HumanBreak.git
synced 2026-11-14 10:34:30 +08:00
feat: 追逐战初步重置完毕
This commit is contained in:
1 parent
aa080cbd25
commit
e82a616532
9 files changed
+155
-53
No files matched your search
@@ -8,6 +8,29 @@ import { disableViewport, enableViewport } from '@/core/render/utils';
|
||||
import type { HeroMover, MoveStep } from '@/game/state/move';
|
||||
import EventEmitter from 'eventemitter3';
|
||||
|
||||
export interface IChaseController {
|
||||
/** 本次追逐战实例 */
|
||||
readonly chase: Chase;
|
||||
|
||||
/**
|
||||
* 开始这个追逐战
|
||||
* @param fromSave 是否是从存档开始
|
||||
*/
|
||||
start(fromSave: boolean): void;
|
||||
|
||||
/**
|
||||
* 结束这个追逐战
|
||||
* @param success 是否逃脱成功
|
||||
*/
|
||||
end(success: boolean): void;
|
||||
|
||||
/**
|
||||
* 初始化这次追逐战的音频
|
||||
* @param fromSave 是否从存档开始
|
||||
*/
|
||||
initAudio(fromSave: boolean): void;
|
||||
}
|
||||
|
||||
export interface ChaseData {
|
||||
path: Partial<Record<FloorIds, LocArr[]>>;
|
||||
camera: Partial<Record<FloorIds, CameraAnimation>>;
|
||||
|
||||
+49
-20
@@ -1,23 +1,12 @@
|
||||
import {
|
||||
Animation,
|
||||
bezier,
|
||||
hyper,
|
||||
linear,
|
||||
power,
|
||||
shake,
|
||||
sleep
|
||||
} from 'mutate-animate';
|
||||
import { Chase, ChaseData } from './chase';
|
||||
import { Animation, hyper, linear, power, sleep } from 'mutate-animate';
|
||||
import { Chase, ChaseData, IChaseController } from './chase';
|
||||
import { completeAchievement } from '../ui/achievement';
|
||||
import {
|
||||
Camera,
|
||||
CameraAnimation,
|
||||
CameraRotate,
|
||||
CameraScale
|
||||
} from '@/core/render/camera';
|
||||
import { Camera, CameraAnimation, CameraScale } from '@/core/render/camera';
|
||||
import { LayerGroup } from '@/core/render/preset/layer';
|
||||
import { MotaRenderer } from '@/core/render/render';
|
||||
import { Sprite } from '@/core/render/sprite';
|
||||
import { AudioPlayer } from '@/core/audio/audio';
|
||||
import { bgm } from '@/core/audio/bgm';
|
||||
|
||||
const path: Partial<Record<FloorIds, LocArr[]>> = {
|
||||
MT16: [
|
||||
@@ -115,15 +104,16 @@ let back: Sprite | undefined;
|
||||
/**
|
||||
* 初始化并开始这个追逐战
|
||||
*/
|
||||
export function initChase() {
|
||||
export function initChase(): IChaseController {
|
||||
const ani = new Animation();
|
||||
|
||||
const render = MotaRenderer.get('render-main')!;
|
||||
const layer = render.getElementById('layer-main')! as LayerGroup;
|
||||
|
||||
const camera = Camera.for(layer);
|
||||
const camera = new Camera(layer);
|
||||
camera.clearOperation();
|
||||
camera.transform = layer.camera;
|
||||
camera.disable();
|
||||
const animation16 = new CameraAnimation(camera);
|
||||
const animation15 = new CameraAnimation(camera);
|
||||
const animation14 = new CameraAnimation(camera);
|
||||
@@ -199,6 +189,8 @@ export function initChase() {
|
||||
camera.destroy();
|
||||
back?.destroy();
|
||||
back = void 0;
|
||||
core.removeFlag('onChase');
|
||||
core.removeFlag('chaseId');
|
||||
});
|
||||
|
||||
judgeFail1(chase, ani, camera);
|
||||
@@ -210,8 +202,45 @@ export function initChase() {
|
||||
|
||||
Mota.Plugin.require('chase_g').chaseInit1();
|
||||
|
||||
chase.start();
|
||||
wolfMove(chase);
|
||||
const controller: IChaseController = {
|
||||
chase,
|
||||
start(fromSave) {
|
||||
core.setFlag('onChase', true);
|
||||
core.setFlag('chaseId', 1);
|
||||
core.autosave();
|
||||
chase.start();
|
||||
camera.enable();
|
||||
wolfMove(chase);
|
||||
if (fromSave) {
|
||||
initFromSave(chase);
|
||||
}
|
||||
},
|
||||
end(success) {
|
||||
chase.end(success);
|
||||
},
|
||||
initAudio(fromSave) {
|
||||
if (fromSave) initFromSave(chase);
|
||||
else initAudio(chase);
|
||||
}
|
||||
};
|
||||
return controller;
|
||||
}
|
||||
|
||||
function initAudio(chase: Chase) {
|
||||
playAudio(0, chase);
|
||||
}
|
||||
|
||||
function initFromSave(chase: Chase) {
|
||||
playAudio(43.5, chase);
|
||||
}
|
||||
|
||||
function playAudio(from: number, chase: Chase) {
|
||||
bgm.changeTo('escape.mp3', from);
|
||||
bgm.blockChange();
|
||||
chase.on('end', () => {
|
||||
bgm.unblockChange();
|
||||
bgm.undo();
|
||||
});
|
||||
}
|
||||
|
||||
// function chaseShake(chase: Chase) {
|
||||
|
||||
@@ -1,9 +1,34 @@
|
||||
import { IChaseController } from './chase';
|
||||
import { initChase as init1 } from './chase1';
|
||||
|
||||
const chaseIndexes: Record<number, () => void> = {
|
||||
let nowChase: IChaseController | undefined;
|
||||
|
||||
const chaseIndexes: Record<number, () => IChaseController> = {
|
||||
0: init1
|
||||
};
|
||||
|
||||
export function startChase(index: number) {
|
||||
chaseIndexes[index]();
|
||||
export function getNow() {
|
||||
return nowChase;
|
||||
}
|
||||
|
||||
export function initChase(index: number) {
|
||||
nowChase?.end(false);
|
||||
const controller = chaseIndexes[index]();
|
||||
nowChase = controller;
|
||||
controller.chase.on('end', () => {
|
||||
nowChase = void 0;
|
||||
});
|
||||
return nowChase;
|
||||
}
|
||||
|
||||
export function start(fromSave: boolean) {
|
||||
nowChase?.start(fromSave);
|
||||
}
|
||||
|
||||
export function end(success: boolean) {
|
||||
nowChase?.end(success);
|
||||
}
|
||||
|
||||
export function initAudio(fromSave: boolean) {
|
||||
nowChase?.initAudio(fromSave);
|
||||
}
|
||||
Reference in new issue
Block a user