Commit e5a7247c authored by timel's avatar timel

refactor: make a config module

parent a12d47ba
Pipeline #21149 failed with stages
in 14 seconds
import { useEnv } from "../hook";
const { DEV, VITE_IS_AI_MODE, VITE_IS_AI_FIRST } = useEnv();
interface AutomationConfig {
isAiMode: boolean;
isAiFirst: boolean;
}
const defaultConfig: AutomationConfig = {
isAiMode: false,
isAiFirst: false,
};
const aiModeConfig: AutomationConfig = {
isAiMode: true,
isAiFirst: VITE_IS_AI_FIRST,
};
const genAutomationConfig = () => {
if (DEV) {
if (VITE_IS_AI_MODE) {
return aiModeConfig;
}
// 待拓展
}
return defaultConfig;
};
export const automationConfig: AutomationConfig = genAutomationConfig();
/* import { useEnv } from "../hook";
* 旨在跳过登录界面,直接进入游戏(和AI对战、后续可能增加自动的PVP)。
* 仅在开发环境下生效,便于开发者快速调节决斗界面。
*/
import { useEnv } from ".";
const { DEV, VITE_IS_AI_MODE, VITE_IS_AI_FIRST, VITE_AI_MODE_DEFAULT_DECK } = const { DEV, VITE_IS_AI_MODE, VITE_AI_MODE_DEFAULT_DECK } = useEnv();
useEnv();
interface PrepareConfig { interface DefaultsConfig {
defaultPlayer: string; defaultPlayer: string;
defaultDeck: string; defaultDeck: string;
defaultPassword: string; defaultPassword: string;
defaultMora: string; defaultMora: string;
isAiMode: boolean;
isAiFirst: boolean;
} }
const autoModeConfig: PrepareConfig = { const defaultConfig: DefaultsConfig = {
defaultPlayer: "", defaultPlayer: "",
// 无需考虑undefined的情况,如果为undefined,界面上会显示【请选择】 // 无需考虑undefined的情况,如果为undefined,界面上会显示【请选择】
defaultDeck: VITE_AI_MODE_DEFAULT_DECK, defaultDeck: VITE_AI_MODE_DEFAULT_DECK,
defaultPassword: "", defaultPassword: "",
defaultMora: "scissors", defaultMora: "scissors",
isAiMode: false,
isAiFirst: false,
}; };
const aiModeConfig: PrepareConfig = { const aiModeConfig: DefaultsConfig = {
...autoModeConfig, ...defaultConfig,
defaultPlayer: `AiKiller${Math.random().toString(36).slice(2)}}`, defaultPlayer: `AiKiller${Math.random().toString(36).slice(2)}}`,
defaultPassword: "AI", defaultPassword: "AI",
isAiMode: true,
isAiFirst: VITE_IS_AI_FIRST,
}; };
export function useConfig(): PrepareConfig { const genDefaultsConfig = () => {
if (DEV) { if (DEV) {
if (VITE_IS_AI_MODE) { if (VITE_IS_AI_MODE) {
return aiModeConfig; return aiModeConfig;
...@@ -42,5 +31,7 @@ export function useConfig(): PrepareConfig { ...@@ -42,5 +31,7 @@ export function useConfig(): PrepareConfig {
// 待拓展 // 待拓展
} }
return autoModeConfig; return defaultConfig;
} };
export const defaultsConfig: DefaultsConfig = genDefaultsConfig();
import { useEnv } from "../hook";
import NeosDevConfig from "../../neos.config.json";
import NeosProdConfig from "../../neos.config.prod.json";
const { DEV } = useEnv();
type Equal<X, Y> = (<T>() => T extends X ? 1 : 2) extends <T>() => T extends Y
? 1
: 2
? true
: false;
type Expect<T extends true> = T;
/**
* 确保两个json文件的结构一致,不一致会报错
*/
type _ = Expect<Equal<typeof NeosDevConfig, typeof NeosProdConfig>>;
export const envConfig = DEV ? NeosDevConfig : NeosProdConfig;
import { automationConfig } from "./automation";
import { defaultsConfig } from "./defaults";
import { envConfig } from "./env";
export const useConfig = () => ({
automation: automationConfig,
defaults: defaultsConfig,
...envConfig,
} satisfies Record<string, unknown>);
export * from "./useApp"; export * from "./useApp";
export * from "./useEnv"; export * from "./useEnv";
export * from "./useConfig";
...@@ -11,10 +11,13 @@ import React, { useState, ChangeEvent, useEffect } from "react"; ...@@ -11,10 +11,13 @@ import React, { useState, ChangeEvent, useEffect } from "react";
import { useNavigate } from "react-router-dom"; import { useNavigate } from "react-router-dom";
import "../styles/core.scss"; import "../styles/core.scss";
import NeosConfig from "../../neos.config.json"; import NeosConfig from "../../neos.config.json";
import { useConfig } from "../hook"; import { useConfig } from "../config";
const serverConfig = NeosConfig.servers; const serverConfig = NeosConfig.servers;
const { isAiMode, defaultPlayer, defaultPassword } = useConfig(); const {
defaults: { defaultPlayer, defaultPassword },
automation: { isAiMode },
} = useConfig();
export default function Login() { export default function Login() {
const [player, setPlayer] = useState(defaultPlayer); const [player, setPlayer] = useState(defaultPlayer);
......
import React from "react"; import React from "react";
import { sendHandResult, sendTpResult } from "../api/ocgcore/ocgHelper"; import { sendHandResult, sendTpResult } from "../api/ocgcore/ocgHelper";
import { useAppSelector, useConfig } from "../hook"; import { useAppSelector } from "../hook";
import { useConfig } from "../config";
import { import {
selectHandSelectAble, selectHandSelectAble,
unSelectHandAble, unSelectHandAble,
...@@ -18,7 +19,10 @@ import { ...@@ -18,7 +19,10 @@ import {
TableOutlined, TableOutlined,
} from "@ant-design/icons"; } from "@ant-design/icons";
const { isAiMode, isAiFirst, defaultMora } = useConfig(); const {
automation: { isAiMode, isAiFirst },
defaults: { defaultMora },
} = useConfig();
const Mora = () => { const Mora = () => {
const dispatch = store.dispatch; const dispatch = store.dispatch;
......
...@@ -19,7 +19,8 @@ import { ...@@ -19,7 +19,8 @@ import {
selectPlayer0, selectPlayer0,
selectPlayer1, selectPlayer1,
} from "../reducers/playerSlice"; } from "../reducers/playerSlice";
import { useAppSelector, useConfig } from "../hook"; import { useAppSelector } from "../hook";
import { useConfig } from "../config";
import { selectJoined } from "../reducers/joinSlice"; import { selectJoined } from "../reducers/joinSlice";
import { selectChat } from "../reducers/chatSlice"; import { selectChat } from "../reducers/chatSlice";
import { fetchDeck, type IDeck, DeckManager } from "../api/deck"; import { fetchDeck, type IDeck, DeckManager } from "../api/deck";
...@@ -48,7 +49,10 @@ import { initStrings } from "../api/strings"; ...@@ -48,7 +49,10 @@ import { initStrings } from "../api/strings";
const READY_STATE = "ready"; const READY_STATE = "ready";
const { isAiMode, defaultDeck } = useConfig(); const {
defaults: { defaultDeck },
automation: { isAiMode },
} = useConfig();
const WaitRoom = () => { const WaitRoom = () => {
const params = useParams<{ const params = useParams<{
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment