|
@@ -75789,9 +75789,9 @@
|
|
|
this.boxHelper = new Box3Helper$1(new Box3(new Vector3(-0.5, -0.5, -0.5), new Vector3(0.5, 0.5, 0.5)));
|
|
|
viewer.scene.scene.add(this.boxHelper);
|
|
|
Potree.Utils.updateVisible(this.boxHelper, 'unselect', false);
|
|
|
- this.boxHelper.material.opacity = 0.7;
|
|
|
+ this.boxHelper.material.opacity = 0.8;
|
|
|
var boxHelper2 = new Box3Helper$1(new Box3(new Vector3(-0.5, -0.5, -0.5), new Vector3(0.5, 0.5, 0.5)));
|
|
|
- boxHelper2.material.opacity = 0.3;
|
|
|
+ boxHelper2.material.opacity = 0.2;
|
|
|
boxHelper2.material.transparent = true, boxHelper2.material.depthTest = false;
|
|
|
this.boxHelper.add(boxHelper2); //透明一点的boxHelper */
|
|
|
|
|
@@ -82573,7 +82573,7 @@
|
|
|
/* if(delta == void 0){//无缓动 但会造成和缓动时动作time不同
|
|
|
return time >= key.time && time <= key.time + key.dur ? 1 : 0
|
|
|
} */
|
|
|
-
|
|
|
+ key.index_ = i;
|
|
|
var fadeTimeStart = Math.min(maxClipFadeTime, key.dur, ((_keys = keys[i - 1]) === null || _keys === void 0 ? void 0 : _keys.dur) || maxClipFadeTime) / 2; //过渡时间不超过当前和前一个的 half of dur
|
|
|
var fadeTimeEnd = Math.min(maxClipFadeTime, key.dur, ((_keys2 = keys[i + 1]) === null || _keys2 === void 0 ? void 0 : _keys2.dur) || maxClipFadeTime) / 2; //过渡时间不超过当前和后一个的 half of dur
|
|
|
|
|
@@ -82581,8 +82581,14 @@
|
|
|
var endTime1 = key.time + key.dur + fadeTimeEnd;
|
|
|
var startTime2 = key.time + fadeTimeStart;
|
|
|
var endTime2 = key.time + key.dur - fadeTimeEnd;
|
|
|
- key.tempTime_ = MathUtils.clamp(time - key.time, 0, key.dur); //time - startTime1 //当前动作时间
|
|
|
-
|
|
|
+ key.action.tempSW_ = {
|
|
|
+ scale: 0,
|
|
|
+ weight: 0,
|
|
|
+ time: null,
|
|
|
+ sameLinks: []
|
|
|
+ }, key.tempTime_ = MathUtils.clamp(time - key.time, 0, key.dur); //time - startTime1 //当前动作时间
|
|
|
+ key.startTime1 = startTime1;
|
|
|
+ key.endTime1 = endTime1;
|
|
|
if (i == 0 && time < startTime2) {
|
|
|
//开始前维持第一个动作
|
|
|
return 1;
|
|
@@ -82603,34 +82609,68 @@
|
|
|
|
|
|
var animateActions = []; //在播的动作
|
|
|
keys.forEach((key, i) => {
|
|
|
- weights[i] > 0 && !animateActions.includes(key.action) && (animateActions.push(key.action), key.action.tempSW_ = {
|
|
|
+ weights[i] > 0 && !animateActions.includes(key.action) && (key.action.tempSW_ = {
|
|
|
scale: 0,
|
|
|
weight: 0,
|
|
|
- time: null
|
|
|
- });
|
|
|
+ time: null,
|
|
|
+ sameLinks: []
|
|
|
+ }, animateActions.push(key.action));
|
|
|
});
|
|
|
//万一前后是一个动作…… 所以用tempSW_计算总值
|
|
|
|
|
|
keys.forEach((key, i) => {
|
|
|
+ //要找到当前action之前所有不间断的所有key,他们之间要连续播放
|
|
|
+ if (animateActions.includes(key.action)) {
|
|
|
+ if (key.startTime1 < time) {
|
|
|
+ //已播部分的key
|
|
|
+ var last = key.action.tempSW_.sameLinks[key.action.tempSW_.sameLinks.length - 1];
|
|
|
+ if (last) {
|
|
|
+ if (key.index_ == last.index_ + 1 && key.startTime1 <= last.endTime1) {
|
|
|
+ //相连
|
|
|
+ key.action.tempSW_.sameLinks.push(key);
|
|
|
+ } else {
|
|
|
+ key.action.tempSW_.sameLinks = [key]; //clear
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ key.action.tempSW_.sameLinks = [key];
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ });
|
|
|
+ keys.forEach((key, i) => {
|
|
|
if (animateActions.includes(key.action)) {
|
|
|
var weight = weights[i] * key.weight; //权重乘以自身幅度
|
|
|
if (weight > 0) {
|
|
|
+ //最多两个
|
|
|
key.action.play();
|
|
|
key.action.paused = true; /* time != key.time || delta != void 0 */ //停在某帧 //如果没有点击该动作块的话 不停
|
|
|
|
|
|
- key.action.tempSW_.time == null && (key.action.tempSW_.time = key.tempTime_); //相同动作优先用前一个的时间
|
|
|
- key.action.tempSW_.scale += key.speed; // * weights[i] //乘以weight在开始和结束作为缓动效果好,但是不好计算实时time
|
|
|
key.action.tempSW_.weight += weight;
|
|
|
+ key.tempTime_ >= 0 && (key.action.tempSW_.scale = key.speed); //相同动作不允许叠加速度
|
|
|
+ //key.action.tempSW_.time += key.tempTime_
|
|
|
+
|
|
|
+ if (key.action.tempSW_.time == null) {
|
|
|
+ var timeSum = 0;
|
|
|
+ key.action.tempSW_.sameLinks.forEach(key_ => {
|
|
|
+ timeSum += key_.tempTime_ % (key_.action._clip.duration / key_.speed) * key_.speed; //相同动作可能速度不同,算出每个clip的时间
|
|
|
+ });
|
|
|
+ key.action.tempSW_.time = timeSum % key.action._clip.duration;
|
|
|
+ }
|
|
|
+
|
|
|
+ //(老版本,过渡时播放时间会延长一点,有交集):
|
|
|
+ //key.action.tempSW_.time == null && (key.action.tempSW_.time = key.tempTime_) //相同动作优先用前一个的时间
|
|
|
+ //key.action.tempSW_.scale += key.speed // * weights[i] //乘以weight在开始和结束作为缓动效果好,但是不好计算实时time
|
|
|
+ //speed time都没有交集,只有weight有,为了过渡
|
|
|
}
|
|
|
} else {
|
|
|
key.action.stop(); //不启动动画
|
|
|
}
|
|
|
});
|
|
|
animateActions.forEach(action => {
|
|
|
- action.setEffectiveTimeScale(action.tempSW_.scale); //speed 只有没paused时有效
|
|
|
+ action.setEffectiveTimeScale(action.tempSW_.scale); //speed 只有没paused时有效 这里都paused的所以没用
|
|
|
action.setEffectiveWeight(action.tempSW_.weight);
|
|
|
- action.time = action.tempSW_.time % (action._clip.duration / action.tempSW_.scale) * action.tempSW_.scale; //只有paused时有效
|
|
|
- //action.tempSW_.weight < 1 && console.log('action', action._clip.name, action.time, action.weight )
|
|
|
+ action.time = action.tempSW_.time; //(action.tempSW_.time % (action._clip.duration / action.tempSW_.scale)) * action.tempSW_.scale //只有paused时有效
|
|
|
+ //console.log('action', action._clip.name, action.time, action.weight, action.tempSW_.scale )
|
|
|
});
|
|
|
|
|
|
//model.mixer.timeScale = 1 ;
|