alter-egoism/js/plugins/CBR_shake.js
2025-11-01 14:17:42 -05:00

101 lines
3 KiB
JavaScript

/*:
* @target MZ
* @plugindesc ピクチャを揺らすスクリプト
* @author
*
* @help $gameScreen.startPicShake(ピクチャ番号, 強さ, スピード, フレーム);
* で1, 4, 5, 6, 7, 8番のピクチャを揺らす
*
*/
(function () {
var Sprite_Picture_updatePosition = Sprite_Picture.prototype.updatePosition;
Sprite_Picture.prototype.updatePosition = function () {
Sprite_Picture_updatePosition.call(this);
var ary = [1, 4, 5, 6, 7, 8, 9, 10];
var idx = ary.indexOf(this._pictureId);
if (idx != -1) {
this.x += $gameScreen.shakePic(idx);
}
};
var Game_Screen_clear = Game_Screen.prototype.clear;
Game_Screen.prototype.clear = function () {
Game_Screen_clear.call(this);
var ary = [1, 4, 5, 6, 7, 8, 9, 10];
for (var i = 0; i < ary.length; i++) {
this.clearPicShake(i);
}
};
var Game_Screen_update = Game_Screen.prototype.update;
Game_Screen.prototype.update = function () {
Game_Screen_update.call(this);
this.updatePicShake();
};
Game_Screen.prototype.startPicShake = function (num, power, speed, duration) {
this._shakePicPower = this._shakePicPower || [];
this._shakePicSpeed = this._shakePicSpeed || [];
this._shakePicDuration = this._shakePicDuration || [];
this._shakePicDirection = this._shakePicDirection || [];
this._shakePic = this._shakePic || [];
var ary = [1, 4, 5, 6, 7, 8, 9, 10];
var idx = ary.indexOf(num);
this._shakePic[idx] = 1;
this._shakePicPower[idx] = power;
this._shakePicSpeed[idx] = speed;
this._shakePicDuration[idx] = duration;
this._shakePicDirection[idx] = 1;
};
Game_Screen.prototype.clearPicShake = function (idx) {
this._shakePicPower = this._shakePicPower || [];
this._shakePicSpeed = this._shakePicSpeed || [];
this._shakePicDuration = this._shakePicDuration || [];
this._shakePicDirection = this._shakePicDirection || [];
this._shakePic = this._shakePic || [];
this._shakePicPower[idx] = 0;
this._shakePicSpeed[idx] = 0;
this._shakePicDuration[idx] = 0;
this._shakePicDirection[idx] = 1;
this._shakePic[idx] = 0;
};
Game_Screen.prototype.shakePic = function (idx) {
return this._shakePic[idx] || 0;
};
Game_Screen.prototype.updatePicShake = function () {
var ary = [1, 4, 5, 6, 7, 8, 9, 10];
for (var i = 0; i < ary.length; i++) {
if (this._shakePicDuration && this._shakePicDuration[i] > 0 && this._shakePic[i] !== 0) {
const delta = (this._shakePicPower[i] * this._shakePicSpeed[i] * this._shakePicDirection[i]) / 10;
if (this._shakePicDuration[i] <= 1 && this._shakePic[i] * (this._shakePic[i] + delta) < 0) {
this._shakePic[i] = 0;
} else {
this._shakePic[i] += delta;
}
if (this._shakePic[i] > this._shakePicPower[i] * 2) {
this._shakePicDirection[i] = -1;
}
if (this._shakePic[i] < -this._shakePicPower[i] * 2) {
this._shakePicDirection[i] = 1;
}
this._shakePicDuration[i]--;
if (this._shakePicDuration[i] < 1) {
this._shakePic[i] = 0;
}
}
}
};
})();