diff --git a/src/core/types.ts b/src/core/types.ts index 7ac263e..2cae6ce 100644 --- a/src/core/types.ts +++ b/src/core/types.ts @@ -74,6 +74,12 @@ export type RequestSetPropertyData = Info; export type ResponseSetPropertyData = Info; export type RequestLogData = string[]; export type RequestOpenNodeTouchFuntionData = { uuid: string; code: ShowCode; index: number }; +export type RequestOpenScriptData = { + /**节点的UUID */ + uuid: string; + /**节点的脚本名字 */ + script: string; +}; export type ResponseErrorData = string; export enum Msg { None = "None", @@ -147,6 +153,7 @@ export enum Msg { * 请求在source面板打开节点的touch函数 */ RequestOpenNodeTouchFuntion = "request-open-node-touch-funtion", + RequestOpenScript = "request-open-script", } export class PluginEvent { diff --git a/src/scripts/inject/inspector.ts b/src/scripts/inject/inspector.ts index df84750..8a79aa3 100644 --- a/src/scripts/inject/inspector.ts +++ b/src/scripts/inject/inspector.ts @@ -1,6 +1,6 @@ // eval 注入脚本的代码,变量尽量使用var,后来发现在import之后,let会自动变为var import { uniq } from "lodash"; -import { Msg, PluginEvent, RequestLogData, RequestNodeInfoData, RequestOpenNodeTouchFuntionData, RequestSetPropertyData, ResponseGameInfoData, ResponseNodeInfoData, ResponseSetPropertyData, ResponseSupportData, ResponseTreeInfoData } from "../../core/types"; +import { Msg, PluginEvent, RequestLogData, RequestNodeInfoData, RequestOpenNodeTouchFuntionData, RequestOpenScriptData, RequestSetPropertyData, ResponseGameInfoData, ResponseNodeInfoData, ResponseSetPropertyData, ResponseSupportData, ResponseTreeInfoData } from "../../core/types"; import { CompType, getNodeIcon } from "../../views/devtools/comp"; import { ArrayData, BoolData, ColorData, DataType, EngineData, EnumData, Group, ImageData, Info, InvalidData, NodeInfoData, NumberData, ObjectCircleData, ObjectData, Property, StringData, TreeData, Vec2Data, Vec3Data, Vec4Data } from "../../views/devtools/data"; import { calcCodeHint, getCallbacks } from "./code-hint"; @@ -123,6 +123,25 @@ export class Inspector extends InjectEvent { } break; } + case Msg.RequestOpenScript: { + const data: RequestOpenScriptData = pluginEvent.data; + const node = this.inspectorGameMemoryStorage[data.uuid]; + if (!node || !node.isValid) { + return; + } + const comps = node._components; + if (comps) { + for (let i = 0; i < comps.length; i++) { + const comp = comps[i]; + const compName = this.getCompName(comp); + if (compName === data.script) { + this.target = comp.constructor; + break; + } + } + } + break; + } case Msg.RequestOpenNodeTouchFuntion: { const data: RequestOpenNodeTouchFuntionData = pluginEvent.data; const node = this.inspectorGameMemoryStorage[data.uuid]; diff --git a/src/views/devtools/comp/index.ts b/src/views/devtools/comp/index.ts index a03bf08..64e1ab7 100644 --- a/src/views/devtools/comp/index.ts +++ b/src/views/devtools/comp/index.ts @@ -192,6 +192,11 @@ export function getSimpleProperties(typeName: string): string[] { "isAlignBottom", ]; config[CompType.Label] = [ + "color", + "isBold", + "isItalic", + "isUnderline", + "spaceX", "string", // "horizontalAlign", "verticalAlign", diff --git a/src/views/devtools/hierarchy.vue b/src/views/devtools/hierarchy.vue index 15b0366..a3663d1 100644 --- a/src/views/devtools/hierarchy.vue +++ b/src/views/devtools/hierarchy.vue @@ -11,7 +11,7 @@ - + @@ -22,7 +22,7 @@ import { HandExpandOptions } from "@xuyanfeng/cc-ui/types/cc-tree/const"; import Mousetrap, { MousetrapInstance } from "mousetrap"; import { storeToRefs } from "pinia"; import { defineComponent, nextTick, onMounted, onUnmounted, ref, toRaw, watch } from "vue"; -import { Msg, PluginEvent, RequestOpenNodeTouchFuntionData, RequestTreeInfoData, RequestUseFrameData, ResponseSetPropertyData, ResponseSupportData } from "../../core/types"; +import { Msg, PluginEvent, RequestOpenNodeTouchFuntionData, RequestOpenScriptData, RequestTreeInfoData, RequestUseFrameData, ResponseSetPropertyData, ResponseSupportData } from "../../core/types"; import { ga } from "../../ga"; import { GA_EventName } from "../../ga/type"; import { ShowCode } from "../../scripts/inject/types"; @@ -34,6 +34,7 @@ import GameInfo from "./game-info.vue"; import Refresh from "./refresh.vue"; import { appStore } from "./store"; import { Timer } from "./timer"; +import { execInspect } from "./util"; const { CCTree, CCFootBar, CCDock, CCDialog, CCInput, CCButton, CCInputNumber, CCSelect, CCButtonGroup, CCCheckBox, CCColor, CCDivider } = ccui.components; export default defineComponent({ name: "hierarchy", @@ -272,14 +273,37 @@ export default defineComponent({ } } }, + onClickSubfix(event: MouseEvent, data: TreeData) { + function inspectScript(scriptName: string) { + bridge.send(Msg.RequestOpenScript, { uuid: data.id, script: scriptName } as RequestOpenScriptData); + execInspect(); + } + if (data.subfixIconTip) { + const multiple = data.subfixIconTip.split("\n"); + if (multiple.length >= 2) { + const menus: IUiMenuItem[] = []; + for (let i = 0; i < multiple.length; i++) { + const item = multiple[i]; + menus.push({ + name: item, + callback: (item) => { + console.log(item.name); + inspectScript(item.name); + }, + }); + } + ccui.menu.showMenuByMouseEvent(event, menus); + } else { + inspectScript(multiple[0]); + } + } + }, onMenu(event: MouseEvent, data: TreeData) { const menus: IUiMenuItem[] = []; if (data) { function doInspect(type: ShowCode, index: number) { bridge.send(Msg.RequestOpenNodeTouchFuntion, { uuid: data.id, code: type, index } as RequestOpenNodeTouchFuntionData); - setTimeout(() => { - chrome.devtools.inspectedWindow.eval(`DoInspect()`); - }, 5); + execInspect(); } function hintCode(type: ShowCode, cbArray: FunctionInfo[], event: MouseEvent) { if (cbArray.length === 1) { diff --git a/src/views/devtools/util.ts b/src/views/devtools/util.ts index 5c51f9e..06eba2c 100644 --- a/src/views/devtools/util.ts +++ b/src/views/devtools/util.ts @@ -4,3 +4,8 @@ import { bridge } from "./bridge"; export function checkSupport() { bridge.send(Msg.RequestSupport, {} as RequestSupportData); } +export function execInspect() { + setTimeout(() => { + chrome.devtools.inspectedWindow.eval(`DoInspect()`); + }, 5); +}