UNPKG

phaser4-rex-plugins

Version:
645 lines 27.9 kB
"use strict"; /** * 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. */ var __importStar = (this && this.__importStar) || function (mod) { if (mod && mod.__esModule) return mod; var result = {}; if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k]; result["default"] = mod; return result; }; Object.defineProperty(exports, "__esModule", { value: true }); var live2dcubismframework_1 = require("../live2dcubismframework"); var cubismrenderer_1 = require("../rendering/cubismrenderer"); var csmmap_1 = require("../type/csmmap"); var csmvector_1 = require("../type/csmvector"); var cubismdebug_1 = require("../utils/cubismdebug"); /** * モデル * * Mocデータから生成されるモデルのクラス。 */ var CubismModel = /** @class */ (function () { /** * コンストラクタ * @param model モデル */ function CubismModel(model) { this._model = model; this._parameterValues = null; this._parameterMaximumValues = null; this._parameterMinimumValues = null; this._partOpacities = null; this._savedParameters = new csmvector_1.csmVector(); this._parameterIds = new csmvector_1.csmVector(); this._drawableIds = new csmvector_1.csmVector(); this._partIds = new csmvector_1.csmVector(); this._notExistPartId = new csmmap_1.csmMap(); this._notExistParameterId = new csmmap_1.csmMap(); this._notExistParameterValues = new csmmap_1.csmMap(); this._notExistPartOpacities = new csmmap_1.csmMap(); } /** * モデルのパラメータの更新 */ CubismModel.prototype.update = function () { // Update model this._model.update(); this._model.drawables.resetDynamicFlags(); }; /** * キャンバスの幅を取得する */ CubismModel.prototype.getCanvasWidth = function () { if (this._model == null) { return 0.0; } return (this._model.canvasinfo.CanvasWidth / this._model.canvasinfo.PixelsPerUnit); }; /** * キャンバスの高さを取得する */ CubismModel.prototype.getCanvasHeight = function () { if (this._model == null) { return 0.0; } return (this._model.canvasinfo.CanvasHeight / this._model.canvasinfo.PixelsPerUnit); }; /** * パラメータを保存する */ CubismModel.prototype.saveParameters = function () { var parameterCount = this._model.parameters.count; var savedParameterCount = this._savedParameters.getSize(); for (var i = 0; i < parameterCount; ++i) { if (i < savedParameterCount) { this._savedParameters.set(i, this._parameterValues[i]); } else { this._savedParameters.pushBack(this._parameterValues[i]); } } }; /** * モデルを取得 */ CubismModel.prototype.getModel = function () { return this._model; }; /** * パーツのインデックスを取得 * @param partId パーツのID * @return パーツのインデックス */ CubismModel.prototype.getPartIndex = function (partId) { var partIndex; var partCount = this._model.parts.count; for (partIndex = 0; partIndex < partCount; ++partIndex) { if (partId == this._partIds.at(partIndex)) { return partIndex; } } // モデルに存在していない場合、非存在パーツIDリスト内にあるかを検索し、そのインデックスを返す if (this._notExistPartId.isExist(partId)) { return this._notExistPartId.getValue(partId); } // 非存在パーツIDリストにない場合、新しく要素を追加する partIndex = partCount + this._notExistPartId.getSize(); this._notExistPartId.setValue(partId, partIndex); this._notExistPartOpacities.appendKey(partIndex); return partIndex; }; /** * パーツの個数の取得 * @return パーツの個数 */ CubismModel.prototype.getPartCount = function () { var partCount = this._model.parts.count; return partCount; }; /** * パーツの不透明度の設定(Index) * @param partIndex パーツのインデックス * @param opacity 不透明度 */ CubismModel.prototype.setPartOpacityByIndex = function (partIndex, opacity) { if (this._notExistPartOpacities.isExist(partIndex)) { this._notExistPartOpacities.setValue(partIndex, opacity); return; } // インデックスの範囲内検知 cubismdebug_1.CSM_ASSERT(0 <= partIndex && partIndex < this.getPartCount()); this._partOpacities[partIndex] = opacity; }; /** * パーツの不透明度の設定(Id) * @param partId パーツのID * @param opacity パーツの不透明度 */ CubismModel.prototype.setPartOpacityById = function (partId, opacity) { // 高速化のためにPartIndexを取得できる機構になっているが、外部からの設定の時は呼び出し頻度が低いため不要 var index = this.getPartIndex(partId); if (index < 0) { return; // パーツがないのでスキップ } this.setPartOpacityByIndex(index, opacity); }; /** * パーツの不透明度の取得(index) * @param partIndex パーツのインデックス * @return パーツの不透明度 */ CubismModel.prototype.getPartOpacityByIndex = function (partIndex) { if (this._notExistPartOpacities.isExist(partIndex)) { // モデルに存在しないパーツIDの場合、非存在パーツリストから不透明度を返す。 return this._notExistPartOpacities.getValue(partIndex); } // インデックスの範囲内検知 cubismdebug_1.CSM_ASSERT(0 <= partIndex && partIndex < this.getPartCount()); return this._partOpacities[partIndex]; }; /** * パーツの不透明度の取得(id) * @param partId パーツのId * @return パーツの不透明度 */ CubismModel.prototype.getPartOpacityById = function (partId) { // 高速化のためにPartIndexを取得できる機構になっているが、外部からの設定の時は呼び出し頻度が低いため不要 var index = this.getPartIndex(partId); if (index < 0) { return 0; // パーツが無いのでスキップ } return this.getPartOpacityByIndex(index); }; /** * パラメータのインデックスの取得 * @param パラメータID * @return パラメータのインデックス */ CubismModel.prototype.getParameterIndex = function (parameterId) { var parameterIndex; var idCount = this._model.parameters.count; for (parameterIndex = 0; parameterIndex < idCount; ++parameterIndex) { if (parameterId != this._parameterIds.at(parameterIndex)) { continue; } return parameterIndex; } // モデルに存在していない場合、非存在パラメータIDリスト内を検索し、そのインデックスを返す if (this._notExistParameterId.isExist(parameterId)) { return this._notExistParameterId.getValue(parameterId); } // 非存在パラメータIDリストにない場合新しく要素を追加する parameterIndex = this._model.parameters.count + this._notExistParameterId.getSize(); this._notExistParameterId.setValue(parameterId, parameterIndex); this._notExistParameterValues.appendKey(parameterIndex); return parameterIndex; }; /** * パラメータの個数の取得 * @return パラメータの個数 */ CubismModel.prototype.getParameterCount = function () { return this._model.parameters.count; }; /** * パラメータの最大値の取得 * @param parameterIndex パラメータのインデックス * @return パラメータの最大値 */ CubismModel.prototype.getParameterMaximumValue = function (parameterIndex) { return this._model.parameters.maximumValues[parameterIndex]; }; /** * パラメータの最小値の取得 * @param parameterIndex パラメータのインデックス * @return パラメータの最小値 */ CubismModel.prototype.getParameterMinimumValue = function (parameterIndex) { return this._model.parameters.minimumValues[parameterIndex]; }; /** * パラメータのデフォルト値の取得 * @param parameterIndex パラメータのインデックス * @return パラメータのデフォルト値 */ CubismModel.prototype.getParameterDefaultValue = function (parameterIndex) { return this._model.parameters.defaultValues[parameterIndex]; }; /** * パラメータの値の取得 * @param parameterIndex パラメータのインデックス * @return パラメータの値 */ CubismModel.prototype.getParameterValueByIndex = function (parameterIndex) { if (this._notExistParameterValues.isExist(parameterIndex)) { return this._notExistParameterValues.getValue(parameterIndex); } // インデックスの範囲内検知 cubismdebug_1.CSM_ASSERT(0 <= parameterIndex && parameterIndex < this.getParameterCount()); return this._parameterValues[parameterIndex]; }; /** * パラメータの値の取得 * @param parameterId パラメータのID * @return パラメータの値 */ CubismModel.prototype.getParameterValueById = function (parameterId) { // 高速化のためにparameterIndexを取得できる機構になっているが、外部からの設定の時は呼び出し頻度が低いため不要 var parameterIndex = this.getParameterIndex(parameterId); return this.getParameterValueByIndex(parameterIndex); }; /** * パラメータの値の設定 * @param parameterIndex パラメータのインデックス * @param value パラメータの値 * @param weight 重み */ CubismModel.prototype.setParameterValueByIndex = function (parameterIndex, value, weight) { if (weight === void 0) { weight = 1.0; } if (this._notExistParameterValues.isExist(parameterIndex)) { this._notExistParameterValues.setValue(parameterIndex, weight == 1 ? value : this._notExistParameterValues.getValue(parameterIndex) * (1 - weight) + value * weight); return; } // インデックスの範囲内検知 cubismdebug_1.CSM_ASSERT(0 <= parameterIndex && parameterIndex < this.getParameterCount()); if (this._model.parameters.maximumValues[parameterIndex] < value) { value = this._model.parameters.maximumValues[parameterIndex]; } if (this._model.parameters.minimumValues[parameterIndex] > value) { value = this._model.parameters.minimumValues[parameterIndex]; } this._parameterValues[parameterIndex] = weight == 1 ? value : (this._parameterValues[parameterIndex] = this._parameterValues[parameterIndex] * (1 - weight) + value * weight); }; /** * パラメータの値の設定 * @param parameterId パラメータのID * @param value パラメータの値 * @param weight 重み */ CubismModel.prototype.setParameterValueById = function (parameterId, value, weight) { if (weight === void 0) { weight = 1.0; } var index = this.getParameterIndex(parameterId); this.setParameterValueByIndex(index, value, weight); }; /** * パラメータの値の加算(index) * @param parameterIndex パラメータインデックス * @param value 加算する値 * @param weight 重み */ CubismModel.prototype.addParameterValueByIndex = function (parameterIndex, value, weight) { if (weight === void 0) { weight = 1.0; } this.setParameterValueByIndex(parameterIndex, this.getParameterValueByIndex(parameterIndex) + value * weight); }; /** * パラメータの値の加算(id) * @param parameterId パラメータID * @param value 加算する値 * @param weight 重み */ CubismModel.prototype.addParameterValueById = function (parameterId, value, weight) { if (weight === void 0) { weight = 1.0; } var index = this.getParameterIndex(parameterId); this.addParameterValueByIndex(index, value, weight); }; /** * パラメータの値の乗算 * @param parameterId パラメータのID * @param value 乗算する値 * @param weight 重み */ CubismModel.prototype.multiplyParameterValueById = function (parameterId, value, weight) { if (weight === void 0) { weight = 1.0; } var index = this.getParameterIndex(parameterId); this.multiplyParameterValueByIndex(index, value, weight); }; /** * パラメータの値の乗算 * @param parameterIndex パラメータのインデックス * @param value 乗算する値 * @param weight 重み */ CubismModel.prototype.multiplyParameterValueByIndex = function (parameterIndex, value, weight) { if (weight === void 0) { weight = 1.0; } this.setParameterValueByIndex(parameterIndex, this.getParameterValueByIndex(parameterIndex) * (1.0 + (value - 1.0) * weight)); }; /** * Drawableのインデックスの取得 * @param drawableId DrawableのID * @return Drawableのインデックス */ CubismModel.prototype.getDrawableIndex = function (drawableId) { var drawableCount = this._model.drawables.count; for (var drawableIndex = 0; drawableIndex < drawableCount; ++drawableIndex) { if (this._drawableIds.at(drawableIndex) == drawableId) { return drawableIndex; } } return -1; }; /** * Drawableの個数の取得 * @return drawableの個数 */ CubismModel.prototype.getDrawableCount = function () { var drawableCount = this._model.drawables.count; return drawableCount; }; /** * DrawableのIDを取得する * @param drawableIndex Drawableのインデックス * @return drawableのID */ CubismModel.prototype.getDrawableId = function (drawableIndex) { var parameterIds = this._model.drawables.ids; return live2dcubismframework_1.CubismFramework.getIdManager().getId(parameterIds[drawableIndex]); }; /** * Drawableの描画順リストの取得 * @return Drawableの描画順リスト */ CubismModel.prototype.getDrawableRenderOrders = function () { var renderOrders = this._model.drawables.renderOrders; return renderOrders; }; /** * Drawableのテクスチャインデックスリストの取得 * @param drawableIndex Drawableのインデックス * @return drawableのテクスチャインデックスリスト */ CubismModel.prototype.getDrawableTextureIndices = function (drawableIndex) { var textureIndices = this._model.drawables.textureIndices; return textureIndices[drawableIndex]; }; /** * DrawableのVertexPositionsの変化情報の取得 * * 直近のCubismModel.update関数でDrawableの頂点情報が変化したかを取得する。 * * @param drawableIndex Drawableのインデックス * @retval true Drawableの頂点情報が直近のCubismModel.update関数で変化した * @retval false Drawableの頂点情報が直近のCubismModel.update関数で変化していない */ CubismModel.prototype.getDrawableDynamicFlagVertexPositionsDidChange = function (drawableIndex) { var dynamicFlags = this._model.drawables.dynamicFlags; return Live2DCubismCore.Utils.hasVertexPositionsDidChangeBit(dynamicFlags[drawableIndex]); }; /** * Drawableの頂点インデックスの個数の取得 * @param drawableIndex Drawableのインデックス * @return drawableの頂点インデックスの個数 */ CubismModel.prototype.getDrawableVertexIndexCount = function (drawableIndex) { var indexCounts = this._model.drawables.indexCounts; return indexCounts[drawableIndex]; }; /** * Drawableの頂点の個数の取得 * @param drawableIndex Drawableのインデックス * @return drawableの頂点の個数 */ CubismModel.prototype.getDrawableVertexCount = function (drawableIndex) { var vertexCounts = this._model.drawables.vertexCounts; return vertexCounts[drawableIndex]; }; /** * Drawableの頂点リストの取得 * @param drawableIndex drawableのインデックス * @return drawableの頂点リスト */ CubismModel.prototype.getDrawableVertices = function (drawableIndex) { return this.getDrawableVertexPositions(drawableIndex); }; /** * Drawableの頂点インデックスリストの取得 * @param drarableIndex Drawableのインデックス * @return drawableの頂点インデックスリスト */ CubismModel.prototype.getDrawableVertexIndices = function (drawableIndex) { var indicesArray = this._model.drawables.indices; return indicesArray[drawableIndex]; }; /** * Drawableの頂点リストの取得 * @param drawableIndex Drawableのインデックス * @return drawableの頂点リスト */ CubismModel.prototype.getDrawableVertexPositions = function (drawableIndex) { var verticesArray = this._model.drawables.vertexPositions; return verticesArray[drawableIndex]; }; /** * Drawableの頂点のUVリストの取得 * @param drawableIndex Drawableのインデックス * @return drawableの頂点UVリスト */ CubismModel.prototype.getDrawableVertexUvs = function (drawableIndex) { var uvsArray = this._model.drawables.vertexUvs; return uvsArray[drawableIndex]; }; /** * Drawableの不透明度の取得 * @param drawableIndex Drawableのインデックス * @return drawableの不透明度 */ CubismModel.prototype.getDrawableOpacity = function (drawableIndex) { var opacities = this._model.drawables.opacities; return opacities[drawableIndex]; }; /** * Drawableのカリング情報の取得 * @param drawableIndex Drawableのインデックス * @return drawableのカリング情報 */ CubismModel.prototype.getDrawableCulling = function (drawableIndex) { var constantFlags = this._model.drawables.constantFlags; return !Live2DCubismCore.Utils.hasIsDoubleSidedBit(constantFlags[drawableIndex]); }; /** * Drawableのブレンドモードを取得 * @param drawableIndex Drawableのインデックス * @return drawableのブレンドモード */ CubismModel.prototype.getDrawableBlendMode = function (drawableIndex) { var constantFlags = this._model.drawables.constantFlags; return Live2DCubismCore.Utils.hasBlendAdditiveBit(constantFlags[drawableIndex]) ? cubismrenderer_1.CubismBlendMode.CubismBlendMode_Additive : Live2DCubismCore.Utils.hasBlendMultiplicativeBit(constantFlags[drawableIndex]) ? cubismrenderer_1.CubismBlendMode.CubismBlendMode_Multiplicative : cubismrenderer_1.CubismBlendMode.CubismBlendMode_Normal; }; /** * Drawableのマスクの反転使用の取得 * * Drawableのマスク使用時の反転設定を取得する。 * マスクを使用しない場合は無視される。 * * @param drawableIndex Drawableのインデックス * @return Drawableの反転設定 */ CubismModel.prototype.getDrawableInvertedMaskBit = function (drawableIndex) { var constantFlags = this._model.drawables.constantFlags; return Live2DCubismCore.Utils.hasIsInvertedMaskBit(constantFlags[drawableIndex]); }; /** * Drawableのクリッピングマスクリストの取得 * @return Drawableのクリッピングマスクリスト */ CubismModel.prototype.getDrawableMasks = function () { var masks = this._model.drawables.masks; return masks; }; /** * Drawableのクリッピングマスクの個数リストの取得 * @return Drawableのクリッピングマスクの個数リスト */ CubismModel.prototype.getDrawableMaskCounts = function () { var maskCounts = this._model.drawables.maskCounts; return maskCounts; }; /** * クリッピングマスクの使用状態 * * @return true クリッピングマスクを使用している * @return false クリッピングマスクを使用していない */ CubismModel.prototype.isUsingMasking = function () { for (var d = 0; d < this._model.drawables.count; ++d) { if (this._model.drawables.maskCounts[d] <= 0) { continue; } return true; } return false; }; /** * Drawableの表示情報を取得する * * @param drawableIndex Drawableのインデックス * @return true Drawableが表示 * @return false Drawableが非表示 */ CubismModel.prototype.getDrawableDynamicFlagIsVisible = function (drawableIndex) { var dynamicFlags = this._model.drawables.dynamicFlags; return Live2DCubismCore.Utils.hasIsVisibleBit(dynamicFlags[drawableIndex]); }; /** * DrawableのDrawOrderの変化情報の取得 * * 直近のCubismModel.update関数でdrawableのdrawOrderが変化したかを取得する。 * drawOrderはartMesh上で指定する0から1000の情報 * @param drawableIndex drawableのインデックス * @return true drawableの不透明度が直近のCubismModel.update関数で変化した * @return false drawableの不透明度が直近のCubismModel.update関数で変化している */ CubismModel.prototype.getDrawableDynamicFlagVisibilityDidChange = function (drawableIndex) { var dynamicFlags = this._model.drawables.dynamicFlags; return Live2DCubismCore.Utils.hasVisibilityDidChangeBit(dynamicFlags[drawableIndex]); }; /** * Drawableの不透明度の変化情報の取得 * * 直近のCubismModel.update関数でdrawableの不透明度が変化したかを取得する。 * * @param drawableIndex drawableのインデックス * @return true Drawableの不透明度が直近のCubismModel.update関数で変化した * @return false Drawableの不透明度が直近のCubismModel.update関数で変化してない */ CubismModel.prototype.getDrawableDynamicFlagOpacityDidChange = function (drawableIndex) { var dynamicFlags = this._model.drawables.dynamicFlags; return Live2DCubismCore.Utils.hasOpacityDidChangeBit(dynamicFlags[drawableIndex]); }; /** * Drawableの描画順序の変化情報の取得 * * 直近のCubismModel.update関数でDrawableの描画の順序が変化したかを取得する。 * * @param drawableIndex Drawableのインデックス * @return true Drawableの描画の順序が直近のCubismModel.update関数で変化した * @return false Drawableの描画の順序が直近のCubismModel.update関数で変化してない */ CubismModel.prototype.getDrawableDynamicFlagRenderOrderDidChange = function (drawableIndex) { var dynamicFlags = this._model.drawables.dynamicFlags; return Live2DCubismCore.Utils.hasRenderOrderDidChangeBit(dynamicFlags[drawableIndex]); }; /** * 保存されたパラメータの読み込み */ CubismModel.prototype.loadParameters = function () { var parameterCount = this._model.parameters.count; var savedParameterCount = this._savedParameters.getSize(); if (parameterCount > savedParameterCount) { parameterCount = savedParameterCount; } for (var i = 0; i < parameterCount; ++i) { this._parameterValues[i] = this._savedParameters.at(i); } }; /** * 初期化する */ CubismModel.prototype.initialize = function () { cubismdebug_1.CSM_ASSERT(this._model); this._parameterValues = this._model.parameters.values; this._partOpacities = this._model.parts.opacities; this._parameterMaximumValues = this._model.parameters.maximumValues; this._parameterMinimumValues = this._model.parameters.minimumValues; { var parameterIds = this._model.parameters.ids; var parameterCount = this._model.parameters.count; this._parameterIds.prepareCapacity(parameterCount); for (var i = 0; i < parameterCount; ++i) { this._parameterIds.pushBack(live2dcubismframework_1.CubismFramework.getIdManager().getId(parameterIds[i])); } } { var partIds = this._model.parts.ids; var partCount = this._model.parts.count; this._partIds.prepareCapacity(partCount); for (var i = 0; i < partCount; ++i) { this._partIds.pushBack(live2dcubismframework_1.CubismFramework.getIdManager().getId(partIds[i])); } } { var drawableIds = this._model.drawables.ids; var drawableCount = this._model.drawables.count; this._drawableIds.prepareCapacity(drawableCount); for (var i = 0; i < drawableCount; ++i) { this._drawableIds.pushBack(live2dcubismframework_1.CubismFramework.getIdManager().getId(drawableIds[i])); } } }; /** * デストラクタ相当の処理 */ CubismModel.prototype.release = function () { this._model.release(); this._model = null; }; return CubismModel; }()); exports.CubismModel = CubismModel; // Namespace definition for compatibility. var $ = __importStar(require("./cubismmodel")); // eslint-disable-next-line @typescript-eslint/no-namespace var Live2DCubismFramework; (function (Live2DCubismFramework) { Live2DCubismFramework.CubismModel = $.CubismModel; })(Live2DCubismFramework = exports.Live2DCubismFramework || (exports.Live2DCubismFramework = {})); //# sourceMappingURL=cubismmodel.js.map