86449bea-7b4f-45c9-b8ec-afd43345e746.js.map
16.5 KB
{"version":3,"sources":["assets/script/avg/ActionManager.ts"],"names":[],"mappings":"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","file":"","sourceRoot":"/","sourcesContent":["import { DeepReadonly } from \"simba-utils\";\nimport { Disposable } from \"simba-eventkit\";\nimport { Action, TriggerType, ModifyVariableAction, OperandType, VariableOperator, EmitEventAction, ActionType, PlayAudioAction, Actions } from \"./model/ActionModel\";\nimport { EditorEvents } from \"./EditorEvents\";\nimport { GameRecord } from \"./game-data/GameRecord\";\nimport { Random } from \"simba-random\";\nimport { AudioManager } from \"../common/gameplay/managers/AudioManager\";\n\nconst runningExecutors = new Set<Executor>();\n\nlet _affectRecord = true;\n\ninterface Executor {\n execute(): Promise<void>;\n stop(): void;\n}\n\nabstract class ActionExecutor<T extends Action> implements Executor {\n private _timerHandle: any;\n protected _action: DeepReadonly<T>;\n nextExecutor?: ActionExecutor<any>;\n private _disposable?: Disposable;\n\n constructor(action: DeepReadonly<T>) {\n this._action = action;\n }\n\n protected sleep = (t: number) => {\n return new Promise<void>((resolve) => {\n this._timerHandle = setTimeout(() => {\n this._timerHandle = undefined;\n resolve();\n }, t * 1000);\n });\n }\n\n abstract onExec(): Promise<boolean>;\n\n execute = async (): Promise<void> => {\n runningExecutors.add(this);\n if (this._action.trigger === TriggerType.Click) { // wait for click events\n // await new Promise((resolve) => {\n // this._disposable = ClickEvent.once(() => {\n // resolve();\n // })\n // });\n }\n if (this._action.trigger === TriggerType.Event) {\n if (!this._action.triggerEvent) return;\n return new Promise((resolve) => {\n this._disposable = EditorEvents.emitter.once(this._action.triggerEvent!, async () => {\n let result = await this.executeInternal();\n resolve();\n return result;\n });\n });\n } else {\n return this.executeInternal();\n }\n }\n\n private executeInternal = async () => {\n if (this._action.delay) {\n await this.sleep(this._action.delay);\n }\n let finished = true;\n if (this.nextExecutor && this.nextExecutor._action.trigger === TriggerType.PreviousStart) {\n [finished] = await Promise.all([this.onExec(), this.nextExecutor.execute()]);\n } else {\n finished = await this.onExec();\n if (this.nextExecutor) {\n await this.nextExecutor.execute();\n }\n }\n if (finished) {\n runningExecutors.delete(this);\n }\n }\n\n abstract onStop(): void;\n\n stop = () => {\n this.onStop();\n if (this._disposable) this._disposable.dispose();\n if (this._timerHandle) clearTimeout(this._timerHandle);\n }\n}\n\nclass ModifyVariableExecutor extends ActionExecutor<ModifyVariableAction> {\n onExec(): Promise<boolean> {\n if (!_affectRecord) return Promise.resolve(true);\n try {\n let action = this._action;\n let varValue = GameRecord.getVariableValue(action.target);\n let value: string | number = action.oprand.value;\n if (action.oprand.type === OperandType.Const) {\n if (typeof varValue === \"number\") {\n value = Number.parseFloat(value);\n }\n } else if (action.oprand.type === OperandType.Random) {\n let arr = value.split(\"-\");\n let min = Number.parseFloat(arr[0]);\n let max = Number.parseFloat(arr[1]);\n value = Random.range(min, max);\n } else if (action.oprand.type === OperandType.Variable) {\n value = GameRecord.getVariableValue(value);\n }\n switch (action.operator) {\n case VariableOperator.Assign:\n\n break;\n case VariableOperator.Plus:\n varValue += (value as any);\n break;\n case VariableOperator.Minus:\n (varValue as number) -= (value as number);\n break;\n case VariableOperator.Multiply:\n (varValue as number) *= (value as number);\n break;\n case VariableOperator.Divide:\n (varValue as number) /= (value as number);\n break;\n case VariableOperator.Modulo:\n (varValue as number) %= (value as number);\n break;\n }\n GameRecord.setVariableValue(action.target, varValue);\n } catch (e) {\n console.error(e);\n }\n return Promise.resolve(true);\n }\n\n onStop(): void {\n }\n}\n\nclass PlayAudioExecutor extends ActionExecutor<PlayAudioAction> {\n private audioId?: number;\n\n async onExec(): Promise<boolean> {\n let action = this._action;\n if (action.audioType === \"effect\") {\n if (action.stopPreviousSound) {\n AudioManager.stopAllEffect();\n }\n if (action.loopCount <= 0) {\n this.audioId = await AudioManager.playEffect(action.filePath, 0);\n return false;\n } else {\n AudioManager.playEffect(action.filePath, action.loopCount);\n }\n } else {\n if (!action.filePath) {\n AudioManager.stopMusic();\n } else {\n AudioManager.playMusic(action.filePath);\n }\n if (_affectRecord) {\n GameRecord.recordVariables.bgm = action.filePath;\n }\n }\n\n return true;\n }\n\n onStop(): void {\n if (this.audioId !== undefined) {\n AudioManager.stopEffect(this.audioId);\n }\n }\n}\n\nclass EmitEventExecutor extends ActionExecutor<EmitEventAction> {\n async onExec(): Promise<boolean> {\n if (this._action.emitEvent) {\n await Promise.all(EditorEvents.emitter.emit(this._action.emitEvent, this._action.param));\n }\n return Promise.resolve(true);\n }\n\n onStop(): void {\n }\n\n}\n\nexport namespace ActionManager {\n function getExecutor(action: Action) {\n if (action.type === ActionType.ModifyVariable) {\n return new ModifyVariableExecutor(action);\n } else if (action.type === ActionType.PlayAudio) {\n return new PlayAudioExecutor(action);\n } else if (action.type === ActionType.EmitEvent) {\n return new EmitEventExecutor(action);\n }\n return undefined;\n }\n\n let stopped = false;\n let prevActions: DeepReadonly<Actions>;\n export async function executeActions(actionData: DeepReadonly<Actions>, filter?: (action: DeepReadonly<Action>) => boolean, affectRecord = true) {\n // if (prevActions === actionData) {\n // throw new Error(\"Action already executed.\");\n // }\n // prevActions = actionData;\n _affectRecord = affectRecord;\n if (!stopped) {\n stop();\n }\n stopped = false;\n\n let firstActionExecutor: Executor | undefined;\n let triggerType: TriggerType = TriggerType.PreviousStart;\n let executors: Executor[] = [];\n let noWaitExecutors: Executor[] = [];\n if (actionData.actions) {\n let currExecutor: ActionExecutor<any> | undefined;\n for (let i = 0; i < actionData.actions.length; i++) {\n if (i > 0 && actionData.actions[i].trigger === TriggerType.Event) {\n if (firstActionExecutor) {\n executors.push(firstActionExecutor);\n firstActionExecutor = undefined;\n }\n }\n let action = actionData.actions[i];\n if (filter && !filter(action)) {\n continue;\n }\n let executor = getExecutor(action);\n if (executor) {\n if (!firstActionExecutor) {\n firstActionExecutor = executor;\n triggerType = action.trigger;\n currExecutor = executor;\n } else if (currExecutor) {\n currExecutor.nextExecutor = executor;\n currExecutor = executor;\n }\n }\n }\n\n if (firstActionExecutor) {\n if (triggerType === TriggerType.PreviousStart || triggerType === TriggerType.PreviousEnd) {\n executors.push(firstActionExecutor);\n } else {\n noWaitExecutors.push(firstActionExecutor);\n }\n }\n }\n\n if (noWaitExecutors.length) {\n noWaitExecutors.forEach((v) => v.execute());\n }\n let promises = executors.map(v => v.execute());\n if (executors.length) {\n await Promise.all(promises);\n }\n\n if (stopped) return;\n }\n\n export function stop() {\n if (stopped) return;\n stopped = true;\n for (let executor of runningExecutors) {\n executor.stop();\n }\n runningExecutors.clear();\n //add line\n // prevActions = undefined;\n }\n}"]}