Fix delay in starting fade-out for expressions
parent
ad93d1370d
commit
901d6c356e
|
@ -10,6 +10,11 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
|
|||
### Fixed
|
||||
|
||||
* Fix implementation of `iterator#increment` in `csmmap` and `csmvector`.
|
||||
* Fix delay in starting fade-out for expressions.
|
||||
|
||||
### Changed
|
||||
|
||||
* Rename the function name that handles seconds from `Time` to `Seconds`.
|
||||
|
||||
|
||||
## [4-r.1] - 2020-01-30
|
||||
|
|
|
@ -31,6 +31,8 @@ export namespace Live2DCubismFramework {
|
|||
this._stateWeight = 0.0;
|
||||
this._lastEventCheckSeconds = 0.0;
|
||||
this._motionQueueEntryHandle = this;
|
||||
this._fadeOutSeconds = 0.0;
|
||||
this._isTriggeredFadeOut = false;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -42,13 +44,23 @@ export namespace Live2DCubismFramework {
|
|||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* フェードアウト時間と開始判定の設定
|
||||
* @param fadeOutSeconds フェードアウトにかかる時間[秒]
|
||||
*/
|
||||
public setFadeOut(fadeOutSeconds: number): void {
|
||||
this._fadeOutSeconds = fadeOutSeconds;
|
||||
this._isTriggeredFadeOut = true;
|
||||
}
|
||||
|
||||
/**
|
||||
* フェードアウトの開始
|
||||
* @param fadeOutSeconds フェードアウトにかかる時間[秒]
|
||||
* @param userTimeSeconds デルタ時間の積算値[秒]
|
||||
*/
|
||||
public startFadeout(fadeoutSeconds: number, userTimeSeconds: number): void {
|
||||
const newEndTimeSeconds: number = userTimeSeconds + fadeoutSeconds;
|
||||
public startFadeOut(fadeOutSeconds: number, userTimeSeconds: number): void {
|
||||
const newEndTimeSeconds: number = userTimeSeconds + fadeOutSeconds;
|
||||
this._isTriggeredFadeOut = true;
|
||||
|
||||
if (
|
||||
this._endTimeSeconds < 0.0 ||
|
||||
|
@ -189,16 +201,32 @@ export namespace Live2DCubismFramework {
|
|||
*
|
||||
* @return 最後にイベントの発火をチェックした時間[秒]
|
||||
*/
|
||||
public getLastCheckEventTime(): number {
|
||||
public getLastCheckEventSeconds(): number {
|
||||
return this._lastEventCheckSeconds;
|
||||
}
|
||||
|
||||
/**
|
||||
* 最後にイベントをチェックした時間を設定
|
||||
* @param checkTime 最後にイベントをチェックした時間[秒]
|
||||
* @param checkSeconds 最後にイベントをチェックした時間[秒]
|
||||
*/
|
||||
public setLastCheckEventTime(checkTime: number): void {
|
||||
this._lastEventCheckSeconds = checkTime;
|
||||
public setLastCheckEventSeconds(checkSeconds: number): void {
|
||||
this._lastEventCheckSeconds = checkSeconds;
|
||||
}
|
||||
|
||||
/**
|
||||
* フェードアウト開始判定の取得
|
||||
* @return フェードアウト開始するかどうか
|
||||
*/
|
||||
public isTriggeredFadeOut(): boolean {
|
||||
return this._isTriggeredFadeOut && this._endTimeSeconds < 0.0;
|
||||
}
|
||||
|
||||
/**
|
||||
* フェードアウト時間の取得
|
||||
* @return フェードアウト時間[秒]
|
||||
*/
|
||||
public getFadeOutSeconds(): number {
|
||||
return this._fadeOutSeconds;
|
||||
}
|
||||
|
||||
_autoDelete: boolean; // 自動削除
|
||||
|
@ -213,6 +241,8 @@ export namespace Live2DCubismFramework {
|
|||
_stateTimeSeconds: number; // 時刻の状態[秒]
|
||||
_stateWeight: number; // 重みの状態
|
||||
_lastEventCheckSeconds: number; // 最終のMotion側のチェックした時間
|
||||
private _fadeOutSeconds: number; // フェードアウト時間[秒]
|
||||
private _isTriggeredFadeOut: boolean; // フェードアウト開始フラグ
|
||||
|
||||
_motionQueueEntryHandle: CubismMotionQueueEntryHandle; // インスタンスごとに一意の値を持つ識別番号
|
||||
}
|
||||
|
|
|
@ -81,10 +81,7 @@ export namespace Live2DCubismFramework {
|
|||
continue;
|
||||
}
|
||||
|
||||
motionQueueEntry.startFadeout(
|
||||
motionQueueEntry._motion.getFadeOutTime(),
|
||||
userTimeSeconds
|
||||
); // フェードアウトを開始し終了する
|
||||
motionQueueEntry.setFadeOut(motionQueueEntry._motion.getFadeOutTime()); // フェードアウト設定
|
||||
}
|
||||
|
||||
motionQueueEntry = new CubismMotionQueueEntry(); // 終了時に破棄する
|
||||
|
@ -290,7 +287,7 @@ export namespace Live2DCubismFramework {
|
|||
|
||||
// ------ ユーザトリガーイベントを検査する ----
|
||||
const firedList: csmVector<csmString> = motion.getFiredEvent(
|
||||
motionQueueEntry.getLastCheckEventTime() -
|
||||
motionQueueEntry.getLastCheckEventSeconds() -
|
||||
motionQueueEntry.getStartTime(),
|
||||
userTimeSeconds - motionQueueEntry.getStartTime()
|
||||
);
|
||||
|
@ -299,7 +296,7 @@ export namespace Live2DCubismFramework {
|
|||
this._eventCallBack(this, firedList.at(i), this._eventCustomData);
|
||||
}
|
||||
|
||||
motionQueueEntry.setLastCheckEventTime(userTimeSeconds);
|
||||
motionQueueEntry.setLastCheckEventSeconds(userTimeSeconds);
|
||||
|
||||
// ------ 終了済みの処理があれば削除する ------
|
||||
if (motionQueueEntry.isFinished()) {
|
||||
|
@ -308,6 +305,12 @@ export namespace Live2DCubismFramework {
|
|||
motionQueueEntry = null;
|
||||
ite = this._motions.erase(ite); // 削除
|
||||
} else {
|
||||
if (motionQueueEntry.isTriggeredFadeOut()) {
|
||||
motionQueueEntry.startFadeOut(
|
||||
motionQueueEntry.getFadeOutSeconds(),
|
||||
userTimeSeconds
|
||||
);
|
||||
}
|
||||
ite.preIncrement();
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue