@shijiu/jsview-vue 2.2.35 → 2.2.128

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.
Files changed (77) hide show
  1. package/bin/browser/BrowserApic.vue.mjs +2 -1
  2. package/bin/browser/BrowserApic2.vue.mjs +2 -1
  3. package/bin/browser/BrowserApicLib.mjs +2 -1
  4. package/bin/browser/BrowserQrcode.vue.mjs +3 -1
  5. package/bin/browser/BrowserTextureAnim.vue.mjs +7 -6
  6. package/bin/jsview-vue.mjs +1557 -894
  7. package/bin/types/JsViewEngineWidget/MetroWidget/Slide.d.ts +21 -0
  8. package/bin/types/JsViewEngineWidget/TemplateParser/MetroTemplate.d.ts +2 -8
  9. package/bin/types/JsViewEngineWidget/WidgetCommon.d.ts +9 -3
  10. package/bin/types/JsViewVueTools/ConstSymbol.d.ts +2 -0
  11. package/bin/types/JsViewVueTools/ForgeConstDefine.d.ts +11 -0
  12. package/bin/types/JsViewVueTools/JsvRuntimeBridge.d.ts +113 -57
  13. package/bin/types/JsViewVueTools/JsvTextureStore/CapturedTexture/CapturedTexture.d.ts +11 -0
  14. package/bin/types/JsViewVueTools/JsvTextureStore/Texture.d.ts +8 -0
  15. package/bin/types/JsViewVueWidget/JsvConnectLine/JsvConnectLine.vue.d.ts +1 -1
  16. package/bin/types/JsViewVueWidget/JsvFreeMoveActor/ActionRefObject.d.ts +4 -0
  17. package/bin/types/JsViewVueWidget/JsvFreeMoveActor/ActorControl.d.ts +65 -0
  18. package/bin/types/JsViewVueWidget/JsvFreeMoveActor/ActorState.d.ts +6 -0
  19. package/bin/types/JsViewVueWidget/JsvFreeMoveActor/CallbackManager.d.ts +11 -0
  20. package/bin/types/JsViewVueWidget/JsvFreeMoveActor/ForgeTypeDefine.d.ts +15 -0
  21. package/bin/types/JsViewVueWidget/JsvFreeMoveActor/FreeMoveActor.vue.d.ts +6 -0
  22. package/bin/types/JsViewVueWidget/JsvFreeMoveActor/SetAction.d.ts +71 -0
  23. package/bin/types/JsViewVueWidget/JsvFreeMoveActor/SetCondition.d.ts +95 -0
  24. package/bin/types/JsViewVueWidget/JsvFreeMoveActor/SetState.d.ts +62 -0
  25. package/bin/types/JsViewVueWidget/JsvFreeMoveActor/index.d.ts +2 -1
  26. package/bin/types/JsViewVueWidget/JsvLine/JsvLine.vue.d.ts +1 -1
  27. package/bin/types/JsViewVueWidget/JsvNativeSharedDiv.vue.d.ts +66 -28
  28. package/bin/types/JsViewVueWidget/JsvNinePatch.vue.d.ts +1 -0
  29. package/bin/types/JsViewVueWidget/JsvScrollBox/JsvScrollBox.vue.d.ts +176 -0
  30. package/bin/types/JsViewVueWidget/JsvScrollBox/ScrollSymbol.d.ts +7 -0
  31. package/bin/types/JsViewVueWidget/JsvScrollBox/index.d.ts +1 -0
  32. package/bin/types/JsViewVueWidget/JsvTextBox.vue.d.ts +3 -3
  33. package/bin/types/JsViewVueWidget/index.d.ts +1 -0
  34. package/package.json +1 -1
  35. package/utils/JsViewEngineWidget/MetroWidget/MetroWidget.vue +10 -1
  36. package/utils/JsViewEngineWidget/MetroWidget/MetroWidgetSetup.js +398 -309
  37. package/utils/JsViewEngineWidget/MetroWidget/RenderItem.ts +2 -1
  38. package/utils/JsViewEngineWidget/MetroWidget/Slide.ts +56 -0
  39. package/utils/JsViewEngineWidget/MetroWidget/TaskManager.ts +51 -10
  40. package/utils/JsViewEngineWidget/MetroWidget/TokenGenerator.ts +10 -0
  41. package/utils/JsViewEngineWidget/TemplateParser/ListMetroTemplate.ts +9 -3
  42. package/utils/JsViewEngineWidget/TemplateParser/MetroTemplate.ts +25 -35
  43. package/utils/JsViewEngineWidget/WidgetCommon.ts +20 -7
  44. package/utils/JsViewPlugin/JsvPlayer/BrowserJsvPlayer.vue +13 -1
  45. package/utils/JsViewPlugin/JsvPlayer/JsvPlayer.vue +470 -338
  46. package/utils/JsViewVueTools/ConstSymbol.ts +3 -0
  47. package/utils/JsViewVueTools/ForgeConstDefine.ts +11 -0
  48. package/utils/JsViewVueTools/JsvRuntimeBridge.js +172 -50
  49. package/utils/JsViewVueTools/JsvTextureStore/CapturedTexture/CapturedTexture.ts +62 -0
  50. package/utils/JsViewVueTools/JsvTextureStore/JsvTextureStore.ts +41 -7
  51. package/utils/JsViewVueTools/JsvTextureStore/Texture.ts +15 -1
  52. package/utils/JsViewVueTools/index.js +2 -0
  53. package/utils/JsViewVueWidget/JsvApic/JsvApic/BrowserApic.vue +6 -6
  54. package/utils/JsViewVueWidget/JsvApic/JsvApic2/BrowserApic2.vue +5 -6
  55. package/utils/JsViewVueWidget/JsvApic/JsvBrowserApicLib/ApicDataBase.js +5 -1
  56. package/utils/JsViewVueWidget/JsvFreeMoveActor/ActionRefObject.ts +1 -1
  57. package/utils/JsViewVueWidget/JsvFreeMoveActor/ActorControl.ts +23 -1
  58. package/utils/JsViewVueWidget/JsvFreeMoveActor/ActorState.ts +4 -4
  59. package/utils/JsViewVueWidget/JsvFreeMoveActor/CallbackManager.ts +6 -6
  60. package/utils/JsViewVueWidget/JsvFreeMoveActor/ForgeTypeDefine.ts +1 -1
  61. package/utils/JsViewVueWidget/JsvFreeMoveActor/FreeMoveActor.vue +43 -9
  62. package/utils/JsViewVueWidget/JsvFreeMoveActor/SetAction.ts +24 -0
  63. package/utils/JsViewVueWidget/JsvFreeMoveActor/SetCondition.ts +50 -1
  64. package/utils/JsViewVueWidget/JsvFreeMoveActor/SetState.ts +56 -0
  65. package/utils/JsViewVueWidget/JsvFreeMoveActor/index.js +3 -0
  66. package/utils/JsViewVueWidget/JsvMaskClipDiv.vue +6 -1
  67. package/utils/JsViewVueWidget/JsvNativeSharedDiv.vue +121 -68
  68. package/utils/JsViewVueWidget/JsvNinePatch.vue +4 -1
  69. package/utils/JsViewVueWidget/JsvPosterImage.vue +22 -9
  70. package/utils/JsViewVueWidget/JsvQrcode/BrowserQrcode.vue +6 -2
  71. package/utils/JsViewVueWidget/JsvScrollBox/JsvScrollBox.vue +309 -0
  72. package/utils/JsViewVueWidget/JsvScrollBox/ScrollSymbol.ts +15 -0
  73. package/utils/JsViewVueWidget/JsvScrollBox/index.js +2 -0
  74. package/utils/JsViewVueWidget/JsvTextBox.vue +12 -4
  75. package/utils/JsViewVueWidget/JsvTextureAnim/BrowserTextureAnim.vue +9 -6
  76. package/utils/JsViewVueWidget/JsvTextureAnim/JsvTextureAnim.vue +2 -0
  77. package/utils/JsViewVueWidget/index.js +1 -0
@@ -6,14 +6,14 @@
6
6
  * @Description: file content
7
7
  -->
8
8
  <script setup>
9
- import {
10
- Viewer,
11
- WebpData,
12
- GifData
13
- } from "../JsvBrowserApicLib/BrowserApicLib";
9
+ import { Viewer, WebpData, GifData } from "../JsvBrowserApicLib/BrowserApicLib";
14
10
  import { LoopType } from "../JsvCommonLoopToolBase";
15
11
  import { onMounted, shallowRef } from "vue";
16
12
 
13
+ const renderDocument = window.JsvCode.Dom.RenderDocument
14
+ ? window.JsvCode.Dom.RenderDocument
15
+ : window.JsvCode.Dom.BrowserDocument;
16
+
17
17
  const loadImage = (url) => {
18
18
  return new Promise((resolve, reject) => {
19
19
  let xhr = new XMLHttpRequest();
@@ -89,7 +89,7 @@ onMounted(() => {
89
89
  let domLayoutView = canvasProxyRef.value.jsvGetProxyView();
90
90
  domLayoutView.RegisterOnProxyReady(() => {
91
91
  // 制作canvas
92
- let canvas = window.originDocument.createElement("canvas");
92
+ let canvas = renderDocument.createElement("canvas");
93
93
  canvas.style.width = props.style.width + "px";
94
94
  canvas.style.height = props.style.height + "px";
95
95
  domLayoutView.HtmlGetElement().appendChild(canvas);
@@ -6,15 +6,14 @@
6
6
  * @Description: file content
7
7
  -->
8
8
  <script setup>
9
- import {
10
- Viewer,
11
- WebpData,
12
- GifData
13
- } from "../JsvBrowserApicLib/BrowserApicLib";
9
+ import { Viewer, WebpData, GifData } from "../JsvBrowserApicLib/BrowserApicLib";
14
10
  import { LoopType } from "../JsvCommonLoopToolBase.js";
15
11
  import { onMounted, shallowRef } from "vue";
16
12
 
17
13
  let waitForPlayInfo = null;
14
+ const renderDocument = window.JsvCode.Dom.RenderDocument
15
+ ? window.JsvCode.Dom.RenderDocument
16
+ : window.JsvCode.Dom.BrowserDocument;
18
17
 
19
18
  const loadImage = (url) => {
20
19
  return new Promise((resolve, reject) => {
@@ -71,7 +70,7 @@ onMounted(() => {
71
70
  let domLayoutView = canvasProxyRef.value.jsvGetProxyView();
72
71
  domLayoutView.RegisterOnProxyReady(() => {
73
72
  // 制作canvas
74
- let canvas = window.originDocument.createElement("canvas");
73
+ let canvas = renderDocument.createElement("canvas");
75
74
  canvas.style.width = props.style.width + "px";
76
75
  canvas.style.height = props.style.height + "px";
77
76
  domLayoutView.HtmlGetElement().appendChild(canvas);
@@ -6,13 +6,17 @@
6
6
  * @Description: file content
7
7
  */
8
8
 
9
+ const renderDocument = window.JsvCode.Dom.RenderDocument
10
+ ? window.JsvCode.Dom.RenderDocument
11
+ : window.JsvCode.Dom.BrowserDocument;
12
+
9
13
  class ApicDataBase {
10
14
  constructor(arrayBuffer) {
11
15
  this.LoopCount = 0;
12
16
  this.FrameCount = 0;
13
17
  this.Width = 0;
14
18
  this.Height = 0;
15
- this._Canvas = window.originDocument.createElement("canvas");
19
+ this._Canvas = renderDocument.createElement("canvas");
16
20
  this._Context = this._Canvas.getContext("2d");
17
21
  this._DecodedData = null;
18
22
  this.decode(arrayBuffer);
@@ -1,6 +1,6 @@
1
1
 
2
2
 
3
3
  export default class ActionRefObject {
4
- public token: number;
4
+ public token: number = 0;
5
5
  public used: boolean = false;
6
6
  }
@@ -18,6 +18,7 @@ class ActorControl {
18
18
  private _BindAnim: any;
19
19
  private _Callbacks: CallbackManager;
20
20
  private _SelfNexusRecv: NexusNode;
21
+ private _SizeMode: Boolean = false;
21
22
 
22
23
  private _SharedQuickConditionPackBuilder: ConditionPackBuilder;
23
24
  private _SharedQuickActionPackBuilder: ActionPackBuilder;
@@ -33,6 +34,14 @@ class ActorControl {
33
34
  this._StatePackBuilder = new StatePackBuilder();
34
35
  }
35
36
 
37
+ asSizeMode() {
38
+ if (this._BindAnim != null) {
39
+ console.error("error: asSizeMode should call before bindForgeView");
40
+ } else {
41
+ this._SizeMode = true;
42
+ }
43
+ }
44
+
36
45
  // debugGetAnimId() {
37
46
  // return this._BindAnim?.AnimNativeId;
38
47
  // }
@@ -140,6 +149,16 @@ class ActorControl {
140
149
  return this._StatePackBuilder;
141
150
  }
142
151
 
152
+ getBindedAnim() {
153
+ this._EnsureAnim();
154
+ return this._BindAnim;
155
+ }
156
+
157
+ getBindedView() {
158
+ this._EnsureAnim();
159
+ return this._BindView;
160
+ }
161
+
143
162
  _OnEchoEvent(retJson: string) {
144
163
  // 遇到layout后仍然会因为新broadcast有动作时,一帧中可能会有多次回调
145
164
  let retJsonObject: any = JSON.parse(retJson);
@@ -158,7 +177,10 @@ class ActorControl {
158
177
 
159
178
  _EnsureAnim() {
160
179
  if (!this._BindAnim) {
161
- this._BindAnim = new FreeMoveAnimClass(this._OnEchoEvent.bind(this), this._SelfNexusRecv.token);
180
+ this._BindAnim = new FreeMoveAnimClass(
181
+ this._OnEchoEvent.bind(this),
182
+ this._SelfNexusRecv.token,
183
+ this._SizeMode);
162
184
  this._BindView.StartAnimation(this._BindAnim);
163
185
  }
164
186
  }
@@ -1,6 +1,6 @@
1
1
  export default class ActorState {
2
- public xPos: number;
3
- public yPos: number;
4
- public xSpd: number;
5
- public ySpd: number;
2
+ public xPos: number = 0;
3
+ public yPos: number = 0;
4
+ public xSpd: number = 0;
5
+ public ySpd: number = 0;
6
6
  }
@@ -8,9 +8,9 @@
8
8
  import { StateCmdBuilder } from "./ForgeTypeDefine"
9
9
 
10
10
  class CallbackInfo {
11
- public funcRef: Function; // 回调函数
12
- public times: number; // 回调的次数
13
- public once: boolean; // 是否单次回调就销毁
11
+ public funcRef!: Function; // 回调函数
12
+ public times: number = 0; // 回调的次数
13
+ public once: boolean = false; // 是否单次回调就销毁
14
14
  }
15
15
 
16
16
  class CallbackManager {
@@ -49,9 +49,9 @@ class CallbackManager {
49
49
  }
50
50
  }
51
51
 
52
- public invokeCallback(id: string, actorState: Object,
53
- customDataStr: string | null | undefined,
54
- nexusCustomDataStr:string | null | undefined) {
52
+ public invokeCallback(id: string, actorState: Object,
53
+ customDataStr: string | null | undefined,
54
+ nexusCustomDataStr: string | null | undefined) {
55
55
  let callbackObj = this._CallbackMap.get(id);
56
56
  if (callbackObj) {
57
57
  if (callbackObj.once) {
@@ -5,7 +5,7 @@
5
5
  * @Description: file content
6
6
  */
7
7
 
8
- import { Forge } from "@shijiu/jsview/dom/jsv-forge-define";
8
+ import { Forge } from "@shijiu/jsview/dom/jsv-forge-define.mjs";
9
9
 
10
10
  // 此文件声明来自engine-js的api和类型声明
11
11
 
@@ -7,16 +7,43 @@
7
7
 
8
8
  <!--
9
9
  * 【模块 export 内容】
10
- * JsvFreeMoveActor:单轴(X 或 Y)运动控制控件,可控制完成单方向的匀速运动和变速运动(抛物运动),
11
- * 若想进行X和Y轴同时的运动,可以通过运动分解后的两个JsvActorMove进行组合来实现
12
- * props说明:
10
+ * JsvFreeMoveActor/JsvFreeMoveDiv:
11
+ * 帧动画控制组件,通过control
12
+ * .action() 单一运动指令,新指令发生时会冲掉旧指令
13
+ * .condition() 条件设置,有时间维度,X/Y维度
14
+ * .state() 状态调整指令
13
15
  *
16
+ * props说明:
17
+ * class: String, 等同于div的class设置(目前未实装,后续支持...)
18
+ * style: Object, 等同于div的style设置
19
+ * 特别注意: 在sizeMode模式下,非hidden,控制的是background/image的展示区域,
20
+ * overflow:hidden时,控制的是剪切区域,展示区域保持最初的width/height
21
+ * sizeMode: Boolean, 从控制div左上角坐标的模式改为改为通过div矩形宽高
22
+ * (指令控制右下角坐标,实现对[0,0]->[右下角x,y]的矩形的宽高调整,另外,不支持负坐标)
23
+ * expose说明:
24
+ * control: Object 控制器句柄,具体参考 ActorControl
14
25
  -->
15
26
  <script setup>
16
27
  import ActControl from "./ActorControl.ts";
17
28
  import { shallowRef, onMounted } from "vue";
18
29
 
19
30
  const props = defineProps({
31
+ // div的style设置,
32
+ // 其中top, left会作用于父节点,其余内容作用于子节点
33
+ // width和height在size模式下为初始尺寸
34
+ // 例如backgroundColor/backgroundImage/overflowHidden
35
+ style: {
36
+ type: Object,
37
+ default: {},
38
+ },
39
+
40
+ // 动画转而控制width/height,而不是x,y
41
+ sizeMode: {
42
+ default: false,
43
+ type: Boolean,
44
+ },
45
+
46
+ // Deprecated
20
47
  // 设置给父节点,动画节点必须top/left为0, 以保证PC端模拟通过style直接获取当前位置信息的逻辑能通过
21
48
  top: {
22
49
  default: 0,
@@ -27,7 +54,9 @@ const props = defineProps({
27
54
  type: Number,
28
55
  },
29
56
 
30
- // 设置给实际的动画节点
57
+ // Deprecated
58
+ // 设置给实际的动画节点, 在size模式下为初始尺寸
59
+ // 可能会被style.width, style.height替代
31
60
  width: {
32
61
  default: 0,
33
62
  type: Number,
@@ -40,9 +69,13 @@ const props = defineProps({
40
69
 
41
70
  let mainDivRef = shallowRef(null);
42
71
  let controller = new ActControl();
72
+ if (props.sizeMode) {
73
+ // 启用size模式
74
+ controller.asSizeMode();
75
+ }
43
76
 
44
77
  onMounted(() => {
45
- controller.bindForgeView(mainDivRef.value.jsvGetProxyView());
78
+ controller.bindForgeView(mainDivRef.value.jsvGetProxyView(true));
46
79
  });
47
80
 
48
81
  defineExpose({
@@ -53,17 +86,18 @@ defineExpose({
53
86
  <template>
54
87
  <div
55
88
  :style="{
56
- top: props.top,
57
- left: props.left,
89
+ top: props.style.top ? props.style.top : props.top,
90
+ left: props.style.left ? props.style.left : props.left,
58
91
  }"
59
92
  >
60
93
  <div
61
94
  ref="mainDivRef"
62
95
  :style="{
63
- top: 0,
64
- left: 0,
65
96
  width: props.width,
66
97
  height: props.height,
98
+ ...props.style,
99
+ top: 0,
100
+ left: 0,
67
101
  }"
68
102
  >
69
103
  <slot></slot>
@@ -479,6 +479,30 @@ class ActorPackBuilder {
479
479
  return CmdPackBuilder.InitActCmdPack(this._SpeedKeeps, this._AccKeeps, this._NexusRecv?.token, cmdList);
480
480
  }
481
481
 
482
+ /**
483
+ * ackMovementSync
484
+ * 只能放在 movementSync 的then中,用于将Sync同步信息按比例转化成
485
+ * (注意): 如果触发链条上有自己发出的信息,则将不再产生动作,规避循环触发
486
+ *
487
+ * @param {int} left 运动识别区域的left, 可以为负
488
+ * @param {int} top 运动识别区域的top, 可以为负
489
+ * @param {int} right 运动识别区域的right, 可以为负,必须大于left
490
+ * @param {int} bottom 运动识别区域的bottom, 可以为负,必须大于bottom
491
+ * @param {int} xyEnable x,y是否都触发, 0b01对应x, 0b10对应y, 可以或运算在一起
492
+ * @param {int} syncType 换算公式:
493
+ * 1: 正比公式:selfPercent = givenPercent
494
+ * 2: 反比公式:selfPercent = (1 - givenPercent)
495
+ */
496
+ ackMovementSync(left: number, top: number, right: number, bottom: number, xyEnable: number, syncType: number) {
497
+ if (!this._BasicPreProcess("ackMovementSync")) {
498
+ return;
499
+ }
500
+
501
+ let cmdList: Array<Object> = [];
502
+ cmdList.push(ActionCmdBuilder.AckMovementSync(left, top, right, bottom, xyEnable, syncType));
503
+ return CmdPackBuilder.InitActCmdPack(this._SpeedKeeps, this._AccKeeps, this._NexusRecv?.token, cmdList);
504
+ }
505
+
482
506
  _BuildAccelOnPole(
483
507
  builderThis: ActorPackBuilder,
484
508
  cmdList: Array<Object>,
@@ -88,7 +88,7 @@ class ConditionPackBuilder {
88
88
  return this._BuildPack(ConditionSetBuilder.WallPosition(direction, xPosition, yPosition, this._CommonInfo));
89
89
  }
90
90
 
91
- boxPosition(left: UNumber, top: UNumber, right: UNumber, bottom: UNumber): object | null {
91
+ boxPosition(left: UNumber, top: UNumber, right: UNumber, bottom: UNumber): any {
92
92
  if (!this._CheckCommonInfo()) {
93
93
  return null;
94
94
  }
@@ -277,6 +277,11 @@ class ConditionPackBuilder {
277
277
  return this._BuildPack(ConditionSetBuilder.OnFlingDrop(this._CommonInfo, this._ContorlSlefNexus.token));
278
278
  }
279
279
 
280
+ /**
281
+ * touchCount
282
+ * 当touchDown时,Count会++,用于解决多次touchDown引发的时序问题
283
+ * 当native的count计数等于给定的参数设定的count时,触发condition
284
+ */
280
285
  touchCount(count: number) {
281
286
  if (!this._CheckCommonInfo()) {
282
287
  return null;
@@ -285,6 +290,50 @@ class ConditionPackBuilder {
285
290
  return this._BuildPack(ConditionSetBuilder.TouchCount(this._CommonInfo, count));
286
291
  }
287
292
 
293
+ /**
294
+ * onMovement
295
+ * 当FreeMove块移动时,移动了给定的距离值后触发条件, 给定的距离值由sensitivity定义
296
+ *
297
+ * @param {float} xSensitivity x轴的敏感度设置,表示移动了多少像素时就触发条件, 最小值为1
298
+ * @param {float} ySensitivity y轴的敏感度设置,表示移动了多少像素时就触发条件, undefined时等于xSensitivity
299
+ * @param {int} xyEnables x,y两轴哪个生效, 0b1 为x, 0b10 为y, 默认为都enable
300
+ */
301
+ onMovement(xSensitivity: number,
302
+ ySensitivity: number | undefined = undefined,
303
+ xyEnables: number | undefined = undefined) {
304
+ if (!this._CheckCommonInfo()) {
305
+ return null;
306
+ }
307
+ this._CommonInfoValid = false;
308
+
309
+ if (!xSensitivity || xSensitivity < 1) {
310
+ xSensitivity = 1;
311
+ }
312
+
313
+ if (typeof ySensitivity == "undefined") {
314
+ ySensitivity = xSensitivity;
315
+ xyEnables = 0b11;
316
+ }
317
+
318
+ if (typeof xyEnables == "undefined") {
319
+ xyEnables = 0b11;
320
+ }
321
+
322
+ return this._BuildPack(ConditionSetBuilder.OnMovement(
323
+ this._CommonInfo,
324
+ xSensitivity, ySensitivity, xyEnables));
325
+ }
326
+
327
+ movementSync(nexusRef: NexusNode) {
328
+ if (!this._CheckCommonInfo()) {
329
+ return null;
330
+ }
331
+ this._CommonInfoValid = false;
332
+ return this._BuildPack(ConditionSetBuilder.MovementSyncNexus(this._CommonInfo,
333
+ nexusRef?.token ? nexusRef.token : 0,
334
+ ));
335
+ }
336
+
288
337
  _CheckCommonInfo(): boolean {
289
338
  if (!this._CommonInfoValid) {
290
339
  console.error("Error: must call from new conditoin()");
@@ -1,6 +1,7 @@
1
1
 
2
2
  import { StateCmdBuilder, CmdPackBuilder } from "./ForgeTypeDefine"
3
3
  import { NexusNode } from "./NexusNode";
4
+ import ActorControl from "./ActorControl";
4
5
 
5
6
  class StatePackBuilder {
6
7
  constructor() {
@@ -99,6 +100,61 @@ class StatePackBuilder {
99
100
  fireNexusEvent(nexusRecv: NexusNode, detailEventType: number) {
100
101
  return CmdPackBuilder.InitStateCmdPack(StateCmdBuilder.FireNexusEvent(detailEventType, nexusRecv.token));
101
102
  }
103
+
104
+ /**
105
+ * setTouchAttractChild
106
+ *
107
+ * 绑定一个子view中的FreeMoveDiv
108
+ * 当Touch触控到本div时,这个子div会立刻移动到手指按下的位置,并接受焦点
109
+ *
110
+ * @param {ActorControl} otherFreeMoveControl 其他FreeMoveDiv的control对象
111
+ */
112
+ setTouchAttractChild(otherFreeMoveControl: ActorControl) {
113
+ if (otherFreeMoveControl) {
114
+ let animRef = otherFreeMoveControl.getBindedAnim();
115
+ return CmdPackBuilder.InitStateCmdPack(StateCmdBuilder.SetTouchAttractChild(animRef));
116
+ } else {
117
+ return CmdPackBuilder.InitStateCmdPack(StateCmdBuilder.SetTouchAttractChild(null));
118
+ }
119
+ }
120
+
121
+ /**
122
+ * startMovementSync
123
+ *
124
+ * 发出进度同步信号(可以一个FreeMove绑定多个信号发生器,但目前场景估计只需要一个发生器即可)
125
+ * 计算当前freeMove的postion和运动识别区域的比值
126
+ * xPercent = (xPos - left) / (right - left)
127
+ * yPercent = (yPos - top) / (bottom - top)
128
+ * x和y可以为负数,也可能>100%
129
+ *
130
+ * 当多次调用时,nexusRef相同时,则为更新运动识别区域,nexusRef不同时则为新建信号发起器
131
+ *
132
+ * @param {NexusNode} nexusRef 绑定的nexus句柄,接受者用这个句柄来进行监听
133
+ * @param {int} left 运动识别区域的left, 可以为负
134
+ * @param {int} top 运动识别区域的top, 可以为负
135
+ * @param {int} right 运动识别区域的right, 可以为负,必须大于left
136
+ * @param {int} bottom 运动识别区域的bottom, 可以为负,必须大于bottom
137
+ * @param {int} xyEnable x,y是否都触发, 0b01对应x, 0b10对应y, 可以或运算在一起
138
+ */
139
+ startMovementSync(nexusRef: NexusNode, left: number, top: number, right: number, bottom: number, xyEnable: number) {
140
+ return CmdPackBuilder.InitStateCmdPack(StateCmdBuilder.StartMovementSync(
141
+ nexusRef?.token ? nexusRef.token : 0,
142
+ left,
143
+ top,
144
+ right,
145
+ bottom,
146
+ xyEnable));
147
+ }
148
+
149
+ /*
150
+ * stopMovementSync
151
+ *
152
+ * 停止由startMovementSync发起的的同步信号
153
+ * 目前阶段,为关闭所有的信号发起器
154
+ */
155
+ stopMovementSync() {
156
+ return CmdPackBuilder.InitStateCmdPack(StateCmdBuilder.StopMovementSync());
157
+ }
102
158
  }
103
159
 
104
160
  export default StatePackBuilder;
@@ -3,6 +3,7 @@ import { ActEventDefine } from "./ForgeTypeDefine.ts"
3
3
  import { default as KeepFlags } from "./KeepFlags.ts"
4
4
  import JsvEnvBlocker from "./JsvEnvBlocker.vue"
5
5
  import { newNexus } from "./NexusNode"
6
+ import { default as ActControlDebug } from "./ActorControl.ts"
6
7
 
7
8
  let FreeMoveDef = {
8
9
  ActEventDefine,
@@ -11,10 +12,12 @@ let FreeMoveDef = {
11
12
 
12
13
  let FreeMoveFunc = {
13
14
  newNexus,
15
+ ActControlDebug
14
16
  }
15
17
 
16
18
  export {
17
19
  JsvFreeMoveActor,
20
+ JsvFreeMoveActor as JsvFreeMoveDiv,
18
21
  JsvEnvBlocker,
19
22
  FreeMoveDef,
20
23
  FreeMoveFunc
@@ -14,6 +14,11 @@
14
14
  <script>
15
15
  import { Forge, ForgeExtension } from "@shijiu/jsview/dom/jsv-forge-define";
16
16
  import ForgeHandles from "../JsViewVueTools/ForgeHandles";
17
+
18
+ const renderDocument = window.JsvCode.Dom.RenderDocument
19
+ ? window.JsvCode.Dom.RenderDocument
20
+ : window.JsvCode.Dom.BrowserDocument;
21
+
17
22
  export default {
18
23
  props: {
19
24
  class: {
@@ -112,7 +117,7 @@ export default {
112
117
  this.$refs.innerViewDiv
113
118
  ?.jsvGetProxyView(true)
114
119
  .RegisterOnProxyReady(() => {
115
- const canvas = window.originDocument.createElement("canvas");
120
+ const canvas = renderDocument.createElement("canvas");
116
121
  canvas.style.width = _this.style.width + "px";
117
122
  canvas.style.height = _this.style.height + "px";
118
123
  _this.$refs.innerViewDiv