hzengine-core 0.1.2-dev → 0.1.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,249 +1,247 @@
1
- // / <reference types="@zeppos/device-types" />
2
- // import hmUI from "@zos/ui";
3
- import { Async, Script } from "../../index.js";
4
- export function img(core) {
5
- let transform_plugin = core.plugins.get("transform");
6
- if (!transform_plugin)
7
- core.debug.log("[IMG Plugin] Info: Transform plugin not set up");
8
- // show command
9
- core.script.use((ctx, next) => {
10
- var _a;
11
- if (ctx.rawtext.trim().split(" ")[0].toLowerCase() !== "show")
12
- return next();
13
- if (ctx.slicedArgs.length === 1)
14
- throw `Show Command: incorrect amount of args`;
15
- if (ctx.slicedArgs.length === 2)
16
- throw `Show Command: incorrect amount of args`;
17
- let parsedRes = parseImgCommandFields(ctx);
18
- // update args to no fields
19
- ctx.slicedArgs = parsedRes.leftedArgs;
20
- let tag = ctx.slicedArgs[1].str;
21
- let name_key = "";
22
- for (let i = 1; i < ctx.slicedArgs.length; ++i) {
23
- name_key += ctx.slicedArgs[i].str + " ";
24
- }
25
- name_key = name_key.trim().toLowerCase();
26
- let path = (_a = core.storage.preloadedData.image.nameMap[name_key]) === null || _a === void 0 ? void 0 : _a[0];
27
- if (!path)
28
- throw `Show Command: image with name_key [${name_key}] not found `;
29
- // let size = (hmUI as any).getImageInfo(path);
30
- let size = core.platform.getImageInfo(path);
31
- console.log(`IMG: path: ${path}, size: ${JSON.stringify(size)}`);
32
- if (!size)
33
- throw `Show Command: read size of [${path}] failed`;
34
- showAction(tag, path, size, parsedRes.strategy);
35
- });
36
- function showAction(tag, path, size, routerStrategy) {
37
- const show_view_tag_prefix = "hzengine.img";
38
- const show_view_name = "fg_img";
39
- let prop = {
40
- imgPath: path,
41
- offset: {
42
- x: 0,
43
- y: 0,
44
- },
45
- size: {
46
- width: size.width,
47
- height: size.height,
48
- },
49
- };
50
- let tag_prefixed = `${show_view_tag_prefix}.${tag}`;
51
- let router = core.ui.getRouter(tag_prefixed);
52
- if (!router) {
53
- core.ui.addRouter(tag_prefixed, "fg");
54
- router = core.ui.getRouter(tag_prefixed);
55
- }
56
- Async.nextTick(() => {
57
- // @ts-ignore
58
- router.replace(show_view_name, prop, routerStrategy !== null && routerStrategy !== void 0 ? routerStrategy : undefined);
59
- });
60
- }
61
- // hide command
62
- core.script.use((ctx, next) => {
63
- if (ctx.rawtext.trim().split(" ")[0].toLowerCase() !== "hide")
64
- return next();
65
- let parsedRes = parseImgCommandFields(ctx);
66
- ctx.slicedArgs = parsedRes.leftedArgs;
67
- if (ctx.slicedArgs.length !== 2) {
68
- throw `Hide Command: incorrect amount of args`;
69
- }
70
- let tag = ctx.slicedArgs[1].str;
71
- hideAction(tag, parsedRes.strategy);
72
- });
73
- function hideAction(tag, routerStrategy) {
74
- const show_view_tag_prefix = "hzengine.img";
75
- let tag_prefixed = `${show_view_tag_prefix}.${tag}`;
76
- let router = core.ui.getRouter(tag_prefixed);
77
- if (!router) {
78
- throw `Hide Command: router with tag [${tag}] not found `;
79
- }
80
- Async.nextTick(() => {
81
- router.clear(routerStrategy !== null && routerStrategy !== void 0 ? routerStrategy : undefined);
82
- });
83
- }
84
- // scene command
85
- core.script.use((ctx, next) => {
86
- var _a;
87
- if (ctx.rawtext.trim().split(" ")[0].toLowerCase() !== "scene")
88
- return next();
89
- if (ctx.slicedArgs.length === 1)
90
- throw `Scene Command: incorrect amount of args`;
91
- if (ctx.slicedArgs.length === 2)
92
- throw `Scene Command: incorrect amount of args`;
93
- let parsedRes = parseImgCommandFields(ctx);
94
- // update args to no fields
95
- ctx.slicedArgs = parsedRes.leftedArgs;
96
- let tag = ctx.slicedArgs[1].str;
97
- let name_key = "";
98
- for (let i = 1; i < ctx.slicedArgs.length; ++i) {
99
- name_key += ctx.slicedArgs[i].str + " ";
100
- }
101
- name_key = name_key.trim().toLowerCase();
102
- let path = (_a = core.storage.preloadedData.image.nameMap[name_key]) === null || _a === void 0 ? void 0 : _a[0];
103
- if (!path)
104
- throw `Scene Command: image with name_key [${name_key}] not found `;
105
- // let size = (hmUI as any).getImageInfo(path);
106
- let size = core.platform.getImageInfo(path);
107
- if (!size)
108
- throw `Scene Command: read size of [${path}] failed`;
109
- sceneAction(tag, path, size, parsedRes.strategy);
110
- });
111
- function sceneAction(tag, path, size, routerStrategy) {
112
- const scene_view_tag_prefix = "hzengine.img";
113
- const scene_view_name = "bg_img";
114
- let prop = {
115
- imgPath: path,
116
- offset: {
117
- x: 0,
118
- y: 0,
119
- },
120
- size: {
121
- width: size.width,
122
- height: size.height,
123
- },
124
- };
125
- let tag_prefixed = `${scene_view_tag_prefix}.${tag}`;
126
- let router = core.ui.getRouter(tag_prefixed);
127
- if (!router) {
128
- core.ui.addRouter(tag_prefixed, "bg");
129
- router = core.ui.getRouter(tag_prefixed);
130
- }
131
- if (!router.length) {
132
- // @ts-ignore
133
- Async.nextTick(() => {
134
- // @ts-ignore
135
- router.push(scene_view_name, prop, routerStrategy !== null && routerStrategy !== void 0 ? routerStrategy : undefined);
136
- });
137
- }
138
- else {
139
- // @ts-ignore
140
- Async.nextTick(() => {
141
- // @ts-ignore
142
- router.update(prop, routerStrategy !== null && routerStrategy !== void 0 ? routerStrategy : undefined);
143
- });
144
- }
145
- }
146
- // with
147
- // at
148
- // wait
149
- // nowait
150
- function parseImgCommandFields(ctx) {
151
- let slicedArgs = JSON.parse(JSON.stringify(ctx.slicedArgs)); // TODO 深拷贝 性能
152
- // TODO 注意这里的代码超级高耦合
153
- let res = {
154
- strategy: null,
155
- wait: false,
156
- leftedArgs: slicedArgs,
157
- };
158
- // wait/nowait
159
- if (slicedArgs[slicedArgs.length - 1].str === "wait") {
160
- res.wait = true;
161
- slicedArgs.pop();
162
- }
163
- else if (slicedArgs[slicedArgs.length - 1].str === "nowait") {
164
- res.wait = false;
165
- slicedArgs.pop();
166
- }
167
- // parse long fields
168
- let keywords = ["with", "at"];
169
- let inTransforms = [];
170
- let outTransforms = [];
171
- while (true) {
172
- // console.log(`slicedArgs: ${JSON.stringify(slicedArgs)}`);
173
- let keyword_index = findLastIndex(slicedArgs, (slicedArg) => !slicedArg.isQuoted &&
174
- !slicedArg.isSquared &&
175
- keywords.includes(slicedArg.str));
176
- if (keyword_index === -1)
177
- break;
178
- let keyword = slicedArgs[keyword_index].str;
179
- let currentFieldArgs = slicedArgs.splice(keyword_index, slicedArgs.length - keyword_index);
180
- currentFieldArgs.shift();
181
- if (keyword === "at") {
182
- inTransforms.push(...Script.Utils.splitCommas(Script.Utils.joinSlicedArgs(currentFieldArgs)));
183
- }
184
- else if (keyword === "with") {
185
- let args = Script.Utils.parseHzsArgs(Script.Utils.joinSlicedArgs(currentFieldArgs));
186
- // console.log(`with args: ${JSON.stringify(args)}`);
187
- for (let i = 0; i < args.length; i++) {
188
- if (Array.isArray(args[i])) {
189
- // Annoymous Transition Tuple
190
- if (args[i].length > 2)
191
- throw `Invalid Annoymous Transition Tuple: ${JSON.stringify(args[i])}`;
192
- console.log(`Annoymous Transition Tuple: ${JSON.stringify(args[i])}`);
193
- if (args[i].length >= 1) {
194
- if (Array.isArray(args[i][0])) {
195
- outTransforms.push(...args[i][0]);
196
- }
197
- else {
198
- outTransforms.push(args[i][0]);
199
- }
200
- }
201
- if (args[i].length >= 2) {
202
- if (Array.isArray(args[i][1])) {
203
- inTransforms.push(...args[i][1]);
204
- }
205
- else {
206
- inTransforms.push(args[i][1]);
207
- }
208
- }
209
- }
210
- else {
211
- // Named Transition
212
- let transition = transform_plugin.getTransition(args[i]);
213
- if (!transition) {
214
- core.debug.log(`Transition ${args[i]} not found`);
215
- continue;
216
- }
217
- else {
218
- core.debug.log(`Transition ${args[i]} = ${JSON.stringify(transition)}`);
219
- inTransforms.push(...transition.inTransforms);
220
- outTransforms.push(...transition.outTransforms);
221
- }
222
- }
223
- }
224
- }
225
- }
226
- // let withField: WithField = {
227
- // outTransform: ctx.slicedArgs[withIndex + 1]?.str ?? null,
228
- // inTransform: ctx.slicedArgs[withIndex + 2]?.str ?? null,
229
- // };
230
- res.strategy = transform_plugin.createStrategy(outTransforms.length ? outTransforms : null, inTransforms.length ? inTransforms : null);
231
- return res;
232
- }
233
- function findLastIndex(array, predicator) {
234
- for (let i = array.length - 1; i >= 0; i--) {
235
- if (predicator(array[i])) {
236
- return i;
237
- }
238
- }
239
- return -1;
240
- }
241
- const slicedArgsToTransforms = (slicedArgs) => Script.Utils.joinSlicedArgs(slicedArgs)
242
- .split(",")
243
- .map((str) => str.trim())
244
- .filter((str) => str.length > 0);
245
- // type WithField = {
246
- // inTransform: string | null;
247
- // outTransform: string | null;
248
- // };
249
- }
1
+ // / <reference types="@zeppos/device-types" />
2
+ // import hmUI from "@zos/ui";
3
+ import { Async, Script } from "../../index.js";
4
+ export function img(core) {
5
+ let transform_plugin = core.plugins.get("transform");
6
+ if (!transform_plugin)
7
+ core.debug.log("[IMG Plugin] Info: Transform plugin not set up");
8
+ // show command
9
+ core.script.use((ctx, next) => {
10
+ if (ctx.rawtext.trim().split(" ")[0].toLowerCase() !== "show")
11
+ return next();
12
+ if (ctx.slicedArgs.length === 1)
13
+ throw `Show Command: incorrect amount of args`;
14
+ if (ctx.slicedArgs.length === 2)
15
+ throw `Show Command: incorrect amount of args`;
16
+ let parsedRes = parseImgCommandFields(ctx);
17
+ // update args to no fields
18
+ ctx.slicedArgs = parsedRes.leftedArgs;
19
+ let tag = ctx.slicedArgs[1].str;
20
+ let name_key = "";
21
+ for (let i = 1; i < ctx.slicedArgs.length; ++i) {
22
+ name_key += ctx.slicedArgs[i].str + " ";
23
+ }
24
+ name_key = name_key.trim().toLowerCase();
25
+ let path = core.storage.preloadedData.image.nameMap[name_key]?.[0];
26
+ if (!path)
27
+ throw `Show Command: image with name_key [${name_key}] not found `;
28
+ // let size = (hmUI as any).getImageInfo(path);
29
+ let size = core.platform.getImageInfo(path);
30
+ console.log(`IMG: path: ${path}, size: ${JSON.stringify(size)}`);
31
+ if (!size)
32
+ throw `Show Command: read size of [${path}] failed`;
33
+ showAction(tag, path, size, parsedRes.strategy);
34
+ });
35
+ function showAction(tag, path, size, routerStrategy) {
36
+ const show_view_tag_prefix = "hzengine.img";
37
+ const show_view_name = "fg_img";
38
+ let prop = {
39
+ imgPath: path,
40
+ offset: {
41
+ x: 0,
42
+ y: 0,
43
+ },
44
+ size: {
45
+ width: size.width,
46
+ height: size.height,
47
+ },
48
+ };
49
+ let tag_prefixed = `${show_view_tag_prefix}.${tag}`;
50
+ let router = core.ui.getRouter(tag_prefixed);
51
+ if (!router) {
52
+ core.ui.addRouter(tag_prefixed, "fg");
53
+ router = core.ui.getRouter(tag_prefixed);
54
+ }
55
+ Async.nextTick(() => {
56
+ // @ts-ignore
57
+ router.replace(show_view_name, prop, routerStrategy ?? undefined);
58
+ });
59
+ }
60
+ // hide command
61
+ core.script.use((ctx, next) => {
62
+ if (ctx.rawtext.trim().split(" ")[0].toLowerCase() !== "hide")
63
+ return next();
64
+ let parsedRes = parseImgCommandFields(ctx);
65
+ ctx.slicedArgs = parsedRes.leftedArgs;
66
+ if (ctx.slicedArgs.length !== 2) {
67
+ throw `Hide Command: incorrect amount of args`;
68
+ }
69
+ let tag = ctx.slicedArgs[1].str;
70
+ hideAction(tag, parsedRes.strategy);
71
+ });
72
+ function hideAction(tag, routerStrategy) {
73
+ const show_view_tag_prefix = "hzengine.img";
74
+ let tag_prefixed = `${show_view_tag_prefix}.${tag}`;
75
+ let router = core.ui.getRouter(tag_prefixed);
76
+ if (!router) {
77
+ throw `Hide Command: router with tag [${tag}] not found `;
78
+ }
79
+ Async.nextTick(() => {
80
+ router.clear(routerStrategy ?? undefined);
81
+ });
82
+ }
83
+ // scene command
84
+ core.script.use((ctx, next) => {
85
+ if (ctx.rawtext.trim().split(" ")[0].toLowerCase() !== "scene")
86
+ return next();
87
+ if (ctx.slicedArgs.length === 1)
88
+ throw `Scene Command: incorrect amount of args`;
89
+ if (ctx.slicedArgs.length === 2)
90
+ throw `Scene Command: incorrect amount of args`;
91
+ let parsedRes = parseImgCommandFields(ctx);
92
+ // update args to no fields
93
+ ctx.slicedArgs = parsedRes.leftedArgs;
94
+ let tag = ctx.slicedArgs[1].str;
95
+ let name_key = "";
96
+ for (let i = 1; i < ctx.slicedArgs.length; ++i) {
97
+ name_key += ctx.slicedArgs[i].str + " ";
98
+ }
99
+ name_key = name_key.trim().toLowerCase();
100
+ let path = core.storage.preloadedData.image.nameMap[name_key]?.[0];
101
+ if (!path)
102
+ throw `Scene Command: image with name_key [${name_key}] not found `;
103
+ // let size = (hmUI as any).getImageInfo(path);
104
+ let size = core.platform.getImageInfo(path);
105
+ if (!size)
106
+ throw `Scene Command: read size of [${path}] failed`;
107
+ sceneAction(tag, path, size, parsedRes.strategy);
108
+ });
109
+ function sceneAction(tag, path, size, routerStrategy) {
110
+ const scene_view_tag_prefix = "hzengine.img";
111
+ const scene_view_name = "bg_img";
112
+ let prop = {
113
+ imgPath: path,
114
+ offset: {
115
+ x: 0,
116
+ y: 0,
117
+ },
118
+ size: {
119
+ width: size.width,
120
+ height: size.height,
121
+ },
122
+ };
123
+ let tag_prefixed = `${scene_view_tag_prefix}.${tag}`;
124
+ let router = core.ui.getRouter(tag_prefixed);
125
+ if (!router) {
126
+ core.ui.addRouter(tag_prefixed, "bg");
127
+ router = core.ui.getRouter(tag_prefixed);
128
+ }
129
+ if (!router.length) {
130
+ // @ts-ignore
131
+ Async.nextTick(() => {
132
+ // @ts-ignore
133
+ router.push(scene_view_name, prop, routerStrategy ?? undefined);
134
+ });
135
+ }
136
+ else {
137
+ // @ts-ignore
138
+ Async.nextTick(() => {
139
+ // @ts-ignore
140
+ router.update(prop, routerStrategy ?? undefined);
141
+ });
142
+ }
143
+ }
144
+ // with
145
+ // at
146
+ // wait
147
+ // nowait
148
+ function parseImgCommandFields(ctx) {
149
+ let slicedArgs = JSON.parse(JSON.stringify(ctx.slicedArgs)); // TODO 深拷贝 性能
150
+ // TODO 注意这里的代码超级高耦合
151
+ let res = {
152
+ strategy: null,
153
+ wait: false,
154
+ leftedArgs: slicedArgs,
155
+ };
156
+ // wait/nowait
157
+ if (slicedArgs[slicedArgs.length - 1].str === "wait") {
158
+ res.wait = true;
159
+ slicedArgs.pop();
160
+ }
161
+ else if (slicedArgs[slicedArgs.length - 1].str === "nowait") {
162
+ res.wait = false;
163
+ slicedArgs.pop();
164
+ }
165
+ // parse long fields
166
+ let keywords = ["with", "at"];
167
+ let inTransforms = [];
168
+ let outTransforms = [];
169
+ while (true) {
170
+ // console.log(`slicedArgs: ${JSON.stringify(slicedArgs)}`);
171
+ let keyword_index = findLastIndex(slicedArgs, (slicedArg) => !slicedArg.isQuoted &&
172
+ !slicedArg.isSquared &&
173
+ keywords.includes(slicedArg.str));
174
+ if (keyword_index === -1)
175
+ break;
176
+ let keyword = slicedArgs[keyword_index].str;
177
+ let currentFieldArgs = slicedArgs.splice(keyword_index, slicedArgs.length - keyword_index);
178
+ currentFieldArgs.shift();
179
+ if (keyword === "at") {
180
+ inTransforms.push(...Script.Utils.splitCommas(Script.Utils.joinSlicedArgs(currentFieldArgs)));
181
+ }
182
+ else if (keyword === "with") {
183
+ let args = Script.Utils.parseHzsArgs(Script.Utils.joinSlicedArgs(currentFieldArgs));
184
+ // console.log(`with args: ${JSON.stringify(args)}`);
185
+ for (let i = 0; i < args.length; i++) {
186
+ if (Array.isArray(args[i])) {
187
+ // Annoymous Transition Tuple
188
+ if (args[i].length > 2)
189
+ throw `Invalid Annoymous Transition Tuple: ${JSON.stringify(args[i])}`;
190
+ console.log(`Annoymous Transition Tuple: ${JSON.stringify(args[i])}`);
191
+ if (args[i].length >= 1) {
192
+ if (Array.isArray(args[i][0])) {
193
+ outTransforms.push(...args[i][0]);
194
+ }
195
+ else {
196
+ outTransforms.push(args[i][0]);
197
+ }
198
+ }
199
+ if (args[i].length >= 2) {
200
+ if (Array.isArray(args[i][1])) {
201
+ inTransforms.push(...args[i][1]);
202
+ }
203
+ else {
204
+ inTransforms.push(args[i][1]);
205
+ }
206
+ }
207
+ }
208
+ else {
209
+ // Named Transition
210
+ let transition = transform_plugin.getTransition(args[i]);
211
+ if (!transition) {
212
+ core.debug.log(`Transition ${args[i]} not found`);
213
+ continue;
214
+ }
215
+ else {
216
+ core.debug.log(`Transition ${args[i]} = ${JSON.stringify(transition)}`);
217
+ inTransforms.push(...transition.inTransforms);
218
+ outTransforms.push(...transition.outTransforms);
219
+ }
220
+ }
221
+ }
222
+ }
223
+ }
224
+ // let withField: WithField = {
225
+ // outTransform: ctx.slicedArgs[withIndex + 1]?.str ?? null,
226
+ // inTransform: ctx.slicedArgs[withIndex + 2]?.str ?? null,
227
+ // };
228
+ res.strategy = transform_plugin.createStrategy(outTransforms.length ? outTransforms : null, inTransforms.length ? inTransforms : null);
229
+ return res;
230
+ }
231
+ function findLastIndex(array, predicator) {
232
+ for (let i = array.length - 1; i >= 0; i--) {
233
+ if (predicator(array[i])) {
234
+ return i;
235
+ }
236
+ }
237
+ return -1;
238
+ }
239
+ const slicedArgsToTransforms = (slicedArgs) => Script.Utils.joinSlicedArgs(slicedArgs)
240
+ .split(",")
241
+ .map((str) => str.trim())
242
+ .filter((str) => str.length > 0);
243
+ // type WithField = {
244
+ // inTransform: string | null;
245
+ // outTransform: string | null;
246
+ // };
247
+ }