feat: 追逐战初步重置完毕

This commit is contained in:
AncTe committed 2024-10-08 20:14:07 +08:00
1 parent aa080cbd25
commit e82a616532
9 files changed
+155 -53

No files matched your search

+23
View File
@@ -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
View File
@@ -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) {
+28 -3
View File
@@ -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);
}