@gamelearn/arcade-components 2.17.12 → 2.18.0

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.
@@ -63,6 +63,9 @@ var ChainedImageClickPuzzleComponent = function ChainedImageClickPuzzleComponent
63
63
  payload: puzzleId
64
64
  });
65
65
  }, [emitEvent, puzzleId]);
66
+ var totalCorrects = list.reduce(function (acc, current) {
67
+ return acc + current.areas.length;
68
+ }, 0);
66
69
  var currentPuzzleProps = {
67
70
  list: list,
68
71
  description: description,
@@ -79,11 +82,9 @@ var ChainedImageClickPuzzleComponent = function ChainedImageClickPuzzleComponent
79
82
  slidesCompleted: slidesCompleted,
80
83
  setSlidesCompleted: setSlidesCompleted,
81
84
  loadPuzzleStatus: loadPuzzleStatus,
82
- keyboardControl: keyboardControl
85
+ keyboardControl: keyboardControl,
86
+ totalCorrects: totalCorrects
83
87
  };
84
- var totalCorrects = list.reduce(function (acc, current) {
85
- return acc + current.areas.length;
86
- }, 0);
87
88
  return /*#__PURE__*/_react.default.createElement("div", {
88
89
  className: "puzzle--image__click"
89
90
  }, showFrames ? /*#__PURE__*/_react.default.createElement("div", {
@@ -62,7 +62,8 @@ var CurrentImageClickPuzzle = function CurrentImageClickPuzzle(_ref) {
62
62
  setIndex = _ref.setIndex,
63
63
  slidesCompleted = _ref.slidesCompleted,
64
64
  setSlidesCompleted = _ref.setSlidesCompleted,
65
- keyboardControl = _ref.keyboardControl;
65
+ keyboardControl = _ref.keyboardControl,
66
+ totalCorrects = _ref.totalCorrects;
66
67
  var accRewards = (0, _react.useRef)([]);
67
68
  var correctClicked = (0, _react.useRef)(0);
68
69
  var currentSelected = (0, _react.useRef)(0);
@@ -160,6 +161,10 @@ var CurrentImageClickPuzzle = function CurrentImageClickPuzzle(_ref) {
160
161
  }, [slidesCompleted, specificFeedbacks, currentImageProps.hasClickOnce, currentImageProps.areas.length, currentImageProps.hasClickOrder, selected, setSelected, index, list.length, setSlidesCompleted, handleFinish, setIndex, emitEvent]);
161
162
 
162
163
  var onResolve = function onResolve() {
164
+ if (index >= list.length - 1) {
165
+ setSelected(totalCorrects);
166
+ }
167
+
163
168
  playSound('score');
164
169
  emitEvent({
165
170
  type: 'puzzleAction',
@@ -178,10 +183,10 @@ var CurrentImageClickPuzzle = function CurrentImageClickPuzzle(_ref) {
178
183
  }));
179
184
  }, [info, puzzleId, setInfo]);
180
185
  (0, _react.useEffect)(function () {
181
- if (loadPuzzleStatus) {
182
- onComplete([], true, true);
186
+ if (loadPuzzleStatus && index !== list.length - 1) {
187
+ onComplete([], true, false);
183
188
  }
184
- }, [slidesCompleted, loadPuzzleStatus, onComplete]);
189
+ }, [index, list.length, loadPuzzleStatus, onComplete]);
185
190
 
186
191
  var checkSelectedAreas = function checkSelectedAreas() {
187
192
  var areasSelected = currentImageProps.hasClickOnce ? currentImageProps.areas.length : 1;
@@ -1,13 +1,11 @@
1
1
  "use strict";
2
2
 
3
- function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); }
4
-
5
3
  Object.defineProperty(exports, "__esModule", {
6
4
  value: true
7
5
  });
8
6
  exports.default = void 0;
9
7
 
10
- var _react = _interopRequireWildcard(require("react"));
8
+ var _react = _interopRequireDefault(require("react"));
11
9
 
12
10
  var _arcadeThreeCore = require("@gamelearn/arcade-three-core");
13
11
 
@@ -15,19 +13,11 @@ var _SpeechBubbleComponent = _interopRequireDefault(require("./SpeechBubbleCompo
15
13
 
16
14
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
17
15
 
18
- function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
19
-
20
- function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
21
-
22
16
  var BubbleWrapper = function BubbleWrapper(_ref) {
23
17
  var currentMessage = _ref.currentMessage,
24
18
  translate = _ref.translate;
25
- var group = (0, _react.useRef)();
26
- var bubble = (0, _react.useRef)();
27
19
  var container = document.querySelector('.screens--container');
28
- return /*#__PURE__*/_react.default.createElement("group", {
29
- ref: group
30
- }, /*#__PURE__*/_react.default.createElement(_arcadeThreeCore.HtmlPro, {
20
+ return /*#__PURE__*/_react.default.createElement("group", null, /*#__PURE__*/_react.default.createElement(_arcadeThreeCore.HtmlPro, {
31
21
  onOcclude: function onOcclude() {
32
22
  return null;
33
23
  },
@@ -45,7 +35,6 @@ var BubbleWrapper = function BubbleWrapper(_ref) {
45
35
  }
46
36
  }, /*#__PURE__*/_react.default.createElement(_SpeechBubbleComponent.default, {
47
37
  translate: translate,
48
- ref: bubble,
49
38
  message: currentMessage
50
39
  })));
51
40
  };
@@ -37,12 +37,6 @@ function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "functio
37
37
 
38
38
  function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
39
39
 
40
- function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
41
-
42
- function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
43
-
44
- function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
45
-
46
40
  function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }
47
41
 
48
42
  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."); }
@@ -51,6 +45,12 @@ function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && iter[Symb
51
45
 
52
46
  function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }
53
47
 
48
+ function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
49
+
50
+ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
51
+
52
+ function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
53
+
54
54
  function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
55
55
 
56
56
  function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
@@ -116,12 +116,11 @@ var DialogComponent = function DialogComponent(_ref) {
116
116
  camera = _useThree2[0],
117
117
  scene = _useThree2[1];
118
118
 
119
- var changedMats = (0, _react.useRef)([]);
120
-
121
119
  var _useTimeout = (0, _useTimeout2.default)(),
122
120
  start = _useTimeout.start,
123
121
  stop = _useTimeout.stop;
124
122
 
123
+ var changedMats = (0, _react.useRef)([]);
125
124
  var loader = (0, _react.useMemo)(function () {
126
125
  return new _GLTFLoader.GLTFLoader();
127
126
  }, []);
@@ -149,6 +148,7 @@ var DialogComponent = function DialogComponent(_ref) {
149
148
  voiceOver = _ref2.voiceOver,
150
149
  decision = _ref2.decision;
151
150
 
151
+ var lastTalking = (0, _react.useRef)({});
152
152
  var talkingCharacter = currentLineData === null || currentLineData === void 0 ? void 0 : (_currentLineData$slot = currentLineData.slots) === null || _currentLineData$slot === void 0 ? void 0 : _currentLineData$slot.find(function (slot) {
153
153
  return slot.talking;
154
154
  });
@@ -428,6 +428,7 @@ var DialogComponent = function DialogComponent(_ref) {
428
428
  }
429
429
  }, [currentLineData === null || currentLineData === void 0 ? void 0 : currentLineData.id, edges, finishConversation, lines]);
430
430
  var backLine = (0, _react.useCallback)(function () {
431
+ lastTalking.current = _objectSpread({}, talkingCharacter);
431
432
  resetTalkingAnimation();
432
433
  setAudioFailed(false);
433
434
 
@@ -439,8 +440,9 @@ var DialogComponent = function DialogComponent(_ref) {
439
440
  });
440
441
  changeLine(line - 1);
441
442
  }
442
- }, [handleBranchDirection, isBranched, lastLine, line]);
443
+ }, [handleBranchDirection, isBranched, lastLine, line, talkingCharacter]);
443
444
  var nextLine = (0, _react.useCallback)(function (choice, reset) {
445
+ lastTalking.current = _objectSpread({}, talkingCharacter);
444
446
  resetTalkingAnimation();
445
447
  setEdgesHistory([].concat(_toConsumableArray(edgesHistory), [currentLineData.id]));
446
448
  setAudioFailed(false);
@@ -459,7 +461,7 @@ var DialogComponent = function DialogComponent(_ref) {
459
461
  } else if (currentLineData.decision) {
460
462
  finishConversation();
461
463
  }
462
- }, [currentLineData === null || currentLineData === void 0 ? void 0 : currentLineData.decision, isBranched, line, lines.length, handleDecisionBranch, handleBranchDirection, finishConversation]);
464
+ }, [currentLineData === null || currentLineData === void 0 ? void 0 : currentLineData.decision, isBranched, line, lines.length, handleDecisionBranch, handleBranchDirection, finishConversation, talkingCharacter]);
463
465
 
464
466
  var manualBackLine = function manualBackLine() {
465
467
  setAutomatic(false);
@@ -507,19 +509,16 @@ var DialogComponent = function DialogComponent(_ref) {
507
509
  }
508
510
  }, [edges, isBranched, lines, mounted]);
509
511
 
510
- var moveBubble = function moveBubble(element, showArrowTop) {
512
+ var moveBubble = function moveBubble(element) {
513
+ if (lastTalking.current.uid === element.uid) return;
511
514
  var target = new _three.Object3D();
512
- element.updateMatrix();
513
- element.updateMatrixWorld();
514
515
  var head = element.getObjectByName('Head_M');
515
516
  head.updateMatrixWorld();
516
- head.getWorldPosition(target.position);
517
+ target.applyMatrix4(head.matrixWorld);
517
518
  target.applyQuaternion(camera.quaternion);
518
- var distance = camera.position.distanceTo(target.position);
519
- var staticDisplay = distance > 70 && !zoomInActor && !showArrowTop;
520
519
  var yDistance = zoomInActor ? 2.5 : 2;
521
520
  var xDistance = zoomInActor ? 1.2 : 1.5;
522
- target.translateY(staticDisplay || showArrowTop ? 0 : yDistance);
521
+ target.translateY(yDistance);
523
522
  target.translateX(xDistance); // Check if character is left or right in the screen
524
523
 
525
524
  var vector = new _three.Vector3();
@@ -532,9 +531,6 @@ var DialogComponent = function DialogComponent(_ref) {
532
531
  parent: element,
533
532
  isLeft: isLeft
534
533
  };
535
- return {
536
- distance: distance
537
- };
538
534
  }; // Position bubble over talking character/and switch emotions
539
535
 
540
536
 
@@ -588,17 +584,8 @@ var DialogComponent = function DialogComponent(_ref) {
588
584
 
589
585
  if (element && !lastSet.current) {
590
586
  loadEmotion(talkingCharacter, element, function (mixer, action, defaultAction) {
591
- var startAction = element.userData.lastEmotion ? element.userData.lastEmotion : defaultAction;
592
-
593
- if (startAction && action && startAction !== action) {
594
- mixer.stopAllAction();
595
- (0, _helpers.executeCrossFade)(startAction, action, crossFadeDuration);
596
- element.userData.defaultAnim = action.getClip();
597
- }
598
-
599
587
  if (talkingCharacter.uid === element.uid) {
600
- var showArrowTop = talkingCharacter.text.length > maxCharacterToSwitch;
601
- moveBubble(element, showArrowTop);
588
+ moveBubble(element);
602
589
 
603
590
  var setMessage = function setMessage() {
604
591
  var _talkingCharacter$cha5;
@@ -620,6 +607,14 @@ var DialogComponent = function DialogComponent(_ref) {
620
607
  setMessage();
621
608
  }
622
609
  }
610
+
611
+ var startAction = element.userData.lastEmotion ? element.userData.lastEmotion : defaultAction;
612
+
613
+ if (startAction && action && startAction !== action) {
614
+ mixer.stopAllAction();
615
+ (0, _helpers.executeCrossFade)(startAction, action, crossFadeDuration);
616
+ element.userData.defaultAnim = action.getClip();
617
+ }
623
618
  });
624
619
  } else {
625
620
  var _talkingCharacter$cha6;
@@ -769,7 +764,7 @@ var DialogComponent = function DialogComponent(_ref) {
769
764
  } else if (zoomStarted.current) {
770
765
  zoomStarted.current = false;
771
766
  }
772
- }, [animationRunning]);
767
+ }, [animationRunning, camera]);
773
768
  var disableBackButton = (0, _react.useMemo)(function () {
774
769
  var disabled = line === 0 || previousLineWasDecision();
775
770
  return disabled;
@@ -67,7 +67,8 @@ var CurrentFramePuzzle = function CurrentFramePuzzle(_ref) {
67
67
  resetValues = _ref.resetValues,
68
68
  setResetValues = _ref.setResetValues,
69
69
  pause = _ref.pause,
70
- keyboardControl = _ref.keyboardControl;
70
+ keyboardControl = _ref.keyboardControl,
71
+ totalCorrects = _ref.totalCorrects;
71
72
 
72
73
  var _soundActions = _slicedToArray(soundActions, 1),
73
74
  playSound = _soundActions[0];
@@ -154,6 +155,10 @@ var CurrentFramePuzzle = function CurrentFramePuzzle(_ref) {
154
155
  }
155
156
  }, [framesCompleted, specificFeedbacks === null || specificFeedbacks === void 0 ? void 0 : (_specificFeedbacks$co2 = specificFeedbacks.correctFeedbacks) === null || _specificFeedbacks$co2 === void 0 ? void 0 : _specificFeedbacks$co2.length, props.hasClickOnce, props.areas.length, props.hasClickOrder, setRewards, selected, puzzlesAutoCompleted, setSelected, index, list.length, setFramesCompleted, setIndex, handleFinish, emitEvent]);
156
157
  var handleResolve = (0, _react.useCallback)(function () {
158
+ if (index >= list.length - 1) {
159
+ setSelected(totalCorrects);
160
+ }
161
+
157
162
  playSound('score');
158
163
  emitEvent({
159
164
  type: 'hidePuzzleButtons',
@@ -167,10 +172,11 @@ var CurrentFramePuzzle = function CurrentFramePuzzle(_ref) {
167
172
  action: 'resolve',
168
173
  payload: {
169
174
  element: puzzleId,
170
- rewards: info.resolve.rewards
175
+ rewards: info.resolve.rewards,
176
+ finish: index + 1 >= list.length
171
177
  }
172
178
  });
173
- }, [playSound, emitEvent, setPuzzlesAutoCompleted, puzzleId, info.resolve.rewards, index]);
179
+ }, [index, list.length, playSound, emitEvent, setPuzzlesAutoCompleted, puzzleId, info.resolve.rewards, setSelected, totalCorrects]);
174
180
  var handleResetPuzzle = (0, _react.useCallback)(function () {
175
181
  setFramesCompleted({});
176
182
  correctClicked.current = 0;
@@ -178,10 +184,10 @@ var CurrentFramePuzzle = function CurrentFramePuzzle(_ref) {
178
184
  emitResetPuzzle();
179
185
  }, [emitResetPuzzle, setFramesCompleted]);
180
186
  (0, _react.useEffect)(function () {
181
- if (loadPuzzleStatus) {
182
- onComplete([], true, true);
187
+ if (loadPuzzleStatus && index !== list.length - 1) {
188
+ onComplete([], true, false);
183
189
  }
184
- }, [framesCompleted, loadPuzzleStatus, onComplete]);
190
+ }, [framesCompleted, index, list.length, loadPuzzleStatus, onComplete]);
185
191
 
186
192
  var checkSelectedAreas = function checkSelectedAreas() {
187
193
  var areasSelected = props.hasClickOnce ? props.areas.length : 1;
@@ -173,7 +173,8 @@ var FrameImageClickComponent = function FrameImageClickComponent(_ref) {
173
173
  puzzlesAutoCompleted: puzzlesAutoCompleted,
174
174
  emitOpenPopupCounterInfo: onInitPuzzle,
175
175
  pause: pause,
176
- keyboardControl: keyboardControl
176
+ keyboardControl: keyboardControl,
177
+ totalCorrects: totalCorrects
177
178
  };
178
179
  return /*#__PURE__*/_react.default.createElement("div", {
179
180
  className: "puzzle-frame"
@@ -469,15 +469,18 @@ var ImageClickWrapperComponent = function ImageClickWrapperComponent(props) {
469
469
  }, [createStartAndEndDate, defaultCompleted, firstTryForFrame, puzzlesAutoCompleted, slideNumber, timer]);
470
470
  (0, _react.useEffect)(function () {
471
471
  if (timer && countDownTime === 0) feedbackError();
472
- }, [countDownTime, feedbackError, timer]);
472
+ }, [countDownTime, feedbackError, timer]); // only for frameclick
473
+
473
474
  (0, _react.useEffect)(function () {
474
- if (pause) {
475
- clearIntervalForCountDown();
476
- pauseTheCounter();
477
- } else {
478
- startCountDown();
475
+ if (timer) {
476
+ if (pause) {
477
+ clearIntervalForCountDown();
478
+ pauseTheCounter();
479
+ } else {
480
+ startCountDown();
481
+ }
479
482
  }
480
- }, [clearIntervalForCountDown, listenerForActualDate, pause, pauseTheCounter, startCountDown]);
483
+ }, [clearIntervalForCountDown, listenerForActualDate, pause, pauseTheCounter, startCountDown, timer]);
481
484
  return /*#__PURE__*/_react.default.createElement("div", {
482
485
  className: className
483
486
  }, feedbackData.show ? /*#__PURE__*/_react.default.createElement(_FeedbackComponent.default, {
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.17.12",
5
+ "version": "2.18.0",
6
6
  "main": "dist/index.js",
7
7
  "files": [
8
8
  "dist",
@@ -14,7 +14,7 @@
14
14
  },
15
15
  "dependencies": {
16
16
  "@babel/runtime": "^7.18.6",
17
- "@gamelearn/arcade-styles": "2.11.2",
17
+ "@gamelearn/arcade-styles": "2.12.0",
18
18
  "@gamelearn/arcade-three-core": "1.17.2",
19
19
  "@react-three/drei": "9.4.3",
20
20
  "@react-three/fiber": "8.0.17",
@@ -22,7 +22,7 @@
22
22
  "@testing-library/react": "^13.1.1",
23
23
  "@testing-library/user-event": "13.5.0",
24
24
  "global": "^4.4.0",
25
- "gsap": "^3.10.1",
25
+ "gsap": "^3.11.4",
26
26
  "hls.js": "0.12.4",
27
27
  "html-react-parser": "^1.4.0",
28
28
  "interactjs": "^1.10.11",