diff --git a/packages/webgal/src/Core/util/syncWithEditor/webSocketFunc.ts b/packages/webgal/src/Core/util/syncWithEditor/webSocketFunc.ts index 9e68cdcde..26a863ed3 100644 --- a/packages/webgal/src/Core/util/syncWithEditor/webSocketFunc.ts +++ b/packages/webgal/src/Core/util/syncWithEditor/webSocketFunc.ts @@ -9,6 +9,8 @@ import { nextSentence } from '@/Core/controller/gamePlay/nextSentence'; import { resetStage } from '@/Core/controller/stage/resetStage'; import { logger } from '@/Core/util/logger'; import { syncWithOrigine } from './syncWithOrigine'; +import { stageActions } from '@/store/stageReducer'; +import { baseTransform, IEffect } from '@/store/stageInterface'; export const webSocketFunc = () => { const loc: string = window.location.hostname; @@ -101,6 +103,29 @@ export const webSocketFunc = () => { const command = message.message; webgalStore.dispatch(setFontOptimization(command === 'true')); } + if (message.command === DebugCommand.SET_EFFECT) { + try { + const effect = JSON.parse(message.message) as IEffect; + const targetEffect = webgalStore.getState().stage.effects.find((e) => e.target === effect.target); + const targetTransform = targetEffect?.transform ? targetEffect.transform : baseTransform; + const newTransform = { + ...targetTransform, + ...(effect.transform ?? {}), + position: { + ...targetTransform.position, + ...(effect.transform?.position ?? {}), + }, + scale: { + ...targetTransform.scale, + ...(effect.transform?.scale ?? {}), + }, + }; + webgalStore.dispatch(stageActions.updateEffect({ target: effect.target, transform: newTransform })); + } catch (e) { + logger.error(`无法设置效果 ${message.message}, ${e}`); + return; + } + } }; socket.onerror = () => { logger.info('当前没有连接到 Terre 编辑器'); diff --git a/packages/webgal/src/types/debugProtocol.ts b/packages/webgal/src/types/debugProtocol.ts index 2cfc9aaae..60c17e2e4 100644 --- a/packages/webgal/src/types/debugProtocol.ts +++ b/packages/webgal/src/types/debugProtocol.ts @@ -17,6 +17,8 @@ export enum DebugCommand { TEMP_SCENE, // 字体优化 FONT_OPTIMIZATION, + // 直接设置效果 + SET_EFFECT, } export interface IDebugMessage {