250 lines
7.3 KiB
TypeScript
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; // インスタンスごとに一意の値を持つ識別番号
|
|
}
|
|
}
|