Skip to content

Commit

Permalink
Merge branch 'dev'
Browse files Browse the repository at this point in the history
  • Loading branch information
MakinoharaShoko committed Sep 29, 2023
2 parents 89a486c + 9f29096 commit 5f423fb
Show file tree
Hide file tree
Showing 22 changed files with 479 additions and 162 deletions.
4 changes: 2 additions & 2 deletions packages/origine2/src/config/info.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,6 @@ export interface Info {
}

export const __INFO: Info = {
version: '4.4.5',
buildTime: '2023-09-23T05:28:26.398Z',
version: '4.4.5.1',
buildTime: '2023-09-23T05:28:26.398Z', // 编译时会通过 version-sync.js 自动更新
};
8 changes: 4 additions & 4 deletions packages/origine2/src/hooks/useRelease.ts
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ export function useRelease() {

const webgalTerreLatestApiUrl = 'https://api.github.com/repos/MakinoharaShoko/WebGAL_Terre/releases/latest';

const [latestRelease, setLatestRelease] = useState<latestRelease>({ version: __INFO.version, releaseTime: __INFO.buildTime });
const [latestRelease, setLatestRelease] = useState<latestRelease | null>(null);

const getRelease = async () => {
const response = await fetch(webgalTerreLatestApiUrl);
Expand All @@ -23,8 +23,8 @@ export function useRelease() {
getRelease().then(
releasedata => setLatestRelease(
{
version: releasedata.tag_name,
releaseTime: releasedata.published_at,
version: releasedata?.tag_name,
releaseTime: releasedata?.published_at,
}
)
);
Expand All @@ -34,4 +34,4 @@ export function useRelease() {
}, []);

return latestRelease;
};
};
37 changes: 33 additions & 4 deletions packages/origine2/src/pages/dashboard/About.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -23,9 +23,38 @@ const About: React.FunctionComponent = () => {
const t = useTrans('editor.topBar.');

const latestRelease = useRelease();
const versionToNumber = (version: string) => Number(version.replace(/\./g, ''));
// 是否有新版本
const isNewRelease = versionToNumber(latestRelease.version) !== versionToNumber(__INFO.version);

/**
* 比较版本号
* @param latestVersion 最新版本
* @param currentVersion 当前版本
* @returns 1: 最新版本比当前版本高, -1: 最新版本比当前版本低,0: 版本相同
*/
const compareVersion = (latestVersion: string, currentVersion: string) => {
const versionToArray = (version: string) => version?.split('.')?.map(v => Number(v))??[0];

const latestVersionArray = versionToArray(latestVersion);
const currentVersionArray = versionToArray(currentVersion);
const length = Math.max(latestVersionArray.length, currentVersionArray.length);

for (let i = 0; i < length; i++) {
if (!latestVersionArray[i]){
latestVersionArray[i] = 0;
}
if (!currentVersionArray[i]){
currentVersionArray[i] = 0;
}
if (latestVersionArray[i] > currentVersionArray[i]) {
return 1;
} else if (latestVersionArray[i] < currentVersionArray[i]) {
return -1;
}
}
return 0;
};

const isNewRelease = latestRelease && compareVersion(latestRelease.version, __INFO.version) === 1;

isNewRelease && logger.info(`发现新版本:${latestRelease.version}`, latestRelease);

const dateTimeOptions: DateTimeFormatOptions = { year: 'numeric', month: '2-digit', day: '2-digit' };
Expand Down Expand Up @@ -58,7 +87,7 @@ const About: React.FunctionComponent = () => {
<small>
{t('about.currentVersion')}: {`${__INFO.version} (${new Date(__INFO.buildTime).toLocaleString('zh-CN', dateTimeOptions).replaceAll('/', '-')})`}<br />
{
isNewRelease &&
latestRelease &&
<span>
{t('about.latestVersion')}: {`${latestRelease.version} (${new Date(latestRelease.releaseTime).toLocaleString('zh-CN', dateTimeOptions).replaceAll('/', '-')})`}
</span>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -97,6 +97,11 @@ export default function GameConfig() {
<GameConfigEditor key="gameKey" value={getConfigContentAsString('Game_key')}
onChange={(e: string) => updateGameConfigSimpleByKey('Game_key', e)}/>
</div>
<div className={styles.sidebar_gameconfig_container}>
<div className={styles.sidebar_gameconfig_title}>{t("options.description")}</div>
<GameConfigEditor key="gameDescription" value={getConfigContentAsString('Description')}
onChange={(e: string) => updateGameConfigSimpleByKey("Description", e)}/>
</div>
<div className={styles.sidebar_gameconfig_container}>
<div className={styles.sidebar_gameconfig_title}>{t("options.packageName")}</div>
<GameConfigEditor key="packageName" value={getConfigContentAsString('Package_name')}
Expand Down
1 change: 1 addition & 0 deletions packages/origine2/src/translations/en.ts
Original file line number Diff line number Diff line change
Expand Up @@ -122,6 +122,7 @@ export const en = {
options: {
name: 'Game name',
id: 'Game ID',
description: 'Game description',
packageName: 'Game package name',
bg: 'Background image of title',
bgm: 'BGM of title',
Expand Down
1 change: 1 addition & 0 deletions packages/origine2/src/translations/jp.ts
Original file line number Diff line number Diff line change
Expand Up @@ -122,6 +122,7 @@ export const jp = {
options: {
name: 'ゲーム名',
id: 'ゲームID',
description: 'ゲーム概要',
packageName: 'パッケージ名',
bg: 'タイトルの背景画像',
bgm: 'タイトルのBGM',
Expand Down
1 change: 1 addition & 0 deletions packages/origine2/src/translations/zh-cn.ts
Original file line number Diff line number Diff line change
Expand Up @@ -122,6 +122,7 @@ export const zhCn = {
options: {
name: '游戏名称',
id: '游戏识别码',
description: '游戏简介',
packageName: '游戏包名',
bg: '标题背景图片',
bgm: '标题背景音乐',
Expand Down
19 changes: 19 additions & 0 deletions packages/origine2/src/types/debugProtocol.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
import {IStageState} from "@/types/stageInterface";

export enum DebugCommand {
// 跳转
JUMP,
// 同步自客户端
SYNCFC,
// 同步自编辑器
SYNCFE,
}

export interface IDebugMessage {
command: DebugCommand;
sceneMsg: {
sentence: number;
scene: string;
};
stageSyncMsg: IStageState;
}
164 changes: 164 additions & 0 deletions packages/origine2/src/types/stageInterface.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,164 @@

/**
* 游戏内变量
* @interface IGameVar
*/
export interface IGameVar {
[propName: string]: string | boolean | number;
}

export interface ISetGameVar {
key: string;
value: string | boolean | number;
}

/**
* 单个选项
* @interface IChooseItem
*/
export interface IChooseItem {
key: string; // 选项名称
targetScene: string; // 选项target
isSubScene: boolean; // 是否是子场景调用
}

export interface ITransform {
alpha: number;
scale: {
x: number;
y: number;
};
pivot: {
x: number;
y: number;
};
position: {
x: number;
y: number;
};
rotation: number;
blur: number;
}

/**
* 基本效果接口
* @interface IEffect
*/
export interface IEffect {
target: string; // 作用目标
transform?: ITransform; // 变换
}

/**
* 基本变换预设
*/
export const baseTransform: ITransform = {
alpha: 1,
scale: {
x: 1,
y: 1,
},
pivot: {
x: 0.5,
y: 0.5,
},
position: {
x: 0,
y: 0,
},
rotation: 0,
blur: 0,
};

export interface IFreeFigure {
basePosition: 'left' | 'center' | 'right';
name: string;
key: string;
}

export interface IFigureAssociatedAnimation {
mouthAnimation: IMouthAnimationFile;
blinkAnimation: IEyesAnimationFile;
targetId: string;
animationFlag: string;
}

export interface IMouthAnimationFile {
open: string;
close: string;
halfOpen: string;
}

export interface IEyesAnimationFile {
open: string;
close: string;
}

/**
* 启动演出接口
* @interface IRunPerform
*/
export interface IRunPerform {
id: string;
isHoldOn: boolean; // 演出类型
script: any; // 演出脚本
}

/**
* @interface IStageState 游戏舞台数据接口
*/
export interface IStageState {
oldBgName: string; // 旧背景的文件路径
bgName: string; // 背景文件地址(相对或绝对)
figName: string; // 立绘_中 文件地址(相对或绝对)
figNameLeft: string; // 立绘_左 文件地址(相对或绝对)
figNameRight: string; // 立绘_右 文件地址(相对或绝对)
// 自由立绘
freeFigure: Array<IFreeFigure>;
figureAssociatedAnimation: Array<IFigureAssociatedAnimation>;
showText: string; // 文字
showTextSize: number; // 文字
showName: string; // 人物名
command: string; // 语句指令
choose: Array<IChooseItem>; // 选项列表
vocal: string; // 语音 文件地址(相对或绝对)
vocalVolume: number; // 语音 音量调整(0 - 100)
bgm: {
// 背景音乐
src: string; // 背景音乐 文件地址(相对或绝对)
enter: number; // 背景音乐 淡入或淡出的毫秒数
volume: number; // 背景音乐 音量调整(0 - 100)
};
uiSe: string; // 用户界面音效 文件地址(相对或绝对)
miniAvatar: string; // 小头像 文件地址(相对或绝对)
GameVar: IGameVar; // 游戏内变量
effects: Array<IEffect>; // 应用的变换
bgTransform: string;
bgFilter: string;
PerformList: Array<IRunPerform>; // 要启动的演出列表
currentDialogKey: string; // 当前对话的key
live2dMotion: { target: string; motion: string }[];
// 当前演出的延迟,用于做对话插演出!
// currentPerformDelay:number
currentConcatDialogPrev: string;
// 测试:电影叙事
enableFilm: string;
isDisableTextbox: boolean;
}

/**
* @interface ISetStagePayload 设置舞台状态的Action的Payload的数据接口
*/
export interface ISetStagePayload {
key: keyof IStageState;
value: any;
}

export interface IStageStore {
stageState: IStageState;
setStage: <K extends keyof IStageState>(key: K, value: any) => void;
getStageState: () => IStageState;
restoreStage: (newState: IStageState) => void;
}

export type StageStore = IStageStore;
15 changes: 12 additions & 3 deletions packages/origine2/src/utils/wsUtil.ts
Original file line number Diff line number Diff line change
@@ -1,18 +1,27 @@
import { logger } from "./logger";
import {logger} from "./logger";
import {origineStore} from "@/store/origineStore";
import {DebugCommand, IDebugMessage} from "@/types/debugProtocol";

export class WsUtil {
public static sendSyncCommand(sceneName: string, lineNumber: number, lineCommandString: string) {

if(!origineStore.getState().status.editor.isEnableLivePreview){
if (!origineStore.getState().status.editor.isEnableLivePreview) {
return;
}

// @ts-ignore
if (window["currentWs"] && this.getIsCurrentLineJump(lineCommandString)) { // @ts-ignore
logger.debug("编辑器开始发送同步数据");
const message: IDebugMessage = {
command: DebugCommand.JUMP,
sceneMsg: {
scene: sceneName,
sentence: lineNumber
},// @ts-ignore
stageSyncMsg: {}
};
// @ts-ignore
window["currentWs"].send(`jmp ${sceneName} ${lineNumber}`);
window["currentWs"].send(JSON.stringify(message));
}
}

Expand Down
Loading

0 comments on commit 5f423fb

Please sign in to comment.