@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 (
|
|
138
|
-
var boneName =
|
|
139
|
+
object.traverse(function (node) {
|
|
140
|
+
var boneName = node.name.toLowerCase();
|
|
139
141
|
|
|
140
|
-
if (
|
|
141
|
-
var distance = isSeated ?
|
|
142
|
-
var leftEyeVector = new _three.Vector3().setFromMatrixPosition(
|
|
143
|
-
|
|
144
|
-
|
|
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,
|