Files
CubismFramework/src/motion/cubismmotionqueueentry.ts
2020-05-19 18:40:23 +09:00

250 lines
7.3 KiB
TypeScript

/**
* Copyright(c) Live2D Inc. All rights reserved.
*
* Use of this source code is governed by the Live2D Open Software license
* that can be found at https://www.live2d.com/eula/live2d-open-software-license-agreement_en.html.
*/
import { Live2DCubismFramework as acubismmotion } from './acubismmotion';
import { Live2DCubismFramework as cubismmotionqueuemanager } from './cubismmotionqueuemanager';
import CubismMotionQueueEntryHandle = cubismmotionqueuemanager.CubismMotionQueueEntryHandle;
import ACubismMotion = acubismmotion.ACubismMotion;
export namespace Live2DCubismFramework {
/**
* CubismMotionQueueManagerで再生している各モーションの管理クラス。
*/
export class CubismMotionQueueEntry {
/**
* コンストラクタ
*/
public constructor() {
this._autoDelete = false;
this._motion = null;
this._available = true;
this._finished = false;
this._started = false;
this._startTimeSeconds = -1.0;
this._fadeInStartTimeSeconds = 0.0;
this._endTimeSeconds = -1.0;
this._stateTimeSeconds = 0.0;
this._stateWeight = 0.0;
this._lastEventCheckSeconds = 0.0;
this._motionQueueEntryHandle = this;
this._fadeOutSeconds = 0.0;
this._isTriggeredFadeOut = false;
}
/**
* デストラクタ相当の処理
*/
public release(): void {
if (this._autoDelete && this._motion) {
ACubismMotion.delete(this._motion); //
}
}
/**
* フェードアウト時間と開始判定の設定
* @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;
this._isTriggeredFadeOut = true;
if (
this._endTimeSeconds < 0.0 ||
newEndTimeSeconds < this._endTimeSeconds
) {
this._endTimeSeconds = newEndTimeSeconds;
}
}
/**
* モーションの終了の確認
*
* @return true モーションが終了した
* @return false 終了していない
*/
public isFinished(): boolean {
return this._finished;
}
/**
* モーションの開始の確認
* @return true モーションが開始した
* @return false 開始していない
*/
public isStarted(): boolean {
return this._started;
}
/**
* モーションの開始時刻の取得
* @return モーションの開始時刻[秒]
*/
public getStartTime(): number {
return this._startTimeSeconds;
}
/**
* フェードインの開始時刻の取得
* @return フェードインの開始時刻[秒]
*/
public getFadeInStartTime(): number {
return this._fadeInStartTimeSeconds;
}
/**
* フェードインの終了時刻の取得
* @return フェードインの終了時刻の取得
*/
public getEndTime(): number {
return this._endTimeSeconds;
}
/**
* モーションの開始時刻の設定
* @param startTime モーションの開始時刻
*/
public setStartTime(startTime: number): void {
this._startTimeSeconds = startTime;
}
/**
* フェードインの開始時刻の設定
* @param startTime フェードインの開始時刻[秒]
*/
public setFadeInStartTime(startTime: number): void {
this._fadeInStartTimeSeconds = startTime;
}
/**
* フェードインの終了時刻の設定
* @param endTime フェードインの終了時刻[秒]
*/
public setEndTime(endTime: number): void {
this._endTimeSeconds = endTime;
}
/**
* モーションの終了の設定
* @param f trueならモーションの終了
*/
public setIsFinished(f: boolean): void {
this._finished = f;
}
/**
* モーション開始の設定
* @param f trueならモーションの開始
*/
public setIsStarted(f: boolean): void {
this._started = f;
}
/**
* モーションの有効性の確認
* @return true モーションは有効
* @return false モーションは無効
*/
public isAvailable(): boolean {
return this._available;
}
/**
* モーションの有効性の設定
* @param v trueならモーションは有効
*/
public setIsAvailable(v: boolean): void {
this._available = v;
}
/**
* モーションの状態の設定
* @param timeSeconds 現在時刻[秒]
* @param weight モーション尾重み
*/
public setState(timeSeconds: number, weight: number): void {
this._stateTimeSeconds = timeSeconds;
this._stateWeight = weight;
}
/**
* モーションの現在時刻の取得
* @return モーションの現在時刻[秒]
*/
public getStateTime(): number {
return this._stateTimeSeconds;
}
/**
* モーションの重みの取得
* @return モーションの重み
*/
public getStateWeight(): number {
return this._stateWeight;
}
/**
* 最後にイベントの発火をチェックした時間を取得
*
* @return 最後にイベントの発火をチェックした時間[秒]
*/
public getLastCheckEventSeconds(): number {
return this._lastEventCheckSeconds;
}
/**
* 最後にイベントをチェックした時間を設定
* @param checkSeconds 最後にイベントをチェックした時間[秒]
*/
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; // 自動削除
_motion: ACubismMotion; // モーション
_available: boolean; // 有効化フラグ
_finished: boolean; // 終了フラグ
_started: boolean; // 開始フラグ
_startTimeSeconds: number; // モーション再生開始時刻[秒]
_fadeInStartTimeSeconds: number; // フェードイン開始時刻(ループの時は初回のみ)[秒]
_endTimeSeconds: number; // 終了予定時刻[秒]
_stateTimeSeconds: number; // 時刻の状態[秒]
_stateWeight: number; // 重みの状態
_lastEventCheckSeconds: number; // 最終のMotion側のチェックした時間
private _fadeOutSeconds: number; // フェードアウト時間[秒]
private _isTriggeredFadeOut: boolean; // フェードアウト開始フラグ
_motionQueueEntryHandle: CubismMotionQueueEntryHandle; // インスタンスごとに一意の値を持つ識別番号
}
}