@gamelearn/arcade-components 2.17.6 → 2.17.8

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.
@@ -43,7 +43,7 @@ function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
43
43
 
44
44
  var isMobile = (0, _deviceDetection.DeviceDetection)();
45
45
  var defaultCamPos = [0, 14.63, 16];
46
- var boneWhiteList = ['l_eye_jnt', 'l_eye', 'eye_l'];
46
+ var boneWhiteList = ['l_eye_jnt', 'l_eye', 'eye_l', 'head_m'];
47
47
 
48
48
  function Panel(_ref) {
49
49
  var _character$resource4, _character$resource6, _character$resource6$, _character$resource6$2, _character$resource7;
@@ -55,6 +55,7 @@ function Panel(_ref) {
55
55
  var cameraRef = (0, _react.useRef)(null);
56
56
  var sceneRef = (0, _react.useRef)(null);
57
57
  var isCharacter = character.type === 'character';
58
+ var ref = (0, _react.useRef)();
58
59
 
59
60
  var _useState = (0, _react.useState)(false),
60
61
  _useState2 = _slicedToArray(_useState, 2),
@@ -131,19 +132,25 @@ function Panel(_ref) {
131
132
  var _character$emotion;
132
133
 
133
134
  model.current = object;
135
+ var head;
134
136
  var isSeated = (_character$emotion = character.emotion) === null || _character$emotion === void 0 ? void 0 : _character$emotion.includes('seated');
135
137
  cameraRef.current.position.setY(size.y - 1.5 * 1.3); // Retro compatible with resources without eye bone
136
138
 
137
- object.traverse(function (obj) {
138
- var boneName = obj.name.toLowerCase();
139
+ object.traverse(function (node) {
140
+ var boneName = node.name.toLowerCase();
139
141
 
140
- if (obj.isBone && boneWhiteList.includes(boneName)) {
141
- var distance = isSeated ? 5 : 0.5;
142
- var leftEyeVector = new _three.Vector3().setFromMatrixPosition(obj.matrixWorld);
143
- cameraRef.current.position.setX(leftEyeVector.x - 0.5);
144
- cameraRef.current.position.setY(leftEyeVector.y - distance);
142
+ if (node.isBone && boneWhiteList.includes(boneName)) {
143
+ var distance = isSeated ? 1 : 0;
144
+ var leftEyeVector = new _three.Vector3().setFromMatrixPosition(node.matrixWorld);
145
+
146
+ if (boneName === 'head_m') {
147
+ head = leftEyeVector;
148
+ } else {
149
+ cameraRef.current.position.setY(leftEyeVector.y - distance);
150
+ }
145
151
  }
146
152
  });
153
+ if (head && !isSeated) cameraRef.current.lookAt(head);
147
154
  cameraRef.current.zoom = 1.85;
148
155
  } else if (character.type === 'object' || !defaultAnim) {
149
156
  (0, _helpers.cameraFitAnyObject)(object, cameraRef.current);
@@ -172,6 +179,11 @@ function Panel(_ref) {
172
179
  left: child.left - parent.left,
173
180
  bottom: child.bottom - parent.bottom
174
181
  };
182
+
183
+ if (ref.current) {
184
+ onLoadElement(ref.current);
185
+ }
186
+
175
187
  var paddingBottom = isMobile ? 24 : 40;
176
188
  relativePos.bottom += active ? -paddingBottom : paddingBottom;
177
189
  gl.setViewport(relativePos.left, relativePos.bottom, width, height);
@@ -185,6 +197,7 @@ function Panel(_ref) {
185
197
  }, (_character$resource7 = character.resource) !== null && _character$resource7 !== void 0 && _character$resource7.url ? /*#__PURE__*/_react.default.createElement(_arcadeThreeCore.LodWrapper, {
186
198
  lod: currentLOD
187
199
  }, /*#__PURE__*/_react.default.createElement(_arcadeThreeCore.TriggerWrapper, {
200
+ ref: ref,
188
201
  name: "char_".concat(character.uid),
189
202
  url: character.resource.url,
190
203
  animationUrl: emotion.url,
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.6",
5
+ "version": "2.17.8",
6
6
  "main": "dist/index.js",
7
7
  "files": [
8
8
  "dist",