Free_Game / maimai_6_0418 /js /plugins /AnimationMv.js
Sageen's picture
Super-squash branch 'main' using huggingface_hub
99b0de1 verified
Raw
History Blame Contribute Delete
10.6 kB
/*=============================================================================
AnimationMv.js
----------------------------------------------------------------------------
(C)2020 Triacontane
This software is released under the MIT License.
http://opensource.org/licenses/mit-license.php
----------------------------------------------------------------------------
Version
1.2.3 2021/02/14 使用素材リストのパラメータに効果音を追加
1.2.2 2020/11/30 英訳版ヘルプをご提供いただいて追加
1.2.1 2020/11/07 1.2.0の修正によりコピー用のプロジェクトを指定しないとエラーになる問題を修正
1.2.0 2020/10/16 コピー処理を非同期処理に変更。MVプロジェクトからの自動移行が高速になりました。
VisuMZ_1_BattleCore.js利用時、画面全体に表示するアニメーションが左上に表示されるバグを代わりに修正
1.1.1 2020/08/29 1.1.0の修正でブラウザ実行でエラーになっていた問題を修正
1.1.0 2020/08/16 MVプロジェクトを指定するだけで必要ファイルを自動コピーできる機能を追加
1.0.0 2020/06/15 初版
----------------------------------------------------------------------------
[Blog] : https://triacontane.blogspot.jp/
[Twitter]: https://twitter.com/triacontane/
[GitHub] : https://github.com/triacontane/
=============================================================================*/
/*:
* @target MZ
* @plugindesc MV Animation Plugin
* @author Triacontane
* @base PluginCommonBase
* @orderAfter PluginCommonBase
* @url https://github.com/triacontane/RPGMakerMV/tree/mz_master/AnimationMv.js
*
* @param AnimationList
* @text Animation List
* @desc The list of the animation material to be used. Registering it will exclude it from the "Exclude unused files" option.
* @default []
* @dir img/animations/
* @type file[]
*
* @param SeList
* @text SE List
* @desc The list of the SE material to be used. Registering it will exclude it from the "Exclude unused files" option.
* @default []
* @dir audio/se/
* @type file[]
*
* @param MvProjectPathText
* @text The absolute path of MV project.
* @desc The path of the MV project to edit the animation. If you leave it empty, auto-copying will be disabled.
* @default
*
* @param NoCopyImageFile
* @text Images do not copy
* @desc No longer auto-copy animated image files. Useful if the copying is taking a long time.
* @default false
* @type boolean
*
* @help AnimationMv.js
* It can be used in conjunction with the new MZ playback method with the MV animation playback method.
*
* Editing the animation data in the editor of RPGMaker MV
* Specify the path to your MV project from the parameter.
* During test play, the images under "img/animations" and "data/Animations.json"
* will be stored in it will be copied automatically into your MZ project.
* Animations.json" will be copied to "mv/Animations.json".
*
* Particle Effects, Sound Effects, and Flash in the MZ database.
* If it is created with everything empty (i.e., newly created), it will play the animation of the MV.
*
* This plugin uses the global variable "$dataMvAnimations".
*
* User Agreement:
* You may alter or redistribute the plugin without permission. There are no restrictions on usage format
* (such as adult- or commercial-use only).
* This plugin is now all yours.
*/
/*:ja
* @target MZ
* @plugindesc MVアニメーションプラグイン
* @author トリアコンタン
* @base PluginCommonBase
* @orderAfter PluginCommonBase
* @url https://github.com/triacontane/RPGMakerMV/tree/mz_master/AnimationMv.js
*
* @param AnimationList
* @text アニメーションリスト
* @desc 使用するアニメーション素材のリストです。登録しておけば未使用素材削除の対象から外れます。
* @default []
* @dir img/animations/
* @type file[]
*
* @param SeList
* @text 効果音リスト
* @desc 使用する効果音素材のリストです。登録しておけば未使用素材削除の対象から外れます。
* @default []
* @dir audio/se/
* @type file[]
*
* @param MvProjectPathText
* @text MVプロジェクトの絶対パス
* @desc アニメーションを編集するMVプロジェクトのパスです。空にすると自動コピーが無効になります。
* @default
*
* @param NoCopyImageFile
* @text 画像はコピーしない
* @desc アニメーション画像ファイルを自動コピーしなくなります。コピーに時間が掛かっている場合に有効です。
* @default false
* @type boolean
*
* @help AnimationMv.js
* RPGツクールMVのアニメーション再生方式と新しいMZの再生方式との併用できます。
*
* RPGツクールMVのエディタでアニメーションデータを編集して、
* パラメータからMVプロジェクトのパスを指定してください。
* テストプレー時に『img/animations』以下の画像と『data/Animations.json』が
* MZプロジェクトに自動でコピーされます。
* 『Animations.json』は『mv/Animations.json』にコピーされます。
*
* MZ側のデータベースで『パーティクルエフェクト』『効果音』『フラッシュ』を
* 全て空の状態(新規作成の状態)で作成すると、MVのアニメーションを再生します。
*
* 本プラグインはグローバル変数『$dataMvAnimations』を使用します。
*
* 利用規約:
* 作者に無断で改変、再配布が可能で、利用形態(商用、18禁利用等)
* についても制限はありません。
* このプラグインはもうあなたのものです。
*/
(() => {
'use strict';
const script = document.currentScript;
const param = PluginManagerEx.createParameter(script);
const variableName = '$dataMvAnimations';
const variableSrc = 'mv/Animations.json';
/**
* MvFileCopyUtil
* MVのプロジェクトからファイルをコピーするユーティリティクラスです。
*/
class MvFileCopyUtil {
static async copyMvAnimationData() {
if (!this.isAnyTest() || !param.MvProjectPathText) {
DataManager.loadDataFile(variableName, variableSrc);
return false;
}
await this.copyAllFiles('data/', 'data/mv/', /Animations.json/);
DataManager.loadDataFile(variableName, variableSrc);
if (!param.NoCopyImageFile) {
await this.copyAllFiles('img/animations/', 'img/animations/');
}
return true;
}
static fileDirectoryPath(directory) {
const path = require('path');
const base = path.dirname(process.mainModule.filename);
return path.join(base, `${directory}/`);
}
static async copyAllFiles(src, dist, regExp) {
const srcPath = require('path').join(param.MvProjectPathText, src);
const destPath = this.fileDirectoryPath(dist);
const copyModel = new FileCopyModel(srcPath, destPath);
await copyModel.copyAllFiles(regExp);
}
static isAnyTest() {
return Utils.isNwjs() &&
(Utils.isOptionValid('test') || DataManager.isBattleTest() || DataManager.isEventTest());
}
}
/**
* FileCopyModel
* 再帰的な非同期ファイルコピーを実装します。
*/
class FileCopyModel {
constructor(src, dist) {
this._fs = require('fs').promises;
this._src = src;
this._dist = dist;
}
async copyAllFiles(fileReqExp = null) {
await this._fs.mkdir(this._dist, {recursive: true});
const dirents = await this._fs.readdir(this._src, {withFileTypes: true});
for (const dirent of dirents) {
const name = dirent.name;
if (fileReqExp && !fileReqExp.test(name)) {
continue;
}
if (dirent.isDirectory()) {
await this._copyDirectory(name + '/');
} else {
await this._copyFile(name);
}
}
}
async _copyDirectory(dirName) {
const path = require('path');
const src = path.join(this._src, dirName);
const dist = path.join(this._dist, dirName);
await this._fs.mkdir(dist, {recursive: true});
const subCopyModel = new FileCopyModel(src, dist);
await subCopyModel.copyAllFiles();
}
async _copyFile(fileName) {
const src = this._src + fileName;
const dist = this._dist + fileName;
await this._fs.copyFile(src, dist);
}
}
const _DataManager_loadDatabase = DataManager.loadDatabase;
DataManager.loadDatabase = function() {
this.loadAnimationData();
_DataManager_loadDatabase.apply(this, arguments);
};
DataManager.loadAnimationData = function() {
MvFileCopyUtil.copyMvAnimationData().then(result => {
if (result) {
console.log('Animation file copy complete.');
}
}).catch(error => {
if (error.code === 'ENOENT') {
PluginManagerEx.throwError(`Invalid MV Project Path :${param.MvProjectPathText}`, script);
} else {
throw error;
}
});
};
const _Spriteset_Base_createAnimation = Spriteset_Base.prototype.createAnimation;
Spriteset_Base.prototype.createAnimation = function(request) {
const mzAnimations = $dataAnimations;
if (isEmptyAnimation($dataAnimations[request.animationId])) {
$dataAnimations = window[variableName];
}
_Spriteset_Base_createAnimation.apply(this, arguments);
$dataAnimations = mzAnimations;
};
function isEmptyAnimation(animation) {
return animation &&
!animation.effectName &&
animation.flashTimings.length === 0 &&
animation.soundTimings.length === 0;
}
const _Sprite_AnimationMV_updatePosition = Sprite_AnimationMV.prototype.updatePosition;
Sprite_AnimationMV.prototype.updatePosition = function() {
_Sprite_AnimationMV_updatePosition.apply(this, arguments);
if (this._animation.position === 3) {
this.x = Graphics.boxWidth / 2;
this.y = Graphics.boxHeight / 2;
}
}
})();