Fix delay in starting fade-out for expressions

master
Jun Koyama 2020-05-19 18:40:23 +09:00
parent ad93d1370d
commit 901d6c356e
No known key found for this signature in database
GPG Key ID: 293EC5417501B537
3 changed files with 50 additions and 12 deletions

View File

@ -10,6 +10,11 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
### Fixed ### Fixed
* Fix implementation of `iterator#increment` in `csmmap` and `csmvector`. * 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 ## [4-r.1] - 2020-01-30

View File

@ -31,6 +31,8 @@ export namespace Live2DCubismFramework {
this._stateWeight = 0.0; this._stateWeight = 0.0;
this._lastEventCheckSeconds = 0.0; this._lastEventCheckSeconds = 0.0;
this._motionQueueEntryHandle = this; 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 fadeOutSeconds []
* @param userTimeSeconds [] * @param userTimeSeconds []
*/ */
public startFadeout(fadeoutSeconds: number, userTimeSeconds: number): void { public startFadeOut(fadeOutSeconds: number, userTimeSeconds: number): void {
const newEndTimeSeconds: number = userTimeSeconds + fadeoutSeconds; const newEndTimeSeconds: number = userTimeSeconds + fadeOutSeconds;
this._isTriggeredFadeOut = true;
if ( if (
this._endTimeSeconds < 0.0 || this._endTimeSeconds < 0.0 ||
@ -189,16 +201,32 @@ export namespace Live2DCubismFramework {
* *
* @return [] * @return []
*/ */
public getLastCheckEventTime(): number { public getLastCheckEventSeconds(): number {
return this._lastEventCheckSeconds; return this._lastEventCheckSeconds;
} }
/** /**
* *
* @param checkTime [] * @param checkSeconds []
*/ */
public setLastCheckEventTime(checkTime: number): void { public setLastCheckEventSeconds(checkSeconds: number): void {
this._lastEventCheckSeconds = checkTime; this._lastEventCheckSeconds = checkSeconds;
}
/**
*
* @return
*/
public isTriggeredFadeOut(): boolean {
return this._isTriggeredFadeOut && this._endTimeSeconds < 0.0;
}
/**
*
* @return []
*/
public getFadeOutSeconds(): number {
return this._fadeOutSeconds;
} }
_autoDelete: boolean; // 自動削除 _autoDelete: boolean; // 自動削除
@ -213,6 +241,8 @@ export namespace Live2DCubismFramework {
_stateTimeSeconds: number; // 時刻の状態[秒] _stateTimeSeconds: number; // 時刻の状態[秒]
_stateWeight: number; // 重みの状態 _stateWeight: number; // 重みの状態
_lastEventCheckSeconds: number; // 最終のMotion側のチェックした時間 _lastEventCheckSeconds: number; // 最終のMotion側のチェックした時間
private _fadeOutSeconds: number; // フェードアウト時間[秒]
private _isTriggeredFadeOut: boolean; // フェードアウト開始フラグ
_motionQueueEntryHandle: CubismMotionQueueEntryHandle; // インスタンスごとに一意の値を持つ識別番号 _motionQueueEntryHandle: CubismMotionQueueEntryHandle; // インスタンスごとに一意の値を持つ識別番号
} }

View File

@ -81,10 +81,7 @@ export namespace Live2DCubismFramework {
continue; continue;
} }
motionQueueEntry.startFadeout( motionQueueEntry.setFadeOut(motionQueueEntry._motion.getFadeOutTime()); // フェードアウト設定
motionQueueEntry._motion.getFadeOutTime(),
userTimeSeconds
); // フェードアウトを開始し終了する
} }
motionQueueEntry = new CubismMotionQueueEntry(); // 終了時に破棄する motionQueueEntry = new CubismMotionQueueEntry(); // 終了時に破棄する
@ -290,7 +287,7 @@ export namespace Live2DCubismFramework {
// ------ ユーザトリガーイベントを検査する ---- // ------ ユーザトリガーイベントを検査する ----
const firedList: csmVector<csmString> = motion.getFiredEvent( const firedList: csmVector<csmString> = motion.getFiredEvent(
motionQueueEntry.getLastCheckEventTime() - motionQueueEntry.getLastCheckEventSeconds() -
motionQueueEntry.getStartTime(), motionQueueEntry.getStartTime(),
userTimeSeconds - motionQueueEntry.getStartTime() userTimeSeconds - motionQueueEntry.getStartTime()
); );
@ -299,7 +296,7 @@ export namespace Live2DCubismFramework {
this._eventCallBack(this, firedList.at(i), this._eventCustomData); this._eventCallBack(this, firedList.at(i), this._eventCustomData);
} }
motionQueueEntry.setLastCheckEventTime(userTimeSeconds); motionQueueEntry.setLastCheckEventSeconds(userTimeSeconds);
// ------ 終了済みの処理があれば削除する ------ // ------ 終了済みの処理があれば削除する ------
if (motionQueueEntry.isFinished()) { if (motionQueueEntry.isFinished()) {
@ -308,6 +305,12 @@ export namespace Live2DCubismFramework {
motionQueueEntry = null; motionQueueEntry = null;
ite = this._motions.erase(ite); // 削除 ite = this._motions.erase(ite); // 削除
} else { } else {
if (motionQueueEntry.isTriggeredFadeOut()) {
motionQueueEntry.startFadeOut(
motionQueueEntry.getFadeOutSeconds(),
userTimeSeconds
);
}
ite.preIncrement(); ite.preIncrement();
} }
} }