princess-synergy/www/js/plugins/JsScript13Set.js
2026-02-05 14:03:22 -06:00

239 lines
9.6 KiB
JavaScript
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

// Copyright (c) 2015 Triacontane
// http://opensource.org/licenses/mit-license.php
// [Blog] : http://triacontane.blogspot.jp/
// [Twitter]: https://twitter.com/triacontane/
// [GitHub] : https://github.com/triacontane/
/*:
* @plugindesc
* @author triacontane
*
* @param GridSize
* @desc View grid line
* @default 48
*
* @param TestMapId
* @desc Event test map id
* @default -1
*
* @help
*/
/*:ja
* @plugindesc
* パラメータを変更したら「プロジェクトの保存」Ctrl+S
* @author トリアコンタン
*
* @param グリッドサイズ
* @desc ピクチャ調整中に指定サイズでグリッドを表示します。0を指定すると非表示になります。
* @default 48
*
* @param テストマップID
* @desc 任意のマップをイベントテストの舞台に設定できます。
* @default -1
*
* @help
*/
(function () {
'use strict';
if (!DataManager.isEventTest())return;
var pluginName = 'JsScript13Set';
var getParamNumber = function(paramNames, min, max) {
var value = getParamOther(paramNames);
if (arguments.length < 2) min = -Infinity;
if (arguments.length < 3) max = Infinity;
return (parseInt(value, 10) || 0).clamp(min, max);
};
var getParamOther = function(paramNames) {
if (!Array.isArray(paramNames)) paramNames = [paramNames];
for (var i = 0; i < paramNames.length; i++) {
var name = PluginManager.parameters(pluginName)[paramNames[i]];
if (name) return name;
}
return null;
};
Input.keyMapper[67] = 'copy';
var _DataManager_setupEventTest = DataManager.setupEventTest;
DataManager.setupEventTest = function() {
_DataManager_setupEventTest.call(this);
var mapId = getParamNumber(['TestMapId', 'テストマップID'], -1, 9999);
if (mapId > 0) $gamePlayer.reserveTransfer(mapId, 8, 6);
};
Game_Picture.prototype.resetMove = function(x, y) {
this._x = x;
this._y = y;
this._duration = 0;
};
var _Game_Screen_initialize = Game_Screen.prototype.initialize;
Game_Screen.prototype.initialize = function() {
_Game_Screen_initialize.call(this);
this._lastPictureX = null;
this._lastPictureY = null;
this._copyCount = 0;
this._infoPicture = '';
this._infoHelp = 'Shift:ウィンドウ表示切替 Ctrl+マウス:グリッドにスナップ Ctrl+C:座標コピー ';
this._infoCopy = '';
this._documentTitle = '';
};
var _Game_Screen_updatePictures = Game_Screen.prototype.updatePictures;
Game_Screen.prototype.updatePictures = function() {
_Game_Screen_updatePictures.call(this);
if (Utils.isNwjs() && Input.isPressed('control') && Input.isTriggered('copy')) {
if (this._lastPictureX == null || this._lastPictureY == null) return;
var clipboard = require('nw.gui').Clipboard.get();
var copyValue = '';
if (this._copyCount % 2 === 0) {
copyValue = this._lastPictureX.toString();
this._infoCopy = ' X座標[' + copyValue + ']をコピーしました。';
} else {
copyValue = this._lastPictureY.toString();
this._infoCopy = ' Y座標[' + copyValue + ']をコピーしました。';
}
clipboard.set(copyValue, 'text');
this._copyCount++;
}
var docTitle = this._infoHelp + this._infoPicture + this._infoCopy;
if (docTitle !== this._documentTitle) {
document.title = docTitle;
this._documentTitle = docTitle;
}
};
var _Scene_Map_update = Scene_Map.prototype.update;
Scene_Map.prototype.update = function() {
if (!$gameMap.isEventRunning()) this.updateEventTest();
_Scene_Map_update.call(this);
};
Scene_Map.prototype.updateEventTest = function() {
this._spriteset.checkDragPictures();
if (Input.isTriggered('shift')) {
if (!this._messageWindow.isOpen()) {
this._messageWindow.open();
} else {
this._messageWindow.close();
}
}
};
Scene_Map.prototype.isMapTouchOk = function() {
return false;
};
Spriteset_Base.prototype.checkDragPictures = function() {
this._pictureContainer.children.reverse().some(function(picture) {
return picture.checkDrag();
}, this);
this._pictureContainer.children.reverse();
};
var _Spriteset_Base_createLowerLayer = Spriteset_Base.prototype.createLowerLayer;
Spriteset_Base.prototype.createLowerLayer = function() {
_Spriteset_Base_createLowerLayer.call(this);
this.createGridSprite();
};
Spriteset_Base.prototype.createGridSprite = function() {
var size = getParamNumber(['GridSize', 'グリッドサイズ'], 0, Math.max(this.width, this.height));
if (size === 0) return;
this._gridSprite = new Sprite();
this._gridSprite.setFrame(0, 0, this.width, this.height);
var bitmap = new Bitmap(this.width, this.height);
for (var x = 0; x < this.width; x += size) {
bitmap.fillRect(x, 0, 1, this.height, 'rgba(255,255,255,1.0)');
}
for (var y = 0; y < this.height; y += size) {
bitmap.fillRect(0, y, this.width, 1, 'rgba(255,255,255,1.0)');
}
this._gridSprite.bitmap = bitmap;
this.addChild(this._gridSprite);
};
var _Sprite_Picture_initialize = Sprite_Picture.prototype.initialize;
Sprite_Picture.prototype.initialize = function(pictureId) {
_Sprite_Picture_initialize.call(this, pictureId);
this._holding = false;
this._dx = 0;
this._dy = 0;
};
Sprite_Picture.prototype.checkDrag = function() {
var picture = this.picture();
if (picture != null) {
if (this.updateDragMove()) {
var result = 'PictureNum:[' + this._pictureId + '] X:[' + this.x + '] Y:[' + this.y + ']';
$gameScreen._lastPictureX = this.x;
$gameScreen._lastPictureY = this.y;
$gameScreen._infoPicture = result;
$gameScreen._infoCopy = '';
if (!this._holding) console.log(result);
picture.resetMove(this.x, this.y);
return true;
}
}
return false;
};
Sprite_Picture.prototype.updateDragMove = function() {
if (this.isTriggered() || (this._holding && TouchInput.isPressed())) {
if (!this._holding) this.hold();
var x = TouchInput.x - this._dx;
var y = TouchInput.y - this._dy;
if (Input.isPressed('control')) {
var size = getParamNumber(['GridSize', 'グリッドサイズ'], 0, Math.max(this.width, this.height));
if (size !== 0) {
x % size > size / 2 ? x += size - x % size : x -= x % size;
y % size > size / 2 ? y += size - y % size : y -= y % size;
}
}
this.move(x, y);
return true;
} else if (this._holding) {
this.release();
return true;
}
return false;
};
Sprite_Picture.prototype.hold = function() {
this._holding = true;
this._dx = TouchInput.x - this.x;
this._dy = TouchInput.y - this.y;
this.setBlendColor([255,255,255,192]);
};
Sprite_Picture.prototype.release = function() {
this._holding = false;
this.setBlendColor([0,0,0,0]);
};
Sprite_Picture.prototype.screenWidth = function() {
return (this.width || 0) * this.scale.x;
};
Sprite_Picture.prototype.screenHeight = function() {
return (this.height || 0) * this.scale.y;
};
Sprite_Picture.prototype.screenX = function() {
return (this.x || 0) - this.anchor.x * this.screenWidth();
};
Sprite_Picture.prototype.screenY = function() {
return (this.y || 0) - this.anchor.y * this.screenHeight();
};
Sprite_Picture.prototype.minX = function() {
var width = this.screenWidth();
return Math.min(this.screenX(), this.screenX() + width);
};
Sprite_Picture.prototype.minY = function() {
var height = this.screenHeight();
return Math.min(this.screenY(), this.screenY() + height);
};
Sprite_Picture.prototype.maxX = function() {
var width = this.screenWidth();
return Math.max(this.screenX(), this.screenX() + width);
};
Sprite_Picture.prototype.maxY = function() {
var height = this.screenHeight();
return Math.max(this.screenY(), this.screenY() + height);
};
Sprite_Picture.prototype.isTouchPosInRect = function () {
var tx = TouchInput.x;
var ty = TouchInput.y;
return (tx >= this.minX() && tx <= this.maxX() &&
ty >= this.minY() && ty <= this.maxY());
};
Sprite_Picture.prototype.isTouchable = function() {
return this.bitmap != null && this.visible && this.scale.x !== 0 && this.scale.y !== 0;
};
Sprite_Picture.prototype.isTriggered = function() {
return this.isTouchEvent(TouchInput.isTriggered);
};
Sprite_Picture.prototype.isTouchEvent = function(triggerFunc) {
return this.isTouchable() && triggerFunc.call(TouchInput) && this.isTouchPosInRect();
};
})();