@gamelearn/arcade-components 1.1.4 → 1.2.1

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 (26) hide show
  1. package/dist/components/arcade-render/background/index.js +24 -0
  2. package/dist/components/arcade-render/background/scene-elements/customGeometry/index.js +46 -0
  3. package/dist/components/arcade-render/background/scene-elements/index.js +106 -0
  4. package/dist/components/arcade-render/element/AnimateElement.js +136 -0
  5. package/dist/components/arcade-render/element/BoundingBox.js +65 -0
  6. package/dist/components/arcade-render/element/Projection.js +38 -0
  7. package/dist/components/arcade-render/element/index.js +163 -0
  8. package/dist/components/arcade-render/elements-list/ClickableArea.js +94 -0
  9. package/dist/components/arcade-render/elements-list/Poster.js +92 -0
  10. package/dist/components/arcade-render/elements-list/index.js +165 -0
  11. package/dist/components/arcade-render/light/index.js +35 -0
  12. package/dist/components/arcade-render/light/useLight.js +62 -0
  13. package/dist/components/arcade-render/loading/Loading.js +54 -0
  14. package/dist/components/arcade-render/loading/LoadingLogic.js +56 -0
  15. package/dist/components/arcade-render/loading/index.js +13 -0
  16. package/dist/components/arcade-render/mocks/index.js +32 -0
  17. package/dist/components/arcade-render/scene/ConfigController.js +68 -0
  18. package/dist/components/arcade-render/scene/index.js +129 -0
  19. package/dist/components/arcade-render/scene/useCameraPan.js +115 -0
  20. package/dist/components/conversational-pro-component/components/ConversationalProComponent.js +8 -13
  21. package/dist/components/dialog-component/components/DialogComponent.js +28 -24
  22. package/dist/components/hanged-puzzle-component/components/HangedPuzzleComponent.js +27 -9
  23. package/dist/components/index.js +56 -0
  24. package/dist/components/login-puzzle-component/components/LoginPuzzleComponent.js +1 -3
  25. package/dist/components/video-visor/components/VideoVisor.js +0 -1
  26. package/package.json +1 -1
@@ -0,0 +1,68 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
7
+
8
+ var _react = require("react");
9
+
10
+ var _fiber = require("@react-three/fiber");
11
+
12
+ var _useCameraPan = _interopRequireDefault(require("./useCameraPan"));
13
+
14
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
15
+
16
+ function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
17
+
18
+ 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."); }
19
+
20
+ 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); }
21
+
22
+ 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; }
23
+
24
+ function _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }
25
+
26
+ function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
27
+
28
+ var ConfigController = function ConfigController(_ref) {
29
+ var current = _ref.current;
30
+
31
+ var _useThree = (0, _fiber.useThree)(function (state) {
32
+ return [state.gl, state.scene, state.invalidate];
33
+ }),
34
+ _useThree2 = _slicedToArray(_useThree, 3),
35
+ stateGl = _useThree2[0],
36
+ stateScene = _useThree2[1],
37
+ invalidate = _useThree2[2];
38
+
39
+ (0, _useCameraPan.default)(current.lookingSide);
40
+ (0, _fiber.useFrame)(function (_ref2) {
41
+ var gl = _ref2.gl,
42
+ scene = _ref2.scene,
43
+ camera = _ref2.camera;
44
+ gl.render(scene, camera);
45
+
46
+ if (!current.animate) {
47
+ invalidate();
48
+ }
49
+ }, 1); // settings
50
+
51
+ (0, _react.useEffect)(function () {
52
+ stateGl.shadowMap.enabled = current.shadows;
53
+ stateGl.shadowMap.needsUpdate = true;
54
+ stateScene.traverse(function (node) {
55
+ if (node.isMesh) {
56
+ node.material.needsUpdate = true;
57
+ }
58
+ });
59
+
60
+ if (!current.animate) {
61
+ invalidate();
62
+ }
63
+ }, [stateGl, stateScene, current, invalidate]);
64
+ return null;
65
+ };
66
+
67
+ var _default = ConfigController;
68
+ exports.default = _default;
@@ -0,0 +1,129 @@
1
+ "use strict";
2
+
3
+ function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
4
+
5
+ Object.defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ exports.default = void 0;
9
+
10
+ var _react = _interopRequireWildcard(require("react"));
11
+
12
+ var _fiber = require("@react-three/fiber");
13
+
14
+ var _drei = require("@react-three/drei");
15
+
16
+ var _loading = _interopRequireDefault(require("../loading"));
17
+
18
+ var _ConfigController = _interopRequireDefault(require("./ConfigController"));
19
+
20
+ var _LoadingLogic = require("../loading/LoadingLogic");
21
+
22
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
23
+
24
+ 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); }
25
+
26
+ 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; }
27
+
28
+ function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
29
+
30
+ 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."); }
31
+
32
+ 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); }
33
+
34
+ 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; }
35
+
36
+ function _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }
37
+
38
+ function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
39
+
40
+ var Scene = function Scene(_ref) {
41
+ var _ref$sceneChanged = _ref.sceneChanged,
42
+ sceneChanged = _ref$sceneChanged === void 0 ? false : _ref$sceneChanged,
43
+ _ref$hasControls = _ref.hasControls,
44
+ hasControls = _ref$hasControls === void 0 ? false : _ref$hasControls,
45
+ _ref$has3Stats = _ref.has3Stats,
46
+ has3Stats = _ref$has3Stats === void 0 ? false : _ref$has3Stats,
47
+ _ref$loadingText = _ref.loadingText,
48
+ loadingText = _ref$loadingText === void 0 ? '' : _ref$loadingText,
49
+ _ref$toggleShadows = _ref.toggleShadows,
50
+ toggleShadows = _ref$toggleShadows === void 0 ? true : _ref$toggleShadows,
51
+ _ref$lodSettings = _ref.lodSettings,
52
+ lodSettings = _ref$lodSettings === void 0 ? {} : _ref$lodSettings,
53
+ _ref$onLoadFinish = _ref.onLoadFinish,
54
+ onLoadFinish = _ref$onLoadFinish === void 0 ? function () {} : _ref$onLoadFinish,
55
+ _ref$stopAnimate = _ref.stopAnimate,
56
+ stopAnimate = _ref$stopAnimate === void 0 ? false : _ref$stopAnimate,
57
+ lookingSide = _ref.lookingSide,
58
+ children = _ref.children;
59
+
60
+ var _useState = (0, _react.useState)(false),
61
+ _useState2 = _slicedToArray(_useState, 2),
62
+ showLoad = _useState2[0],
63
+ setShowLoad = _useState2[1];
64
+
65
+ var orbit = (0, _react.useRef)();
66
+
67
+ var handleOnCreate = function handleOnCreate(_ref2) {
68
+ var gl = _ref2.gl,
69
+ raycaster = _ref2.raycaster,
70
+ camera = _ref2.camera;
71
+ raycaster.layers.set(1);
72
+ gl.outputEncoding = 3001;
73
+ gl.gammaFactor = 2.2;
74
+ gl.setClearColor(0xcccccc);
75
+ gl.setPixelRatio(window.devicePixelRatio);
76
+ gl.setSize(window.innerWidth, window.innerHeight);
77
+ gl.physicallyCorrectLights = true;
78
+ camera.layers.enableAll();
79
+ };
80
+
81
+ var onFinish = function onFinish() {
82
+ onLoadFinish();
83
+ setShowLoad(false);
84
+ };
85
+
86
+ (0, _react.useEffect)(function () {
87
+ if (sceneChanged) {
88
+ setShowLoad(true);
89
+ }
90
+ }, [sceneChanged]);
91
+ return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement(_fiber.Canvas, {
92
+ className: "main-canvas",
93
+ style: {
94
+ width: '100%',
95
+ height: '100vh'
96
+ },
97
+ resize: {
98
+ scroll: false
99
+ },
100
+ mode: "concurrent",
101
+ flat: true,
102
+ shadows: toggleShadows,
103
+ frameloop: "demand",
104
+ onCreated: handleOnCreate,
105
+ tabIndex: 0
106
+ }, /*#__PURE__*/_react.default.createElement(_ConfigController.default, {
107
+ current: {
108
+ shadows: toggleShadows,
109
+ animate: stopAnimate,
110
+ lookingSide: lookingSide
111
+ }
112
+ }), /*#__PURE__*/_react.default.createElement(_react.Suspense, {
113
+ fallback: /*#__PURE__*/_react.default.createElement(_loading.default, {
114
+ text: loadingText
115
+ })
116
+ }, showLoad && /*#__PURE__*/_react.default.createElement(_LoadingLogic.LoadingLogic, {
117
+ onFinish: onFinish,
118
+ lodSettings: lodSettings
119
+ }), children, /*#__PURE__*/_react.default.createElement(_drei.Preload, {
120
+ all: true
121
+ })), has3Stats && /*#__PURE__*/_react.default.createElement(_drei.Stats, null), hasControls && /*#__PURE__*/_react.default.createElement(_drei.OrbitControls, {
122
+ ref: orbit
123
+ })), /*#__PURE__*/_react.default.createElement("div", {
124
+ id: "elements-projection"
125
+ }));
126
+ };
127
+
128
+ var _default = Scene;
129
+ exports.default = _default;
@@ -0,0 +1,115 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
7
+
8
+ var _fiber = require("@react-three/fiber");
9
+
10
+ var _react = require("react");
11
+
12
+ var _three = require("three");
13
+
14
+ function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
15
+
16
+ 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."); }
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 _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; }
21
+
22
+ function _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }
23
+
24
+ function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
25
+
26
+ var STD_RESOLUTION = 16 / 9;
27
+ var MOTION_LIMITER = 3.5;
28
+ var SPEED = 50;
29
+ var quad = new _three.Quaternion();
30
+ var yAxis = new _three.Vector3(0, 1, 0);
31
+
32
+ var rotateQuatY = function rotateQuatY(current, amount) {
33
+ var result = current.clone();
34
+ quad.setFromAxisAngle(yAxis, amount);
35
+ return result.multiply(quad);
36
+ };
37
+
38
+ var useCameraPan = function useCameraPan(lookingSide) {
39
+ var _useState = (0, _react.useState)(false),
40
+ _useState2 = _slicedToArray(_useState, 2),
41
+ cameraLoaded = _useState2[0],
42
+ setCameraLoaded = _useState2[1];
43
+
44
+ var movingCamera = (0, _react.useRef)(false);
45
+
46
+ var _useThree = (0, _fiber.useThree)(function (state) {
47
+ return [state.camera, state.viewport];
48
+ }),
49
+ _useThree2 = _slicedToArray(_useThree, 2),
50
+ camera = _useThree2[0],
51
+ viewport = _useThree2[1];
52
+
53
+ var cameraRotation = (0, _react.useRef)({
54
+ left: camera.quaternion,
55
+ center: camera.quaternion,
56
+ right: camera.quaternion
57
+ });
58
+ var setCameraRotationView = (0, _react.useCallback)(function () {
59
+ if (viewport.aspect >= STD_RESOLUTION) {
60
+ cameraRotation.current = {
61
+ left: camera.quaternion,
62
+ center: camera.quaternion,
63
+ right: camera.quaternion
64
+ };
65
+ return;
66
+ }
67
+
68
+ var threshold = (STD_RESOLUTION - viewport.aspect) / MOTION_LIMITER;
69
+
70
+ if (camera.rotation) {
71
+ cameraRotation.current = {
72
+ center: camera.quaternion.clone(),
73
+ left: rotateQuatY(camera.quaternion, threshold),
74
+ right: rotateQuatY(camera.quaternion, -threshold)
75
+ };
76
+ movingCamera.current = true;
77
+ }
78
+ }, [camera, viewport.aspect]);
79
+ var moveCamera = (0, _react.useCallback)(function (delta) {
80
+ var goal = cameraRotation.current[lookingSide];
81
+
82
+ if (camera.quaternion && goal) {
83
+ if (!camera.quaternion.equals(goal)) {
84
+ camera.quaternion.rotateTowards(goal, delta * SPEED);
85
+ } else {
86
+ movingCamera.current = false;
87
+ }
88
+ }
89
+ }, [camera, lookingSide]);
90
+ (0, _fiber.useFrame)(function (_ref) {
91
+ var clock = _ref.clock;
92
+
93
+ if (movingCamera.current) {
94
+ moveCamera(clock.getDelta());
95
+ }
96
+ }, 1);
97
+ (0, _react.useEffect)(function () {
98
+ if (camera.defaultCamera) {
99
+ setCameraLoaded(true);
100
+ }
101
+ }, [camera]);
102
+ (0, _react.useEffect)(function () {
103
+ if (cameraLoaded) {
104
+ movingCamera.current = true;
105
+ }
106
+ }, [lookingSide, cameraLoaded]);
107
+ (0, _react.useEffect)(function () {
108
+ if (cameraLoaded) {
109
+ setCameraRotationView();
110
+ }
111
+ }, [viewport, cameraLoaded, setCameraRotationView]);
112
+ };
113
+
114
+ var _default = useCameraPan;
115
+ exports.default = _default;
@@ -68,7 +68,6 @@ var ConversationProViewer = function ConversationProViewer(_ref) {
68
68
  finished = _useState4[0],
69
69
  setFinished = _useState4[1];
70
70
 
71
- var emitEventRef = (0, _react.useRef)(emitEvent);
72
71
  var backgroundImage = (background === null || background === void 0 ? void 0 : (_background$img = background.img) === null || _background$img === void 0 ? void 0 : _background$img.url) || null;
73
72
  var currentLineData = lines[currentLine];
74
73
  var voiceOverSlots = [];
@@ -76,11 +75,11 @@ var ConversationProViewer = function ConversationProViewer(_ref) {
76
75
  decision = currentLineData.decision;
77
76
  var isFlex = currentLineData.flex;
78
77
  var translate = (0, _react.useCallback)(function (id) {
79
- return emitEventRef.current({
78
+ return emitEvent({
80
79
  type: 'translate',
81
80
  payload: id
82
81
  });
83
- }, []);
82
+ }, [emitEvent]);
84
83
  var getCurrentMessage = (0, _react.useCallback)(function () {
85
84
  if (voiceOver) {
86
85
  return currentLineData;
@@ -122,13 +121,13 @@ var ConversationProViewer = function ConversationProViewer(_ref) {
122
121
  return !decision ? getCurrentMessage() : {};
123
122
  }, [getCurrentMessage, decision]);
124
123
  var playSpeech = (0, _react.useCallback)( /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee() {
125
- var payload, speechUrl;
124
+ var payload;
126
125
  return regeneratorRuntime.wrap(function _callee$(_context) {
127
126
  while (1) {
128
127
  switch (_context.prev = _context.next) {
129
128
  case 0:
130
129
  if (!(currentLineData.voice.id && currentMessage)) {
131
- _context.next = 7;
130
+ _context.next = 5;
132
131
  break;
133
132
  }
134
133
 
@@ -138,27 +137,23 @@ var ConversationProViewer = function ConversationProViewer(_ref) {
138
137
  };
139
138
 
140
139
  if (!(payload.voiceId && payload.text)) {
141
- _context.next = 7;
140
+ _context.next = 5;
142
141
  break;
143
142
  }
144
143
 
145
144
  _context.next = 5;
146
- return emitEventRef.current({
145
+ return emitEvent({
147
146
  type: 'playSpeech',
148
147
  payload: payload
149
148
  });
150
149
 
151
150
  case 5:
152
- speechUrl = _context.sent;
153
- playSound(speechUrl);
154
-
155
- case 7:
156
151
  case "end":
157
152
  return _context.stop();
158
153
  }
159
154
  }
160
155
  }, _callee);
161
- })), [currentLineData.voice, currentMessage, getVoice, playSound]); // Recupera la antigua linea de la conversacion para conservar los personajes en voice-over
156
+ })), [currentLineData.voice, currentMessage, emitEvent, getVoice]); // Recupera la antigua linea de la conversacion para conservar los personajes en voice-over
162
157
 
163
158
  var leftWithSlots = lines.slice(0, currentLine + 1).reverse().find(function (line) {
164
159
  return line.slots;
@@ -244,7 +239,7 @@ var ConversationProViewer = function ConversationProViewer(_ref) {
244
239
  setCurrentLine(line + 1);
245
240
  } else {
246
241
  setFinished(true);
247
- emitEventRef.current({
242
+ emitEvent({
248
243
  type: 'success'
249
244
  });
250
245
  }
@@ -88,14 +88,13 @@ var DialogComponent = function DialogComponent(_ref) {
88
88
  inScene: false,
89
89
  thinkful: false,
90
90
  voiceOver: false,
91
- avatar: ''
91
+ avatar: '',
92
+ show: false
92
93
  }),
93
94
  _useState6 = _slicedToArray(_useState5, 2),
94
95
  currentMessage = _useState6[0],
95
96
  setCurrentMessage = _useState6[1];
96
97
 
97
- var emitRef = (0, _react.useRef)(emitEvent);
98
-
99
98
  var _useThree = (0, _fiber.useThree)(function (state) {
100
99
  return [state.camera, state.scene];
101
100
  }),
@@ -125,11 +124,11 @@ var DialogComponent = function DialogComponent(_ref) {
125
124
  var lastLine = lines[line - 1];
126
125
  var lastSet = (0, _react.useRef)(false);
127
126
  var translate = (0, _react.useCallback)(function (id) {
128
- return emitRef.current({
127
+ return emitEvent({
129
128
  type: 'translate',
130
129
  payload: id
131
130
  });
132
- }, []);
131
+ }, [emitEvent]);
133
132
  var getVoice = (0, _react.useCallback)(function (_ref2) {
134
133
  var id = _ref2.id,
135
134
  _ref2$type = _ref2.type,
@@ -150,13 +149,13 @@ var DialogComponent = function DialogComponent(_ref) {
150
149
  return null;
151
150
  }, [translate]);
152
151
  var playSpeech = (0, _react.useCallback)( /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee() {
153
- var payload, speechUrl;
152
+ var payload;
154
153
  return regeneratorRuntime.wrap(function _callee$(_context) {
155
154
  while (1) {
156
155
  switch (_context.prev = _context.next) {
157
156
  case 0:
158
157
  if (!currentLine.voice.id) {
159
- _context.next = 7;
158
+ _context.next = 5;
160
159
  break;
161
160
  }
162
161
 
@@ -166,27 +165,23 @@ var DialogComponent = function DialogComponent(_ref) {
166
165
  };
167
166
 
168
167
  if (!(payload.voiceId && payload.text)) {
169
- _context.next = 7;
168
+ _context.next = 5;
170
169
  break;
171
170
  }
172
171
 
173
172
  _context.next = 5;
174
- return emitRef.current({
173
+ return emitEvent({
175
174
  type: 'playSpeech',
176
175
  payload: payload
177
176
  });
178
177
 
179
178
  case 5:
180
- speechUrl = _context.sent;
181
- playSound(speechUrl);
182
-
183
- case 7:
184
179
  case "end":
185
180
  return _context.stop();
186
181
  }
187
182
  }
188
183
  }, _callee);
189
- })), [currentLine.voice, getVoice, currentMessage.text, playSound]);
184
+ })), [currentLine.voice, getVoice, currentMessage.text, emitEvent]);
190
185
  var getCurrentVisible = (0, _react.useCallback)(function (uid) {
191
186
  var object;
192
187
  scene.traverseVisible(function (node) {
@@ -314,7 +309,8 @@ var DialogComponent = function DialogComponent(_ref) {
314
309
  inScene: false,
315
310
  voiceOver: true,
316
311
  thinkful: false,
317
- avatar: ''
312
+ avatar: '',
313
+ show: true
318
314
  });
319
315
  } else if (!lastSet.current) {
320
316
  var talkingCharacter = currentLine.slots.find(function (slot) {
@@ -363,7 +359,7 @@ var DialogComponent = function DialogComponent(_ref) {
363
359
  head.getWorldPosition(target.position);
364
360
  target.applyQuaternion(camera.quaternion);
365
361
  target.translateX(1.25);
366
- target.translateY(3);
362
+ target.translateY(2);
367
363
  messagePosition.current = {
368
364
  pos: target.position.toArray(),
369
365
  child: head,
@@ -384,7 +380,8 @@ var DialogComponent = function DialogComponent(_ref) {
384
380
  left: true,
385
381
  inScene: true,
386
382
  thinkful: talkingCharacter.emotion === 'thinkful',
387
- avatar: ''
383
+ avatar: '',
384
+ show: true
388
385
  });
389
386
  }, zoomInActor ? 1200 : 0);
390
387
  }
@@ -400,9 +397,15 @@ var DialogComponent = function DialogComponent(_ref) {
400
397
  left: false,
401
398
  inScene: false,
402
399
  thinkful: talkingCharacter.emotion === 'thinkful',
403
- avatar: getAvatarURL(talkingCharacter)
400
+ avatar: getAvatarURL(talkingCharacter),
401
+ show: true
404
402
  });
405
403
  }
404
+ } else {
405
+ resetCameraView();
406
+ setCurrentMessage({
407
+ show: true
408
+ });
406
409
  }
407
410
  }
408
411
  }, [actors, camera, currentLine, zoomInActor, getCurrentVisible, translate, getAvatarURL, loadEmotion, resetAnims, resetCameraView]); // Sound logic
@@ -476,7 +479,8 @@ var DialogComponent = function DialogComponent(_ref) {
476
479
  return _objectSpread(_objectSpread({}, old), {}, {
477
480
  left: false,
478
481
  inScene: !completeOutside,
479
- avatar: getAvatarURL(talkingCharacter)
482
+ avatar: getAvatarURL(talkingCharacter),
483
+ show: true
480
484
  });
481
485
  });
482
486
  }
@@ -501,7 +505,7 @@ var DialogComponent = function DialogComponent(_ref) {
501
505
  animationTarget.current.applyQuaternion(cam.quaternion);
502
506
  }
503
507
 
504
- animationTarget.current.translateX(12);
508
+ animationTarget.current.translateX(10);
505
509
  animationTarget.current.translateY(-5);
506
510
  animationTarget.current.translateZ(30);
507
511
  }
@@ -545,7 +549,7 @@ var DialogComponent = function DialogComponent(_ref) {
545
549
  disableBackground: true
546
550
  },
547
551
  onFinish: nextLine,
548
- emitEvent: emitRef.current,
552
+ emitEvent: emitEvent,
549
553
  soundActions: soundActions
550
554
  });
551
555
 
@@ -567,7 +571,7 @@ var DialogComponent = function DialogComponent(_ref) {
567
571
  }, decisionPayload)));
568
572
  }
569
573
 
570
- return currentMessage.text ? /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement("group", {
574
+ return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, currentMessage.text ? /*#__PURE__*/_react.default.createElement("group", {
571
575
  ref: groupRef,
572
576
  position: messagePosition.current.pos
573
577
  }, /*#__PURE__*/_react.default.createElement(_arcadeThreeCore.HtmlPro, {
@@ -581,7 +585,7 @@ var DialogComponent = function DialogComponent(_ref) {
581
585
  }, /*#__PURE__*/_react.default.createElement(_SpeechBubbleComponent.default, {
582
586
  ref: bubbleRef,
583
587
  message: currentMessage
584
- }))), /*#__PURE__*/_react.default.createElement(_arcadeThreeCore.HtmlPro, {
588
+ }))) : null, currentMessage.show ? /*#__PURE__*/_react.default.createElement(_arcadeThreeCore.HtmlPro, {
585
589
  style: {
586
590
  width: '100vw',
587
591
  height: '100vh'
@@ -606,7 +610,7 @@ var DialogComponent = function DialogComponent(_ref) {
606
610
  onClick: nextLine
607
611
  }, /*#__PURE__*/_react.default.createElement("span", {
608
612
  className: "icon-next"
609
- }))))) : null;
613
+ })))) : null);
610
614
  };
611
615
 
612
616
  var _default = DialogComponent;
@@ -49,7 +49,9 @@ var MAX_POOL_LETTERS = 26;
49
49
  var MAX_EXTRA_LETTERS = 8;
50
50
 
51
51
  var AnswerPanel = function AnswerPanel(_ref) {
52
- var answer = _ref.answer;
52
+ var answer = _ref.answer,
53
+ _ref$show = _ref.show,
54
+ show = _ref$show === void 0 ? false : _ref$show;
53
55
  var words = [];
54
56
  var wordIndex = 0;
55
57
  answer.forEach(function (a) {
@@ -68,7 +70,12 @@ var AnswerPanel = function AnswerPanel(_ref) {
68
70
  key: "".concat(word + index),
69
71
  className: "puzzle--hanged__word",
70
72
  "data-testid": "result-".concat(index)
71
- }, word.filter(function (_ref2) {
73
+ }, show ? word.map(function (char, i) {
74
+ return /*#__PURE__*/_react.default.createElement("span", {
75
+ key: "".concat(char + i),
76
+ className: "puzzle--hanged__letter active"
77
+ }, char);
78
+ }) : word.filter(function (_ref2) {
72
79
  var char = _ref2.char;
73
80
  return char !== ' ';
74
81
  }).map(function (_ref3, i) {
@@ -133,6 +140,11 @@ var HangedPuzzleComponent = function HangedPuzzleComponent(_ref4) {
133
140
  accRewards = _useState12[0],
134
141
  setRewards = _useState12[1];
135
142
 
143
+ var _useState13 = (0, _react.useState)(false),
144
+ _useState14 = _slicedToArray(_useState13, 2),
145
+ showCorrectSolution = _useState14[0],
146
+ setCorrectSolution = _useState14[1];
147
+
136
148
  var translatedAnswer = answer.toUpperCase().split('');
137
149
  var answerPanel = translatedAnswer.filter(function (char) {
138
150
  return (0, _utils.restrictCharacters)(char, 'and');
@@ -388,12 +400,15 @@ var HangedPuzzleComponent = function HangedPuzzleComponent(_ref4) {
388
400
  }
389
401
 
390
402
  setResolveAction(function () {
391
- var rewardsData = [].concat(_toConsumableArray(accRewards), _toConsumableArray(info.resolve.rewards));
392
- emitEvent({
393
- type: 'hidePuzzleButtons',
394
- payload: false
395
- });
396
- setShowPoints(rewardsData);
403
+ setCorrectSolution(true);
404
+ setTimeout(function () {
405
+ var rewardsData = [].concat(_toConsumableArray(accRewards), _toConsumableArray(info.resolve.rewards));
406
+ emitEvent({
407
+ type: 'hidePuzzleButtons',
408
+ payload: false
409
+ });
410
+ setShowPoints(rewardsData);
411
+ }, 2000);
397
412
  });
398
413
  }, [setHiddenAnswer, mounted, answer, setResolveAction, emitEvent, accRewards, info.resolve.rewards, setShowPoints]);
399
414
  return /*#__PURE__*/_react.default.createElement("div", {
@@ -416,7 +431,10 @@ var HangedPuzzleComponent = function HangedPuzzleComponent(_ref4) {
416
431
  }, question), /*#__PURE__*/_react.default.createElement("div", {
417
432
  className: "puzzle--hanged__solution ".concat(resolvedClass),
418
433
  "data-testid": "".concat(resolvedClass)
419
- }, /*#__PURE__*/_react.default.createElement(AnswerPanel, {
434
+ }, showCorrectSolution ? /*#__PURE__*/_react.default.createElement(AnswerPanel, {
435
+ answer: answer.split(''),
436
+ show: true
437
+ }) : /*#__PURE__*/_react.default.createElement(AnswerPanel, {
420
438
  answer: resolvedAnswer
421
439
  })), /*#__PURE__*/_react.default.createElement("div", {
422
440
  className: "puzzle--hanged__keyboard"