@gamelearn/arcade-components 2.2.3 → 2.2.7

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 (23) hide show
  1. package/dist/components/auto-evaluation-component/components/AutoEvaluation.js +4 -2
  2. package/dist/components/cards-selector-puzzle-component/components/CardsSelectorPuzzleComponent.js +6 -3
  3. package/dist/components/chained-image-click-puzzle-component/components/CurrentImagePuzzle.js +20 -8
  4. package/dist/components/comic-component/components/ComicComponent.js +3 -4
  5. package/dist/components/conversational-pro-component/components/ConversationalProComponent.js +148 -49
  6. package/dist/components/conversational-pro-component/components/SlotList.js +6 -2
  7. package/dist/components/conversational-pro-component/components/scene/Panel.js +72 -10
  8. package/dist/components/conversational-pro-component/components/scene/Panels.js +3 -1
  9. package/dist/components/conversational-pro-component/components/scene/index.js +8 -1
  10. package/dist/components/dialog-component/components/DialogComponent.js +206 -81
  11. package/dist/components/feedback-component/components/FeedbackComponent.js +2 -3
  12. package/dist/components/frame-click-puzzle-component/components/CurrentFramePuzzle.js +16 -3
  13. package/dist/components/frame-click-puzzle-component/components/FrameClickPuzzleComponent.js +4 -2
  14. package/dist/components/image-click-wrapper-component/components/ImageClickWrapperComponent.js +9 -1
  15. package/dist/components/lectures-component/components/LecturesComponent.js +1 -1
  16. package/dist/components/survey-component/components/SurveyComponent.js +4 -2
  17. package/dist/components/terminal-puzzle-component/components/Visor/index.js +1 -1
  18. package/dist/components/test-component/components/Container.js +4 -3
  19. package/dist/components/test-component/components/TestComponent.js +11 -4
  20. package/dist/helpers/index.js +70 -4
  21. package/dist/helpers/mocker.js +1 -1
  22. package/dist/helpers/useEkho.js +20 -11
  23. package/package.json +1 -1
@@ -107,7 +107,9 @@ var SurveyComponent = function SurveyComponent(_ref) {
107
107
  };
108
108
 
109
109
  var View = PAGES[page].component;
110
- return /*#__PURE__*/_react.default.createElement("div", {
110
+ return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement("div", {
111
+ className: "survey--container__overlay"
112
+ }), /*#__PURE__*/_react.default.createElement("div", {
111
113
  className: "survey--container",
112
114
  dir: "auto"
113
115
  }, /*#__PURE__*/_react.default.createElement("div", {
@@ -153,7 +155,7 @@ var SurveyComponent = function SurveyComponent(_ref) {
153
155
  });
154
156
  },
155
157
  className: "gat--btn gat--btn__primary ".concat(disabled ? 'disabled' : '', " not-transition")
156
- }, translate('survey.finish')))));
158
+ }, translate('survey.finish'))))));
157
159
  };
158
160
 
159
161
  var _default = SurveyComponent;
@@ -120,8 +120,8 @@ var Visor = function Visor(_ref) {
120
120
  return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement("div", {
121
121
  className: "puzzle--terminal__visor"
122
122
  }, /*#__PURE__*/_react.default.createElement(_FeedbackComponent.default, {
123
- shortText: true,
124
123
  playSound: playSound,
124
+ shortText: true,
125
125
  success: fileId === solutionId,
126
126
  text: fileId === solutionId ? info.solution.right.desc : info.solution.wrong.desc,
127
127
  functionOnClose: fileId === solutionId ? resolvePuzzle : backFile,
@@ -47,7 +47,8 @@ var Container = function Container(_ref) {
47
47
  updateForm = _ref.updateForm,
48
48
  disabled = _ref.disabled,
49
49
  translate = _ref.translate,
50
- soundActions = _ref.soundActions;
50
+ soundActions = _ref.soundActions,
51
+ paused = _ref.paused;
51
52
 
52
53
  var _useState = (0, _react.useState)(0),
53
54
  _useState2 = _slicedToArray(_useState, 2),
@@ -65,7 +66,7 @@ var Container = function Container(_ref) {
65
66
  play = _soundActions[0];
66
67
 
67
68
  (0, _react.useEffect)(function () {
68
- if (time >= 0 && !disabled) {
69
+ if (time >= 0 && !disabled && !paused) {
69
70
  var timeout = setInterval(function () {
70
71
  if (!feedback) {
71
72
  setTime(function (t) {
@@ -80,7 +81,7 @@ var Container = function Container(_ref) {
80
81
  }
81
82
 
82
83
  return undefined;
83
- }, [disabled, feedback, saveInterval, setTime, time]);
84
+ }, [disabled, feedback, paused, saveInterval, setTime, time]);
84
85
 
85
86
  var nextPage = function nextPage() {
86
87
  play('click-ui');
@@ -52,7 +52,8 @@ var TestComponent = function TestComponent(_ref) {
52
52
  emitEvent = _ref.emitEvent,
53
53
  soundActions = _ref.soundActions,
54
54
  audio = _ref.audio,
55
- required = _ref.required;
55
+ required = _ref.required,
56
+ pause = _ref.pause;
56
57
  var questions = test.questions;
57
58
  var indicators = emitEvent({
58
59
  type: 'loadIndicators'
@@ -203,7 +204,10 @@ var TestComponent = function TestComponent(_ref) {
203
204
  setResult({});
204
205
  setTime(countdown.time);
205
206
  setTimeOver(false);
206
- playSound(audio.url, 'test_bg');
207
+
208
+ if (audio !== null && audio !== void 0 && audio.url) {
209
+ playSound(audio.url, 'test_bg');
210
+ }
207
211
  };
208
212
 
209
213
  var resultAnswers = Object.values(result);
@@ -239,7 +243,9 @@ var TestComponent = function TestComponent(_ref) {
239
243
  });
240
244
  };
241
245
 
242
- return /*#__PURE__*/_react.default.createElement("div", {
246
+ return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement("div", {
247
+ className: "test--container__overlay"
248
+ }), /*#__PURE__*/_react.default.createElement("div", {
243
249
  className: "test--container",
244
250
  dir: "auto"
245
251
  }, view !== 'results' ? /*#__PURE__*/_react.default.createElement(_Container.default, {
@@ -250,6 +256,7 @@ var TestComponent = function TestComponent(_ref) {
250
256
  tries: tries,
251
257
  answerPage: answerPage,
252
258
  setTime: setTime,
259
+ paused: pause,
253
260
  saveInterval: saveInterval,
254
261
  disabled: view !== 'test',
255
262
  answered: answeredPage || view !== 'test',
@@ -277,7 +284,7 @@ var TestComponent = function TestComponent(_ref) {
277
284
  timeOverText: countdown.text,
278
285
  emitEvent: emitEvent,
279
286
  soundActions: soundActions
280
- }));
287
+ })));
281
288
  };
282
289
 
283
290
  var _default = TestComponent;
@@ -3,18 +3,35 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.zAxis = exports.yAxis = exports.xAxis = exports.vectorTranslateZ = exports.vectorTranslateY = exports.vectorTranslateX = exports.vectorTranslateOnAxis = exports.vectorToScreen = exports.usePrevious = exports.screenToVector = exports.roundFloat = exports.getObjectPosition = exports.formatMessage = exports.executeCrossFade = exports.cameraFitAnyObject = void 0;
6
+ exports.zAxis = exports.yAxis = exports.xAxis = exports.vectorTranslateZ = exports.vectorTranslateY = exports.vectorTranslateX = exports.vectorTranslateOnAxis = exports.vectorToScreen = exports.usePrevious = exports.screenToVector = exports.roundFloat = exports.getRandomIndex = exports.getObjectPosition = exports.formatMessage = exports.executeTalkingAnimation = exports.executeCrossFade = exports.cameraFitAnyObject = void 0;
7
7
 
8
8
  var _react = require("react");
9
9
 
10
10
  var _three = require("three");
11
11
 
12
+ var _GLTFLoader = require("three/examples/jsm/loaders/GLTFLoader");
13
+
14
+ function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }
15
+
16
+ function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
17
+
18
+ function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
19
+
20
+ function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); }
21
+
22
+ function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }
23
+
24
+ function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
25
+
12
26
  var xAxis = new _three.Vector3(1, 0, 0);
13
27
  exports.xAxis = xAxis;
14
28
  var yAxis = new _three.Vector3(0, 1, 0);
15
29
  exports.yAxis = yAxis;
16
30
  var zAxis = new _three.Vector3(0, 0, 1);
17
31
  exports.zAxis = zAxis;
32
+ var crossFadeDuration = 0.2;
33
+ var bones = ['Jaw_M', 'Head_M', 'L_lip_jnt', 'HeadEnd_M', 'Neck_M', 'R_lip_jnt', 'joint4', 'transform1', 'lowerTeeths', 'upperTeeths'];
34
+ var loader = new _GLTFLoader.GLTFLoader();
18
35
 
19
36
  var formatMessage = function formatMessage(text) {
20
37
  var values = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
@@ -27,6 +44,12 @@ var formatMessage = function formatMessage(text) {
27
44
 
28
45
  exports.formatMessage = formatMessage;
29
46
 
47
+ var getRandomIndex = function getRandomIndex(length) {
48
+ return Math.floor(Math.random() * length);
49
+ };
50
+
51
+ exports.getRandomIndex = getRandomIndex;
52
+
30
53
  var usePrevious = function usePrevious(value) {
31
54
  var ref = (0, _react.useRef)();
32
55
  (0, _react.useEffect)(function () {
@@ -156,7 +179,7 @@ var setWeight = function setWeight(action, weight) {
156
179
  action.setEffectiveWeight(weight);
157
180
  };
158
181
 
159
- var executeCrossFade = function executeCrossFade(startAction, endAction, duration) {
182
+ var executeCrossFade = function executeCrossFade(startAction, endAction) {
160
183
  if (startAction === endAction) return;
161
184
  if (!startAction || !endAction) return;
162
185
  startAction.play();
@@ -164,8 +187,51 @@ var executeCrossFade = function executeCrossFade(startAction, endAction, duratio
164
187
  endAction.reset();
165
188
  endAction.time = 0;
166
189
  setWeight(endAction, 1);
167
- endAction.crossFadeFrom(startAction, duration, true);
190
+ endAction.crossFadeFrom(startAction, crossFadeDuration, true);
168
191
  endAction.play();
169
192
  };
170
193
 
171
- exports.executeCrossFade = executeCrossFade;
194
+ exports.executeCrossFade = executeCrossFade;
195
+
196
+ var executeTalkingAnimation = function executeTalkingAnimation(target, talkingURL) {
197
+ if (target) {
198
+ var tracks = [];
199
+ var _target$userData = target.userData,
200
+ mixer = _target$userData.mixer,
201
+ defaultAnim = _target$userData.defaultAnim;
202
+ var cloned = defaultAnim.clone();
203
+
204
+ var onLoad = function onLoad(anim) {
205
+ var _cloned$tracks;
206
+
207
+ if (anim) {
208
+ tracks.push.apply(tracks, _toConsumableArray(anim.animations[0].tracks.filter(function (track) {
209
+ return bones.find(function (bone) {
210
+ return track.name.includes(bone);
211
+ });
212
+ })));
213
+ }
214
+
215
+ cloned.tracks = cloned.tracks.filter(function (track) {
216
+ return !bones.find(function (bone) {
217
+ return track.name.includes(bone);
218
+ });
219
+ });
220
+
221
+ (_cloned$tracks = cloned.tracks).push.apply(_cloned$tracks, tracks);
222
+
223
+ target.userData.emotionClip = cloned;
224
+ var defaultAction = mixer.clipAction(defaultAnim, target);
225
+ var emotionAction = mixer.clipAction(cloned, target);
226
+ emotionAction.loop = _three.LoopPingPong;
227
+ mixer.stopAllAction();
228
+ executeCrossFade(defaultAction, emotionAction, crossFadeDuration);
229
+ };
230
+
231
+ loader.load(talkingURL, function (anim) {
232
+ onLoad(anim);
233
+ });
234
+ }
235
+ };
236
+
237
+ exports.executeTalkingAnimation = executeTalkingAnimation;
@@ -95,7 +95,7 @@ var soundActions = [function (sound) {
95
95
  var exSound = new Audio(sound);
96
96
  exSound.play();
97
97
  }
98
- }, function () {}];
98
+ }, function () {}, function () {}, function () {}];
99
99
  exports.soundActions = soundActions;
100
100
 
101
101
  var setShowPoints = function setShowPoints() {
@@ -35,6 +35,8 @@ var useEkho = function useEkho(_ref) {
35
35
  loop = _ref$loop === void 0 ? false : _ref$loop,
36
36
  _ref$started = _ref.started,
37
37
  started = _ref$started === void 0 ? true : _ref$started,
38
+ _ref$slide = _ref.slide,
39
+ slide = _ref$slide === void 0 ? 0 : _ref$slide,
38
40
  audio = _ref.audio,
39
41
  soundActions = _ref.soundActions,
40
42
  emitEvent = _ref.emitEvent,
@@ -45,11 +47,14 @@ var useEkho = function useEkho(_ref) {
45
47
  _ref$onError = _ref.onError,
46
48
  onError = _ref$onError === void 0 ? noop : _ref$onError,
47
49
  _ref$onStart = _ref.onStart,
48
- onStart = _ref$onStart === void 0 ? noop : _ref$onStart;
50
+ onStart = _ref$onStart === void 0 ? noop : _ref$onStart,
51
+ pauseTTS = _ref.pauseTTS;
49
52
 
50
- var _soundActions = _slicedToArray(soundActions, 2),
53
+ var _soundActions = _slicedToArray(soundActions, 4),
51
54
  playSound = _soundActions[0],
52
- stop = _soundActions[1];
55
+ stop = _soundActions[1],
56
+ pause = _soundActions[2],
57
+ resume = _soundActions[3];
53
58
 
54
59
  var noAudio = !audio && !voice;
55
60
 
@@ -91,20 +96,17 @@ var useEkho = function useEkho(_ref) {
91
96
  var setCurrentPlaying = (0, _react.useCallback)(function (url) {
92
97
  var cc = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'tts';
93
98
 
94
- if (currentPlaying.current.url === url) {
99
+ if (currentPlaying.current.url === url && slide === currentPlaying.current.slide) {
95
100
  return;
96
101
  }
97
102
 
98
103
  currentPlaying.current = {
99
104
  url: url,
100
- cc: cc
105
+ cc: cc,
106
+ slide: slide
101
107
  };
102
- onStart({
103
- url: url,
104
- cc: cc
105
- });
106
- playSound(url, cc, loop, volume, onFinish);
107
- }, [onStart, playSound, loop, onFinish, volume]);
108
+ playSound(url, cc, loop, volume, onFinish, onStart);
109
+ }, [slide, playSound, loop, volume, onFinish, onStart]);
108
110
  var playSpeech = (0, _react.useCallback)( /*#__PURE__*/function () {
109
111
  var _ref3 = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee(payload) {
110
112
  var url;
@@ -163,6 +165,13 @@ var useEkho = function useEkho(_ref) {
163
165
  stopCurrentAudio();
164
166
  };
165
167
  }, [stopCurrentAudio]);
168
+ (0, _react.useEffect)(function () {
169
+ if (pauseTTS) {
170
+ pause();
171
+ } else {
172
+ resume();
173
+ }
174
+ }, [pause, pauseTTS, resume]);
166
175
  (0, _react.useEffect)(function () {
167
176
  if (noAudio) {
168
177
  stopCurrentAudio();
package/package.json CHANGED
@@ -2,7 +2,7 @@
2
2
  "name": "@gamelearn/arcade-components",
3
3
  "author": "Gamelearn",
4
4
  "license": "unlicense",
5
- "version": "2.2.3",
5
+ "version": "2.2.7",
6
6
  "main": "dist/index.js",
7
7
  "files": [
8
8
  "dist",