@gamelearn/arcade-components 2.2.11 → 2.3.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.
@@ -175,10 +175,10 @@ var CardsSelectorPuzzleComponent = function CardsSelectorPuzzleComponent(_ref) {
175
175
 
176
176
  if (pickedCard !== null && pickedCard !== void 0 && pickedCard.desc) {
177
177
  setFeedBackText(pickedCard.desc);
178
- setFeedbackIsShown(true);
179
178
  }
180
179
  }
181
180
 
181
+ setFeedbackIsShown(true);
182
182
  playSound('score');
183
183
  emitEvent({
184
184
  type: 'hidePuzzleButtons',
@@ -19,41 +19,30 @@ function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "functio
19
19
 
20
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
21
 
22
- var cleanStyle = {
23
- width: '100vw',
24
- height: '100vh',
25
- position: 'static'
26
- };
27
-
28
22
  var BubbleWrapper = function BubbleWrapper(_ref) {
29
- var onLoad = _ref.onLoad,
30
- position = _ref.position,
31
- currentMessage = _ref.currentMessage;
23
+ var currentMessage = _ref.currentMessage,
24
+ translate = _ref.translate;
32
25
  var group = (0, _react.useRef)();
33
26
  var bubble = (0, _react.useRef)();
34
-
35
- var onBubbleBuild = function onBubbleBuild() {
36
- onLoad(group, bubble);
37
- };
38
-
39
27
  var container = document.querySelector('.screens--container');
40
28
  return /*#__PURE__*/_react.default.createElement("group", {
41
- ref: group,
42
- position: position
29
+ ref: group
43
30
  }, /*#__PURE__*/_react.default.createElement(_arcadeThreeCore.HtmlPro, {
44
31
  zIndexRange: [5, 5],
45
- calculatePosition: currentMessage.inScene ? undefined : function () {
46
- return [0, 0];
47
- },
48
32
  portal: container ? {
49
33
  current: container
50
34
  } : undefined,
51
- style: currentMessage.inScene ? {
35
+ style: {
36
+ width: '100vw',
37
+ height: '100vh',
52
38
  position: 'static'
53
- } : cleanStyle
39
+ },
40
+ calculatePosition: function calculatePosition() {
41
+ return [0, 0];
42
+ }
54
43
  }, /*#__PURE__*/_react.default.createElement(_SpeechBubbleComponent.default, {
44
+ translate: translate,
55
45
  ref: bubble,
56
- onLoad: onBubbleBuild,
57
46
  message: currentMessage
58
47
  })));
59
48
  };
@@ -23,8 +23,6 @@ var _decisionComponent = _interopRequireDefault(require("../../decision-componen
23
23
 
24
24
  var _helpers = require("../../../helpers");
25
25
 
26
- var _deviceDetection = require("../../../helpers/deviceDetection");
27
-
28
26
  var _useTimeout2 = _interopRequireDefault(require("../../../helpers/useTimeout"));
29
27
 
30
28
  var _useEkho = _interopRequireDefault(require("../../../helpers/useEkho"));
@@ -67,8 +65,9 @@ function _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Sy
67
65
 
68
66
  function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
69
67
 
68
+ // import { DeviceDetection } from '../../../helpers/deviceDetection';
70
69
  // Global
71
- var isMobile = (0, _deviceDetection.DeviceDetection)();
70
+ // const isMobile = DeviceDetection();
72
71
  var crossFadeDuration = 0.2;
73
72
  var characterMs = 75;
74
73
  var minMs = 1400;
@@ -128,8 +127,6 @@ var DialogComponent = function DialogComponent(_ref) {
128
127
  start = _useTimeout.start,
129
128
  stop = _useTimeout.stop;
130
129
 
131
- var bubbleRef = (0, _react.useRef)();
132
- var groupRef = (0, _react.useRef)();
133
130
  var loader = (0, _react.useMemo)(function () {
134
131
  return new _GLTFLoader.GLTFLoader();
135
132
  }, []);
@@ -168,8 +165,6 @@ var DialogComponent = function DialogComponent(_ref) {
168
165
  var _useState13 = (0, _react.useState)({
169
166
  text: '',
170
167
  name: '',
171
- left: false,
172
- top: false,
173
168
  inScene: false,
174
169
  thinkful: false,
175
170
  voiceOver: false,
@@ -244,13 +239,13 @@ var DialogComponent = function DialogComponent(_ref) {
244
239
  var _slot$character, _slot$character$resou;
245
240
 
246
241
  var object = actors.find(function (element) {
247
- if (element.uid === slot.uid) {
242
+ if ((element === null || element === void 0 ? void 0 : element.uid) === (slot === null || slot === void 0 ? void 0 : slot.uid)) {
248
243
  return element;
249
244
  }
250
245
 
251
246
  return '';
252
247
  });
253
- return ((_slot$character = slot.character) === null || _slot$character === void 0 ? void 0 : (_slot$character$resou = _slot$character.resource) === null || _slot$character$resou === void 0 ? void 0 : _slot$character$resou.url) || (object === null || object === void 0 ? void 0 : object.completeUrl) || '';
248
+ return (slot === null || slot === void 0 ? void 0 : (_slot$character = slot.character) === null || _slot$character === void 0 ? void 0 : (_slot$character$resou = _slot$character.resource) === null || _slot$character$resou === void 0 ? void 0 : _slot$character$resou.url) || (object === null || object === void 0 ? void 0 : object.completeUrl) || '';
254
249
  }, [actors]); // Move to three core?
255
250
 
256
251
  var loadEmotion = (0, _react.useCallback)(function (slot, element) {
@@ -527,12 +522,11 @@ var DialogComponent = function DialogComponent(_ref) {
527
522
  setCurrentMessage({
528
523
  text: currentLineData === null || currentLineData === void 0 ? void 0 : currentLineData.text,
529
524
  name: (currentLineData === null || currentLineData === void 0 ? void 0 : currentLineData.alias) || (currentLineData === null || currentLineData === void 0 ? void 0 : currentLineData.name) || "[ ".concat(translate('storylines.misc.voiceOver'), " ]"),
530
- left: false,
531
525
  inScene: false,
532
526
  voiceOver: true,
533
527
  thinkful: false,
534
528
  top: false,
535
- avatar: '',
529
+ avatar: getAvatarURL(talkingCharacter),
536
530
  show: true
537
531
  });
538
532
  } else if (!lastSet.current) {
@@ -591,17 +585,12 @@ var DialogComponent = function DialogComponent(_ref) {
591
585
  setTimeout(function () {
592
586
  var _talkingCharacter$cha5;
593
587
 
594
- var _moveBubble = moveBubble(element, showArrowTop),
595
- distance = _moveBubble.distance;
596
-
597
588
  setCurrentMessage({
598
589
  text: talkingCharacter.text,
599
590
  name: talkingCharacter.alias || ((_talkingCharacter$cha5 = talkingCharacter.character) === null || _talkingCharacter$cha5 === void 0 ? void 0 : _talkingCharacter$cha5.name),
600
- left: true,
601
- top: showArrowTop || distance > 70,
602
591
  inScene: true,
603
592
  thinkful: talkingCharacter.emotion === 'thinkful',
604
- avatar: '',
593
+ avatar: getAvatarURL(talkingCharacter),
605
594
  show: true
606
595
  });
607
596
  }, zoomInActor ? 1200 : 0);
@@ -691,53 +680,7 @@ var DialogComponent = function DialogComponent(_ref) {
691
680
  return function () {
692
681
  stop();
693
682
  };
694
- }, [currentMessage, nextLine, start, stop, currentLineData === null || currentLineData === void 0 ? void 0 : currentLineData.audioType, autoPlayCond, audio, voice, audioFailed]); // Positioning Bubble Message logic
695
-
696
- var checkBubbleBounds = (0, _react.useCallback)(function (group, bubble) {
697
- groupRef.current = group === null || group === void 0 ? void 0 : group.current;
698
- bubbleRef.current = bubble === null || bubble === void 0 ? void 0 : bubble.current;
699
-
700
- if (currentLineData !== null && currentLineData !== void 0 && currentLineData.slots && currentMessage.show && bubble !== null && bubble !== void 0 && bubble.current) {
701
- var bubbleRect = bubble.current.getBoundingClientRect();
702
- var x = bubbleRect.x + bubbleRect.width;
703
- var y = bubbleRect.y - bubbleRect.height;
704
-
705
- if (!messagePosition.current.isLeft && zoomInActor || (x < 0 || x > window.innerWidth) && currentMessage.inScene) {
706
- var child = messagePosition.current.child;
707
-
708
- if (child) {
709
- var target = new _three.Object3D();
710
- child.getWorldPosition(target.position);
711
- group.current.position.copy(target.position);
712
- group.current.updateMatrixWorld();
713
- var dividerWidth = bubbleRect.width > 250 ? 4 : 2.75;
714
- var divider = isMobile ? 10 : dividerWidth;
715
- var distanceX = bubbleRect.width + bubbleRect.width / divider;
716
- bubble.current.parentNode.style.transform = "translate3d(-".concat(distanceX, "px, -").concat(bubbleRect.height, "px, 0px)");
717
- bubbleRect = bubble.current.getBoundingClientRect();
718
- var completeOutside = x > window.innerWidth + bubbleRect.width || y < -bubbleRect.height || y > window.innerHeight || x < -bubbleRect.width || bubbleRect.x < 10;
719
-
720
- if (completeOutside) {
721
- bubble.current.parentNode.style.transform = '';
722
- messagePosition.current.child = null;
723
- messagePosition.current.parent = null;
724
- }
725
-
726
- setCurrentMessage(function (old) {
727
- return _objectSpread(_objectSpread({}, old), {}, {
728
- left: false,
729
- top: false,
730
- inScene: !completeOutside,
731
- avatar: getAvatarURL(talkingCharacter),
732
- show: true
733
- });
734
- });
735
- }
736
- } else {
737
- bubble.current.parentNode.style.transform = '';
738
- }
739
- }
740
- }, [camera.quaternion, currentLineData === null || currentLineData === void 0 ? void 0 : currentLineData.slots, currentMessage.inScene, getAvatarURL]);
683
+ }, [currentMessage, nextLine, start, stop, currentLineData === null || currentLineData === void 0 ? void 0 : currentLineData.audioType, autoPlayCond, audio, voice, audioFailed]);
741
684
  (0, _react.useEffect)(function () {
742
685
  if (animationRunning) {
743
686
  var cam = camera;
@@ -750,9 +693,7 @@ var DialogComponent = function DialogComponent(_ref) {
750
693
  }
751
694
 
752
695
  var mult = messagePosition.current.isLeft ? -1 : 1;
753
- var headSpace = headSize * mult; // move bubble
754
-
755
- messagePosition.current.pos[0] -= headSpace;
696
+ var headSpace = headSize * mult;
756
697
  animationTarget.current.translateX(-10 * mult + headSpace);
757
698
  animationTarget.current.translateY(-2);
758
699
  animationTarget.current.translateZ(30);
@@ -796,10 +737,6 @@ var DialogComponent = function DialogComponent(_ref) {
796
737
  object.material.visible = true;
797
738
  });
798
739
  }
799
-
800
- if (bubbleRef.current && groupRef.current) {
801
- checkBubbleBounds(groupRef, bubbleRef);
802
- }
803
740
  }
804
741
  });
805
742
  var container = document.querySelector('.screens--container');
@@ -843,9 +780,8 @@ var DialogComponent = function DialogComponent(_ref) {
843
780
  }
844
781
 
845
782
  return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, currentMessage.text ? /*#__PURE__*/_react.default.createElement(_BubbleWrapper.default, {
846
- position: messagePosition.current.pos,
847
- currentMessage: currentMessage,
848
- onLoad: checkBubbleBounds
783
+ translate: translate,
784
+ currentMessage: currentMessage
849
785
  }) : null, /*#__PURE__*/_react.default.createElement(_arcadeThreeCore.HtmlPro, {
850
786
  style: {
851
787
  width: '100vw',
@@ -27,7 +27,7 @@ function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
27
27
 
28
28
  var SpeechBubbleComponent = /*#__PURE__*/_react.default.forwardRef(function (_ref, ref) {
29
29
  var message = _ref.message,
30
- onLoad = _ref.onLoad;
30
+ translate = _ref.translate;
31
31
 
32
32
  var _useState = (0, _react.useState)(false),
33
33
  _useState2 = _slicedToArray(_useState, 2),
@@ -51,32 +51,33 @@ var SpeechBubbleComponent = /*#__PURE__*/_react.default.forwardRef(function (_re
51
51
 
52
52
  (0, _react.useLayoutEffect)(function () {
53
53
  if (!mounted) {
54
- onLoad();
55
54
  setMounted(true);
56
55
  }
57
- }, [onLoad, mounted]);
56
+ }, [mounted]);
58
57
  return /*#__PURE__*/_react.default.createElement("div", {
59
58
  dir: "auto",
60
59
  ref: ref,
61
- className: "\n speech-bubble\n ".concat(message.left && message.inScene ? 'speech-bubble--arrow-left' : '', "\n ").concat(!message.left && message.inScene ? 'speech-bubble--arrow-right' : '', "\n ").concat(message.top && message.inScene ? 'arrow-top' : '', "\n ").concat(message.thinkful || message.voiceOver ? 'speech-bubble--italic' : '', "\n ")
60
+ className: "\n speech-bubble\n ".concat(!message.inScene || message.voiceOver ? 'speech-bubble--outOfScene' : '', "\n ").concat(message.thinkful ? 'speech-bubble--italic' : '', "\n ")
62
61
  }, /*#__PURE__*/_react.default.createElement("div", {
63
- className: "speech-bubble__content"
64
- }, /*#__PURE__*/_react.default.createElement("div", {
65
- className: "speech-bubble__header"
62
+ className: "speech-bubble__header ".concat(message.thinkful ? 'speech-bubble__header--thinking' : '')
66
63
  }, message.thinkful ? /*#__PURE__*/_react.default.createElement("div", {
64
+ className: "thinking-icon-wrap"
65
+ }, /*#__PURE__*/_react.default.createElement("div", {
67
66
  className: "icon-bubble-thinkful-black"
68
- }) : null, message.voiceOver ? /*#__PURE__*/_react.default.createElement("div", {
69
- className: "icon-narrator"
70
- }) : null, !message.inScene && message.avatar ? /*#__PURE__*/_react.default.createElement("div", {
67
+ })) : null, message.avatar ? /*#__PURE__*/_react.default.createElement("div", {
71
68
  className: "speech-bubble__avatar"
72
69
  }, /*#__PURE__*/_react.default.createElement("img", {
73
70
  src: getAvatar(),
74
71
  alt: message.name
72
+ })) : null, message.voiceOver ? /*#__PURE__*/_react.default.createElement("div", {
73
+ className: "speech-bubble__avatar"
74
+ }, /*#__PURE__*/_react.default.createElement("div", {
75
+ className: "icon-narrator"
75
76
  })) : null, /*#__PURE__*/_react.default.createElement("div", {
76
- className: "speech-bubble__title"
77
- }, message.name)), message.text ? /*#__PURE__*/_react.default.createElement("div", {
77
+ className: "speech-bubble__name"
78
+ }, /*#__PURE__*/_react.default.createElement("span", null, message.name), message.thinkful ? /*#__PURE__*/_react.default.createElement("span", null, "[ ", translate('emotion.thinking'), " ]") : null)), message.text ? /*#__PURE__*/_react.default.createElement("div", {
78
79
  className: "speech-bubble__text"
79
- }, message.text) : null));
80
+ }, message.text) : null);
80
81
  });
81
82
 
82
83
  var _default = SpeechBubbleComponent;
@@ -95,7 +95,7 @@ var VideoVisor = function VideoVisor(_ref) {
95
95
  var isHls = url && url.match(/\.m3u8(\?.+=.+)*$/i) && _hls.default.isSupported();
96
96
 
97
97
  var isEmbeddedVideo = url && (url.match(/youtube/i) || url.match(/vimeo/i));
98
- var isAudio = url && (url.match(/.mp3/i) || url.match(/.ogg/i) || url.match(/.wav/i));
98
+ var isAudio = url && (url.match(/.mp3/i) || url.match(/.ogg/i) || url.match(/.wav/i) || url.match(/.m4a/i));
99
99
  var videoProps = {
100
100
  ref: function ref(videoRef) {
101
101
  setVideo(videoRef);
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.11",
5
+ "version": "2.3.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.3.3",
17
+ "@gamelearn/arcade-styles": "2.4.0",
18
18
  "@gamelearn/arcade-three-core": "1.17.1",
19
19
  "@react-three/drei": "9.4.3",
20
20
  "@react-three/fiber": "8.0.17",