@@ -10,6 +10,7 @@ import { AnimatorController } from "./AnimatorController";
10
10
import { AnimatorControllerLayer } from "./AnimatorControllerLayer" ;
11
11
import { AnimatorControllerParameter , AnimatorControllerParameterValue } from "./AnimatorControllerParameter" ;
12
12
import { AnimatorState } from "./AnimatorState" ;
13
+ import { AnimatorStateMachine } from "./AnimatorStateMachine" ;
13
14
import { AnimatorStateTransition } from "./AnimatorStateTransition" ;
14
15
import { KeyframeValueType } from "./Keyframe" ;
15
16
import { AnimatorConditionMode } from "./enums/AnimatorConditionMode" ;
@@ -563,6 +564,7 @@ export class Animator extends Component {
563
564
lastClipTime ,
564
565
clipTime ,
565
566
playDeltaTime ,
567
+ true ,
566
568
aniUpdate
567
569
) ) ||
568
570
( transitions . length &&
@@ -576,6 +578,7 @@ export class Animator extends Component {
576
578
lastClipTime ,
577
579
clipTime ,
578
580
playDeltaTime ,
581
+ false ,
579
582
aniUpdate
580
583
) ) ;
581
584
@@ -918,7 +921,7 @@ export class Animator extends Component {
918
921
919
922
const transition =
920
923
( anyStateTransitions . length &&
921
- this . _applyTransitionsByCondition ( layerIndex , layerData , layer , state , anyStateTransitions , aniUpdate ) ) ||
924
+ this . _applyTransitionsByCondition ( layerIndex , layerData , layer , state , anyStateTransitions , true , aniUpdate ) ) ||
922
925
( transitions . length &&
923
926
this . _applyStateTransitions (
924
927
layerIndex ,
@@ -930,6 +933,7 @@ export class Animator extends Component {
930
933
clipTime ,
931
934
clipTime ,
932
935
actualDeltaTime ,
936
+ false ,
933
937
aniUpdate
934
938
) ) ;
935
939
@@ -998,14 +1002,15 @@ export class Animator extends Component {
998
1002
layerData : AnimatorLayerData ,
999
1003
layer : AnimatorControllerLayer ,
1000
1004
isForwards : boolean ,
1001
- playState : AnimatorStatePlayData ,
1005
+ playData : AnimatorStatePlayData ,
1002
1006
transitions : Readonly < AnimatorStateTransition [ ] > ,
1003
1007
lastClipTime : number ,
1004
1008
clipTime : number ,
1005
1009
deltaTime : number ,
1010
+ checkStateMachineTransition : boolean ,
1006
1011
aniUpdate : boolean
1007
1012
) : AnimatorStateTransition {
1008
- const { state } = playState ;
1013
+ const { state } = playData ;
1009
1014
const clipDuration = state . clip . length ;
1010
1015
let targetTransition : AnimatorStateTransition = null ;
1011
1016
const startTime = state . clipStartTime * clipDuration ;
@@ -1016,22 +1021,28 @@ export class Animator extends Component {
1016
1021
layerIndex ,
1017
1022
layerData ,
1018
1023
layer ,
1019
- playState ,
1024
+ playData ,
1020
1025
transitions ,
1021
1026
lastClipTime ,
1022
1027
endTime ,
1028
+ checkStateMachineTransition ,
1023
1029
aniUpdate
1024
1030
) ;
1025
1031
if ( ! targetTransition ) {
1026
- playState . currentTransitionIndex = 0 ;
1032
+ if ( checkStateMachineTransition ) {
1033
+ layerData . anyTransitionIndex = 0 ;
1034
+ } else {
1035
+ playData . currentTransitionIndex = 0 ;
1036
+ }
1027
1037
targetTransition = this . _checkSubTransition (
1028
1038
layerIndex ,
1029
1039
layerData ,
1030
1040
layer ,
1031
- playState ,
1041
+ playData ,
1032
1042
transitions ,
1033
1043
startTime ,
1034
1044
clipTime ,
1045
+ checkStateMachineTransition ,
1035
1046
aniUpdate
1036
1047
) ;
1037
1048
}
@@ -1040,35 +1051,43 @@ export class Animator extends Component {
1040
1051
layerIndex ,
1041
1052
layerData ,
1042
1053
layer ,
1043
- playState ,
1054
+ playData ,
1044
1055
transitions ,
1045
1056
lastClipTime ,
1046
1057
clipTime ,
1058
+ checkStateMachineTransition ,
1047
1059
aniUpdate
1048
1060
) ;
1049
1061
}
1050
1062
} else {
1063
+ //@todo backwards play currentIndex should not be 0
1051
1064
if ( lastClipTime + deltaTime <= startTime ) {
1052
1065
targetTransition = this . _checkBackwardsSubTransition (
1053
1066
layerIndex ,
1054
1067
layerData ,
1055
1068
layer ,
1056
- playState ,
1069
+ playData ,
1057
1070
transitions ,
1058
1071
lastClipTime ,
1059
1072
startTime ,
1073
+ checkStateMachineTransition ,
1060
1074
aniUpdate
1061
1075
) ;
1062
1076
if ( ! targetTransition ) {
1063
- playState . currentTransitionIndex = transitions . length - 1 ;
1077
+ if ( checkStateMachineTransition ) {
1078
+ layerData . anyTransitionIndex = transitions . length - 1 ;
1079
+ } else {
1080
+ playData . currentTransitionIndex = transitions . length - 1 ;
1081
+ }
1064
1082
targetTransition = this . _checkBackwardsSubTransition (
1065
1083
layerIndex ,
1066
1084
layerData ,
1067
1085
layer ,
1068
- playState ,
1086
+ playData ,
1069
1087
transitions ,
1070
1088
clipTime ,
1071
1089
endTime ,
1090
+ checkStateMachineTransition ,
1072
1091
aniUpdate
1073
1092
) ;
1074
1093
}
@@ -1077,10 +1096,11 @@ export class Animator extends Component {
1077
1096
layerIndex ,
1078
1097
layerData ,
1079
1098
layer ,
1080
- playState ,
1099
+ playData ,
1081
1100
transitions ,
1082
1101
lastClipTime ,
1083
1102
clipTime ,
1103
+ checkStateMachineTransition ,
1084
1104
aniUpdate
1085
1105
) ;
1086
1106
}
@@ -1093,14 +1113,15 @@ export class Animator extends Component {
1093
1113
layerIndex : number ,
1094
1114
layerData : AnimatorLayerData ,
1095
1115
layer : AnimatorControllerLayer ,
1096
- playState : AnimatorStatePlayData ,
1116
+ playData : AnimatorStatePlayData ,
1097
1117
transitions : Readonly < AnimatorStateTransition [ ] > ,
1098
1118
lastClipTime : number ,
1099
1119
curClipTime : number ,
1120
+ checkStateMachineTransition : boolean ,
1100
1121
aniUpdate : boolean
1101
1122
) : AnimatorStateTransition {
1102
- const { state } = playState ;
1103
- let transitionIndex = playState . currentTransitionIndex ;
1123
+ const { state } = playData ;
1124
+ let transitionIndex = checkStateMachineTransition ? layerData . anyTransitionIndex : playData . currentTransitionIndex ;
1104
1125
const duration = state . _getDuration ( ) ;
1105
1126
for ( let n = transitions . length ; transitionIndex < n ; transitionIndex ++ ) {
1106
1127
const transition = transitions [ transitionIndex ] ;
@@ -1111,7 +1132,19 @@ export class Animator extends Component {
1111
1132
}
1112
1133
1113
1134
if ( exitTime >= lastClipTime || ! hasExitTime ) {
1114
- playState . currentTransitionIndex = Math . min ( transitionIndex + 1 , n - 1 ) ;
1135
+ if ( checkStateMachineTransition ) {
1136
+ layerData . anyTransitionIndex = Math . min ( transitionIndex + 1 , n - 1 ) ;
1137
+ } else {
1138
+ playData . currentTransitionIndex = Math . min ( transitionIndex + 1 , n - 1 ) ;
1139
+ }
1140
+
1141
+ if ( transition . mute ) continue ;
1142
+
1143
+ const hasSolo = checkStateMachineTransition
1144
+ ? ( < AnimatorStateMachine > transition . _source ) . _anyHasSolo
1145
+ : state . _hasSoloTransition ;
1146
+ if ( hasSolo && ! transition . solo ) continue ;
1147
+
1115
1148
if ( this . _checkConditions ( state , transition ) ) {
1116
1149
if ( this . _applyTransition ( layerIndex , layerData , layer , transition , aniUpdate ) ) {
1117
1150
return transition ;
@@ -1132,10 +1165,11 @@ export class Animator extends Component {
1132
1165
transitions : Readonly < AnimatorStateTransition [ ] > ,
1133
1166
lastClipTime : number ,
1134
1167
curClipTime : number ,
1168
+ checkAnyTransition : boolean ,
1135
1169
aniUpdate : boolean
1136
1170
) : AnimatorStateTransition {
1137
1171
const { state } = playState ;
1138
- let transitionIndex = playState . currentTransitionIndex ;
1172
+ let transitionIndex = checkAnyTransition ? layerData . anyTransitionIndex : playState . currentTransitionIndex ;
1139
1173
const duration = playState . state . _getDuration ( ) ;
1140
1174
for ( ; transitionIndex >= 0 ; transitionIndex -- ) {
1141
1175
const transition = transitions [ transitionIndex ] ;
@@ -1146,7 +1180,19 @@ export class Animator extends Component {
1146
1180
}
1147
1181
1148
1182
if ( exitTime <= lastClipTime || ! hasExitTime ) {
1149
- playState . currentTransitionIndex = Math . max ( transitionIndex - 1 , 0 ) ;
1183
+ if ( checkAnyTransition ) {
1184
+ layerData . anyTransitionIndex = Math . max ( transitionIndex - 1 , 0 ) ;
1185
+ } else {
1186
+ playState . currentTransitionIndex = Math . max ( transitionIndex - 1 , 0 ) ;
1187
+ }
1188
+
1189
+ if ( transition . mute ) continue ;
1190
+
1191
+ const hasSolo = checkAnyTransition
1192
+ ? ( < AnimatorStateMachine > transition . _source ) . _anyHasSolo
1193
+ : state . _hasSoloTransition ;
1194
+ if ( hasSolo && ! transition . solo ) continue ;
1195
+
1150
1196
if ( this . _checkConditions ( state , transition ) ) {
1151
1197
if ( this . _applyTransition ( layerIndex , layerData , layer , transition , aniUpdate ) ) {
1152
1198
return transition ;
@@ -1165,10 +1211,23 @@ export class Animator extends Component {
1165
1211
layer : AnimatorControllerLayer ,
1166
1212
state : AnimatorState ,
1167
1213
transitions : Readonly < AnimatorStateTransition [ ] > ,
1214
+ checkStateMachineTransition : boolean ,
1168
1215
aniUpdate : boolean
1169
1216
) : AnimatorStateTransition {
1170
1217
for ( let i = 0 , n = transitions . length ; i < n ; i ++ ) {
1171
1218
const transition = transitions [ i ] ;
1219
+
1220
+ if ( transition . mute ) continue ;
1221
+
1222
+ const source = transition . _source ;
1223
+ const isAnyTransition = transition . _isAny ;
1224
+ const hasSolo = checkStateMachineTransition
1225
+ ? isAnyTransition
1226
+ ? ( < AnimatorStateMachine > source ) . _anyHasSolo
1227
+ : ( < AnimatorStateMachine > source ) . _entryHasSolo
1228
+ : ( < AnimatorState > source ) . _hasSoloTransition ;
1229
+ if ( hasSolo && ! transition . solo ) continue ;
1230
+
1172
1231
if ( this . _checkConditions ( state , transition ) ) {
1173
1232
if ( this . _applyTransition ( layerIndex , layerData , layer , transition , aniUpdate ) ) {
1174
1233
return transition ;
@@ -1214,10 +1273,6 @@ export class Animator extends Component {
1214
1273
}
1215
1274
1216
1275
private _checkConditions ( state : AnimatorState , transition : AnimatorStateTransition ) : boolean {
1217
- if ( transition . mute ) return false ;
1218
-
1219
- if ( state ?. _hasSoloTransition && ! transition . solo ) return false ;
1220
-
1221
1276
const { conditions } = transition ;
1222
1277
1223
1278
let allPass = true ;
@@ -1427,12 +1482,12 @@ export class Animator extends Component {
1427
1482
1428
1483
transition =
1429
1484
anyStateTransitions . length &&
1430
- this . _applyTransitionsByCondition ( layerIndex , layerData , layer , null , anyStateTransitions , aniUpdate ) ;
1485
+ this . _applyTransitionsByCondition ( layerIndex , layerData , layer , null , anyStateTransitions , true , aniUpdate ) ;
1431
1486
1432
1487
if ( ! transition ) {
1433
1488
transition =
1434
1489
entryTransitions . length &&
1435
- this . _applyTransitionsByCondition ( layerIndex , layerData , layer , null , entryTransitions , aniUpdate ) ;
1490
+ this . _applyTransitionsByCondition ( layerIndex , layerData , layer , null , entryTransitions , true , aniUpdate ) ;
1436
1491
}
1437
1492
1438
1493
if ( transition ) {
0 commit comments