OMORI_Android/www.eng/js/plugins/Omori Map QTE.js
2024-01-15 18:44:53 +03:00

902 lines
32 KiB
JavaScript

//=============================================================================
// TDS Map QTE's
// Version: 1.5
//=============================================================================
// Add to Imported List
var Imported = Imported || {} ; Imported.TDS_MapQTE = true;
// Initialize Alias Object
var _TDS_ = _TDS_ || {} ; _TDS_.MapQTE = _TDS_.MapQTE || {};
//=============================================================================
/*:
* @plugindesc
* This plugin add event Quick Time Events.
*
* @author TDS
*
* @param Active QTE Switch ID
* @desc ID of the switch to turn ON or OFF when QTE's are active.
* @default 1
*
* @param QTE Result Variable ID
* @desc ID of the variable to put QTE results into.
* @default 1
*/
//=============================================================================
// Node.js path
var path = require('path');
// Get Parameters
var parameters = PluginManager.parameters("Omori Map QTE");
// Initialize Parameters
_TDS_.MapQTE.params = {};
_TDS_.MapQTE.params.activeQTESwitchID = Number(parameters['Active QTE Switch ID'] || 1);
_TDS_.MapQTE.params.QTEResultVariableID = Number(parameters['QTE Result Variable ID'] || 1);
//ImageManager.reserveSystem('QTE Arrow', 0, 1);
//ImageManager.reserveSystem('QTE_OMORI_ATLAS', 0, 1);
//=============================================================================
// ** Game_Interpreter
//-----------------------------------------------------------------------------
// The interpreter for running event commands.
//=============================================================================
// Alias Listing
//=============================================================================
_TDS_.MapQTE.Game_Interpreter_updateWaitMode = Game_Interpreter.prototype.updateWaitMode;
//=============================================================================
// * Update Wait Mode
//=============================================================================
Game_Interpreter.prototype.updateWaitMode = function() {
// If Input Mode is for wait
if (this._waitMode === 'QTE') {
// If Input has been pressed
if (!$gameSwitches.value(_TDS_.MapQTE.params.activeQTESwitchID)) { return false; }
return true;
};
// Return Original Function
return _TDS_.MapQTE.Game_Interpreter_updateWaitMode.call(this);
};
//=============================================================================
// * Start Smash QTE
//=============================================================================
Game_Interpreter.prototype.startSmashQTE = function(segments, time, width) {
// Turn ON QTE Switch
$gameSwitches.setValue(_TDS_.MapQTE.params.activeQTESwitchID, true);
// Get Window
var win = SceneManager._scene._QTEWindowSmash;
// If Window Exists
if (win) {
win.open();
win.activate();
win.setup(segments, time, width)
};
this.setWaitMode('QTE');
};
//=============================================================================
// * Start Stop the Arrow QTE
//=============================================================================
Game_Interpreter.prototype.startStopTheArrowQTE = function(direction, delay, x, y) {
// Turn ON QTE Switch
$gameSwitches.setValue(_TDS_.MapQTE.params.activeQTESwitchID, true);
// Get Window
var win = SceneManager._scene._QTEWindowStopTheArrow;
// If Window Exists
if (win) {
win.open();
win.activate();
win.setup(direction, delay)
if (x !== undefined) { win.x = x; };
if (y !== undefined) { win.y = y; };
};
this.setWaitMode('QTE');
};
//=============================================================================
// * Start Hit the Mark QTE
//=============================================================================
Game_Interpreter.prototype.startHitTheMarkQTE = function(speed, index, x, y) {
// Turn ON QTE Switch
$gameSwitches.setValue(_TDS_.MapQTE.params.activeQTESwitchID, true);
// Get Window
var win = SceneManager._scene._QTEWindowHitTheMark;
// If Window Exists
if (win) {
if (index === undefined) { index = Math.randomInt(12); };
win.open();
win.activate();
win.setup(speed, index);
if (x !== undefined) { win.x = x; };
if (y !== undefined) { win.y = y; };
};
this.setWaitMode('QTE');
};
//=============================================================================
// ** Scene_Map
//-----------------------------------------------------------------------------
// The scene class of the map screen.
//=============================================================================
// Alias Listing
//=============================================================================
_TDS_.MapQTE.Scene_Map_createDisplayObjects = Scene_Map.prototype.createDisplayObjects;
//=============================================================================
// * Create Display Objects
//=============================================================================
Scene_Map.prototype.createDisplayObjects = function() {
// Run Original Function
_TDS_.MapQTE.Scene_Map_createDisplayObjects.call(this);
// Create QTE Windows
this.createQTEWindows();
};
//=============================================================================
// * Create QTE Windows
//=============================================================================
Scene_Map.prototype.createQTEWindows = function() {
// Create Smash QTE Window
this._QTEWindowSmash = new Window_OmoriMapQTESmash();
this.addChild(this._QTEWindowSmash);
// Create Stop the Arrow QTE window
this._QTEWindowStopTheArrow = new Window_OmoriStopTheArrow();
this.addChild(this._QTEWindowStopTheArrow);
// // Create Hit The Mark QTE Window
this._QTEWindowHitTheMark = new Window_OmoriHitTheMark();
this.addChild(this._QTEWindowHitTheMark)
};
//=============================================================================
// ** Window_OmoriMapQTESmash
//-----------------------------------------------------------------------------
// This window is used to display the Smash QTE.
//=============================================================================
function Window_OmoriMapQTESmash() { this.initialize.apply(this, arguments); }
Window_OmoriMapQTESmash.prototype = Object.create(Window_Base.prototype);
Window_OmoriMapQTESmash.prototype.constructor = Window_OmoriMapQTESmash;
//=============================================================================
// * Initialize Object
//=============================================================================
Window_OmoriMapQTESmash.prototype.initialize = function() {
// Completed Segments
this._segment = 0;
// Press Count
this._pressCount = 0;
// Press Timer
this._timer = 300;
// Max Timer
this._maxTimer = 300;
// Segment Presses
this._segmentPresses = [5];
// Alt State & Alt Delay
this._altState = 0; this._altDelay = 0;
// Close Delay
this._closeDelay = 30;
// Super Call
Window_Base.prototype.initialize.call(this, 14, 14, this.windowWidth(), this.windowHeight());
// Create Bar Sprite
this.createBarSprite();
// Create Parallax BAckground
this.createParallaxBack();
this.deactivate();
this.openness = 0;
};
//=============================================================================
// * Settings
//=============================================================================
Window_OmoriMapQTESmash.prototype.standardPadding = function() { return 0; };
Window_OmoriMapQTESmash.prototype.windowWidth = function() { return 300; };
Window_OmoriMapQTESmash.prototype.windowHeight = function() { return 42 + 5; };
//=============================================================================
// * Define Openness
//=============================================================================
Object.defineProperty(Window_OmoriMapQTESmash.prototype, 'openness', {
get: function() { return this._openness; },
set: function(value) {
// Super Call
Object.getOwnPropertyDescriptor(Window.prototype, 'openness').set.call(this, value);
// If Background Exists
if (this._smashBarSprite) {
var scale = this._openness / 255;
this._smashBarSprite.scale.y = scale
this._smashBarSprite.y = 5 + (this.height / 2 * (1 - this._openness / 255));
this._parallaxBack.y = 4 + (this.height / 2 * (1 - this._openness / 255));
this._parallaxBack.scale.y = scale
this._timeBarSprite.y = (this.height - 7) + (this.height / 2 * (1 - this._openness / 255));
this._timeBarSprite.scale.y = scale;
};
},
configurable: true
});
//=============================================================================
// * Create Bar Sprite
//=============================================================================
Window_OmoriMapQTESmash.prototype.createParallaxBack = function() {
this._parallaxBack = new TilingSprite();
this._parallaxBack.bitmap = ImageManager.loadSystem('QTE Smash Background');
this._parallaxBack.move(5, 5, this.width - 10, 32);
this._parallaxBack.opacity = 180
this.addChildToBack(this._parallaxBack);
}
//=============================================================================
// * Create Bar Sprite
//=============================================================================
Window_OmoriMapQTESmash.prototype.createBarSprite = function() {
// Create Bitmap
var bitmap = new Bitmap(this.width - 8, this.height - 37);
bitmap.fillAll('rgba(255, 0, 0, 1)');
// Create Bar Sprite
this._smashBarSprite = new Sprite(bitmap);
this._smashBarSprite.width = 0
this._smashBarSprite.opacity = 180
this._smashBarSprite.x = 5;
this._smashBarSprite.y = 5;
this.addChildToBack(this._smashBarSprite);
// Create Time Bar Sprite
this._timeBarSprite = new Sprite();
this._timeBarSprite.x = 5;
this._timeBarSprite.y = this.height - 7;
this.addChild(this._timeBarSprite);
};
//=============================================================================
// * Setup
//=============================================================================
Window_OmoriMapQTESmash.prototype.setup = function(segments = [5], time = 10, width = 400) {
// Set Values
this._segment = 0;
this._pressCount = 0;
this._timer = time
this._maxTimer = time;
this._segmentPresses = segments.clone();
this._closeDelay = 61;
// Alt State & Alt Delay
this._altState = 0; this._altDelay = 0;
// Reset Blend Color
this._smashBarSprite.setBlendColor([0, 0, 0, 0]);
// Refresh Contents
this.refresh();
// Update Smash Bar
this.updateSmashBar();
// Update Timer Bar
this.updateTimeBar();
};
//=============================================================================
// * Refresh
//=============================================================================
Window_OmoriMapQTESmash.prototype.refresh = function() {
// Create Bitmap
var bitmap = new Bitmap(this.width - 10, this.height - 15);
bitmap.fillAll('rgba(255, 0, 0, 1)');
// Create Bar Sprite
this._smashBarSprite.bitmap = bitmap;
// Recreate Contents
this.createContents();
// Create Time Bar Bitmap
bitmap = new Bitmap(this.width - 10, 2);
bitmap.fillAll('rgba(255, 255, 0, 1)');
this._timeBarSprite.bitmap = bitmap;
var segments = this._segmentPresses.length;
this._segmentWidth = this.width / segments;
this.contents.fillRect(4, this.height - 11, this.width - 8, 2, 'rgba(0, 0, 0, 1)');
this.contents.fillRect(4, this.height - 10, this.width - 8, 2, 'rgba(255, 255, 255, 1)');
// console.log( this._segmentWidth )
for (var i = 1; i < segments; i++) {
var x = i * this._segmentWidth;
this.contents.fillRect(x - 1, 4, 3, this.height - 14, 'rgba(0, 0, 0, 1)');
this.contents.fillRect(x, 4, 1, this.height - 14, 'rgba(255, 255, 255, 1)');
};
this.x = (Graphics.width - this.width) / 2;
this.y = (Graphics.height - this.height) / 2;
};
//=============================================================================
// * Finish Processing
//=============================================================================
Window_OmoriMapQTESmash.prototype.finish = function() {
// Turn ON QTE Switch
$gameSwitches.setValue(_TDS_.MapQTE.params.activeQTESwitchID, false);
// Set Achieved Segment
$gameVariables.setValue(_TDS_.MapQTE.params.QTEResultVariableID, this._segment);
// Close & Deactivate
this.close(); this.deactivate();
};
//=============================================================================
// * Are Smash Keys Being Triggered
//=============================================================================
Window_OmoriMapQTESmash.prototype.isSmashTriggered = function() {
return Input.isTriggered('ok');
};
//=============================================================================
// * Frame Update
//=============================================================================
Window_OmoriMapQTESmash.prototype.update = function() {
// Super Call
Window_Base.prototype.update.call(this);
// If not open or active
if (!this.isOpen() || !this.active) { return; };
// Get Background Speed Rate
var rate = this._segment / (Math.max(this._segmentPresses.length-1,1));
// Get Speed
var speed = Math.max(rate * 5, 1.5);
// Move Parallax Back
this._parallaxBack.origin.x -= speed;
// If Timer is 0 or less
if (this._timer <= 0) {
// Finish
this.finish();
return;
}
if (this._timer > 0) { this._timer--; this.updateTimeBar(); };
if (this._segment < this._segmentPresses.length) {
if (this.isSmashTriggered()) {
// Increase Press Count
this._pressCount++;
if (this._pressCount >= this._segmentPresses[this._segment]) {
this._segment++;
this._pressCount = 0;
this.updateSmashBar();
};
};
} else {
// Decrease alt delay
this._altDelay--;
if (this._altDelay <= 0) {
if (this._altState === 0) {
this._smashBarSprite.setBlendColor([255, 255, 255, 255])
} else {
this._smashBarSprite.setBlendColor([0, 0, 0, 0]);
};
this._altState = (this._altState + 1) % 2
this._altDelay = 10;
};
// Decrease Close Delay
if (this._closeDelay > 0) { this._closeDelay--; }
// If Timer is 0 or less or close delay is 0 or less
if (this._timer <= 0 || this._closeDelay <= 0) { this.finish() }
};
};
//=============================================================================
// * Update Smash Bar
//=============================================================================
Window_OmoriMapQTESmash.prototype.updateSmashBar = function() {
// Get Original Width
var width = this._segment * (this._segmentWidth );
this._smashBarSprite.width = width - 3;
};
//=============================================================================
// * Update Time Bar
//=============================================================================
Window_OmoriMapQTESmash.prototype.updateTimeBar = function() {
// Get Original Width
var width = this._timeBarSprite.bitmap.width;
var rate = this._timer / this._maxTimer;
// Set Timer Width
this._timeBarSprite.width = rate * width;
};
//=============================================================================
// ** Window_OmoriStopTheArrow
//-----------------------------------------------------------------------------
// This window is used to display the stop the arrow QTE.
//=============================================================================
function Window_OmoriStopTheArrow() { this.initialize.apply(this, arguments); }
Window_OmoriStopTheArrow.prototype = Object.create(Window_Base.prototype);
Window_OmoriStopTheArrow.prototype.constructor = Window_OmoriStopTheArrow;
//=============================================================================
// * Initialize Object
//=============================================================================
Window_OmoriStopTheArrow.prototype.initialize = function(index) {
this._arrowIndex = 0;
this._arrowDelay = 10;
this._arrowDelayCount = 0;
// Arrow Direction (0: Right, 1: Left)
this._arrowDirection = 0;
// Facing Direction
this._facingDirection = 'up';
// Set Container Y
this._containerY = 0;
// Super Call
Window_Base.prototype.initialize.call(this, 14, 200, this.windowWidth(), this.windowHeight());
ImageManager.loadSystem('QTE Arrow')
// Create Background Sprite
this.createBackgroundSprite();
this.createArrowSprites();
// Center Window
this.x = (Graphics.width - this.width) / 2;
this.y = (Graphics.height - this.height) / 2;
// Close
this.openness = 0;
this.deactivate();
};
//=============================================================================
// * Settings
//=============================================================================
Window_OmoriStopTheArrow.prototype.standardPadding = function() { return 0; };
Window_OmoriStopTheArrow.prototype.windowWidth = function() { return 96; };
Window_OmoriStopTheArrow.prototype.windowHeight = function() { return 83; };
//=============================================================================
// * Define Openness
//=============================================================================
Object.defineProperty(Window_OmoriStopTheArrow.prototype, 'openness', {
get: function() { return this._openness; },
set: function(value) {
// Super Call
Object.getOwnPropertyDescriptor(Window.prototype, 'openness').set.call(this, value);
// If Background Exists
if (this._arrowContainer) {
var scale = this._openness / 255;
if (['up', 'down'].contains(this._facingDirection)) {
this._arrowContainer.scale.x = 1;
this._arrowContainer.scale.y = scale;
} else {
this._arrowContainer.scale.x = scale;
this._arrowContainer.scale.y = 1;
}
};
},
configurable: true
});
//=============================================================================
// * Create Background Sprite
//=============================================================================
Window_OmoriStopTheArrow.prototype.createBackgroundSprite = function() {
// Create Arrow Container
this._arrowContainer = new Sprite();
// this._arrowContainer.bitmap.fillAll('rgba(255, 0, 0, 1)');
this._arrowContainer.pivot.x = 43;
this._arrowContainer.pivot.y = 36.5;
this._arrowContainer.x = this.width / 2;
this._arrowContainer.y = this.height / 2;
this.addChildToBack(this._arrowContainer);
// Create Background Sprite
// this._backgroundSprite = new Sprite(ImageManager.loadSystem('QTE Arrow'));
this._backgroundSprite = new Sprite(ImageManager.loadSystem('QTE Arrow'));
this._backgroundSprite.bitmap.addLoadListener(() => {this._backgroundSprite.setFrame(0, 0, 86,this._backgroundSprite.height)})
// this._backgroundSprite.opacity = 120;
// this._backgroundSprite.pivot.x = 43;
// this._backgroundSprite.pivot.y = 36.5;
// this._backgroundSprite.rotation = Math.PI / 16;
// this._backgroundSprite.x = this.width / 2;
// this._backgroundSprite.y = this.height / 2;
this._arrowContainer.addChild(this._backgroundSprite);
// this._backgroundSprite.rotation = (0 * 90) * Math.PI / 180
};
//=============================================================================
// * Create Arrow Sprites
//=============================================================================
Window_OmoriStopTheArrow.prototype.createArrowSprites = function() {
// Initialize Arrow Sprites Array
this._arrowSprites = [];
var bit = ImageManager.loadSystem('QTE Arrow');
// Create Sprites
bit.addLoadListener(() => {
for (var i = 0; i < 3; i++) {
var sprite = new Sprite(ImageManager.loadSystem('QTE Arrow'));
this._arrowSprites[i] = sprite;
this._arrowContainer.addChild(sprite);
};
var sprite = this._arrowSprites[0];
sprite.setFrame(86, 0, 39, sprite.bitmap.height);
sprite.x = 7 - 5; sprite.y = 17 - 5;
sprite = this._arrowSprites[1];
sprite.setFrame(125, 0, 36, sprite.bitmap.height);
sprite.x = 35 - 5; sprite.y = 12 - 5;
sprite = this._arrowSprites[2];
sprite.setFrame(163, 0, 36, sprite.bitmap.height);
sprite.x = 63 - 5; sprite.y = 17 - 5;
// Update Arrows Visibility
this.updateArrowsVisibility();
})
};
//=============================================================================
// * Setup
//=============================================================================
Window_OmoriStopTheArrow.prototype.setup = function(direction = 'up', delay = 10) {
// Direction Switch Case
switch (direction.toLowerCase()) {
case 'up':
this._arrowContainer.rotation = (0 * 90) * Math.PI / 180
this.width = 96; this.height = 83;
break;
case 'left':
this._arrowContainer.rotation = (3 * 90) * Math.PI / 180
this.width = 96 - 14; this.height = 83 + 12;
break;
case 'right':
this._arrowContainer.rotation = (1 * 90) * Math.PI / 180
this.width = 96 - 14; this.height = 83 + 12;
break;
case 'down':
this.width = 96; this.height = 83;
this._arrowContainer.rotation = (2 * 90) * Math.PI / 180
break;
};
// Set Facing Direction
this._facingDirection = direction;
// Reset Delay
this._arrowIndex = Math.randomInt(this._arrowSprites.length);
this._arrowDelay = delay;
this._arrowDelayCount = 0;
// Set Arrow Direction
this._arrowDirection = 0;
// Center Background Sprite
this._arrowContainer.x = this.width / 2;
this._arrowContainer.y = this.height / 2;
// Update Arrow Visibility
this.updateArrowsVisibility();
};
//=============================================================================
// * Frame Update
//=============================================================================
Window_OmoriStopTheArrow.prototype.update = function() {
// Super Call
Window_Base.prototype.update.call(this);
// if (Input.isTriggered('control')) {
// if (this.isOpen()) { this.close(); };
// if (this.isClosed()) { this.open();};
// };
// var directions = ['up', 'down', 'left', 'right'];
// for (var i = 0; i < directions.length; i++) {
// // Get Direction
// var direction = directions[i];
// if (Input.isTriggered(direction)) {
// this.setup(directions[i])
// break;
// }
// }
// If Open & Active
if (this.active && this.isOpen()) {
// If OK Input
if (Input.isTriggered('ok')) {
this.finish();
return
};
// Increase Arrow Delay Count
this._arrowDelayCount++;
// If Arrow Delay Count is equal or more than arrow delay
if (this._arrowDelayCount >= this._arrowDelay) {
// Reset Arrow Delay Count
this._arrowDelayCount = 0;
// If Arrow Direction is 0
if (this._arrowDirection === 0) {
// If Arrow has reached the other side
if (this._arrowIndex >= this._arrowSprites.length-1) {
// Reduce Index
this._arrowIndex--;
AudioManager.playSe({name: "sys_cursor1", pan: 0, pitch: 100, volume: 90});
// Set Arrow Direction
this._arrowDirection = 1;
} else {
// Increase Index
AudioManager.playSe({name: "SYS_cursor", pan: 0, pitch: 100, volume: 90});
this._arrowIndex++;
};
} else {
if (this._arrowIndex <= 0) {
// Increase Index
AudioManager.playSe({name: "sys_cursor1", pan: 0, pitch: 100, volume: 90});
this._arrowIndex++;
// Set Arrow Direction
this._arrowDirection = 0;
} else {
AudioManager.playSe({name: "SYS_cursor", pan: 0, pitch: 100, volume: 90});
// Reduce Index
this._arrowIndex--;
};
}
this.updateArrowsVisibility();
};
};
};
//=============================================================================
// * Update Visibility of Arrows
//=============================================================================
Window_OmoriStopTheArrow.prototype.updateArrowsVisibility = function() {
for (var i = 0; i < this._arrowSprites.length; i++) {
this._arrowSprites[i].visible = (this._arrowIndex === i);
};
};
//=============================================================================
// * Finish Processing
//=============================================================================
Window_OmoriStopTheArrow.prototype.finish = function() {
// Turn ON QTE Switch
$gameSwitches.setValue(_TDS_.MapQTE.params.activeQTESwitchID, false);
// Set Achieved Segment
$gameVariables.setValue(_TDS_.MapQTE.params.QTEResultVariableID, this._arrowIndex);
// Close & Deactivate
this.close(); this.deactivate();
};
//=============================================================================
// ** Window_OmoriHitTheMark
//-----------------------------------------------------------------------------
// This window is used to display the hit the mark QTE.
//=============================================================================
function Window_OmoriHitTheMark() { this.initialize.apply(this, arguments); }
Window_OmoriHitTheMark.prototype = Object.create(Window_Base.prototype);
Window_OmoriHitTheMark.prototype.constructor = Window_OmoriHitTheMark;
//=============================================================================
// * Initialize Object
//=============================================================================
Window_OmoriHitTheMark.prototype.initialize = function() {
// Pointer Move Speed
this._speed = 3;
// Movement Direction
this._direction = 0;
// Set Target Index
this._targetIndex = 0;
// Set Target Width
this._targetWidth = 3 + (this._speed * 2);
// Target X
this._targetX = 0;
// Super Call
Window_Base.prototype.initialize.call(this, 14, 0, this.windowWidth(), this.windowHeight());
// Create Background Sprite
this.createBackgroundSprite();
// Create Pointer
this.createPointer();
// Center Window
this.x = (Graphics.width - this.width) / 2;
this.y = (Graphics.height - this.height) / 2;
// Refresh Contents
this.refresh();
this.deactivate();
this.openness = 0;
};
//=============================================================================
// * Settings
//=============================================================================
Window_OmoriHitTheMark.prototype.standardPadding = function() { return 0; };
Window_OmoriHitTheMark.prototype.windowWidth = function() { return 216; };
Window_OmoriHitTheMark.prototype.windowHeight = function() { return 66; };
//=============================================================================
// * Define Openness
//=============================================================================
Object.defineProperty(Window_OmoriHitTheMark.prototype, 'openness', {
get: function() { return this._openness; },
set: function(value) {
// Super Call
Object.getOwnPropertyDescriptor(Window.prototype, 'openness').set.call(this, value);
// If Background Sprite Exists
if (this._backgroundSprite) {
var scale = this._openness / 255;
this._backgroundSprite.scale.y = scale;
};
// If Background Exists
if (this._smashBarSprite) {
var scale = this._openness / 255;
this._smashBarSprite.scale.y = scale
this._smashBarSprite.y = 5 + (this.height / 2 * (1 - this._openness / 255));
this._parallaxBack.y = 4 + (this.height / 2 * (1 - this._openness / 255));
this._parallaxBack.scale.y = scale
this._timeBarSprite.y = (this.height - 7) + (this.height / 2 * (1 - this._openness / 255));
this._timeBarSprite.scale.y = scale;
};
},
configurable: true
});
//=============================================================================
// * Create Background Sprite
//=============================================================================
Window_OmoriHitTheMark.prototype.createBackgroundSprite = function() {
// Create Background Sprite
this._backgroundSprite = new Sprite(ImageManager.loadSystem('QTE_OMORI_ATLAS'));
this._backgroundSprite.bitmap.addLoadListener(() => {
this._backgroundSprite.setFrame(0, 0, 206, 56);
this._backgroundSprite.x = 5;
this._backgroundSprite.y = 33;
this._backgroundSprite.anchor.y = 0.5;
})
this.addChildToBack(this._backgroundSprite);
};
//=============================================================================
// * Create Pointer Sprite
//=============================================================================
Window_OmoriHitTheMark.prototype.createPointer = function() {
// // Create Pointer Bitmap
// var bitmap = new Bitmap(12, 6);
// for (var i = 0; i < 6; i++) {
// var x = i
// var y = bitmap.height - i;
// var w = bitmap.width - (i * 2)
// bitmap.fillRect(x, y, w, 1, 'rgba(255, 255, 255, 1)');
// };
// // Create Pointer
// this._pointer = new Sprite(bitmap);
// this._pointer.x = 32
// this._pointer.anchor.set(0.5, 0.5)
// this._pointer.y = this.height - 8;
// this._pointer.visible = false;
// this.addChild(this._pointer);
// Create Pointer
this._pointer = new Sprite(ImageManager.loadSystem('ACSArrows'));
this._pointer.setFrame(3 * 32, 0, 32, 29);
this._pointer.x = 32
this._pointer.anchor.set(0.5, 0.5)
this._pointer.y = this.height + 5;
this._pointer.visible = false;
this.addChild(this._pointer);
};
//=============================================================================
// * Setup
//=============================================================================
Window_OmoriHitTheMark.prototype.setup = function(speed, index) {
// Pointer Move Speed
this._speed = speed;
// Movement Direction
this._direction = 0;
// Set Target Index Randomly
this._targetIndex = index;
// Set Stop Flag to false
this._stop = false;
// Redraw Contents
this.refresh();
};
//=============================================================================
// * Refresh
//=============================================================================
Window_OmoriHitTheMark.prototype.refresh = function() {
// Clear Contents
this.contents.clear();
// Get Bitmap
var bitmap = ImageManager.loadSystem('QTE_OMORI_ATLAS');
// console.log(lineSpaceWidth)
var index = this._targetIndex;
// Get X Position
var x = 11 + (index * 17) - index;
// Set Paint Opacity
this.contents.paintOpacity = 160;
bitmap.addLoadListener(() => {
switch (this._speed) {
case 2:
// Set Target Width
this._targetWidth = 9;
// Adjust X Position by speed
x -= 4;
// Transfer Bitmap to window
this.contents.blt(bitmap, 209, 0, this._targetWidth, bitmap.height, x, 0);
break;
case 4:
// Adjust X Position by speed
x -= 7;
// Set Target Width
this._targetWidth = 15;
// Transfer Bitmap to window
this.contents.blt(bitmap, 225, 0, this._targetWidth, bitmap.height, x, 0);
break;
};
this.contents.paintOpacity = 255;
})
// Set Target X
this._targetX = x;
// Set Paint Opacity
};
//=============================================================================
// * Finish Processing
//=============================================================================
Window_OmoriHitTheMark.prototype.finish = function() {
var padding = 4;
var startX = this._targetX - padding;
var endX = this._targetX + this._targetWidth + padding;
// Check if in Area
var inArea = (startX < this._pointer.x && this._pointer.x < endX);
// Turn Off QTE Switch
$gameSwitches.setValue(_TDS_.MapQTE.params.activeQTESwitchID, false);
// Set Achieved Segment
$gameVariables.setValue(_TDS_.MapQTE.params.QTEResultVariableID, inArea ? 1 : 0);
// Close & Deactivate
this.close(); this.deactivate();
// Set Visibility to true
this._pointer.visible = false;
}
//=============================================================================
// * Frame Update
//=============================================================================
Window_OmoriHitTheMark.prototype.update = function() {
// Super Call
Window_Base.prototype.update.call(this);
// Return if Stopped
if (this._stop || !this.active) { return }
// Set Visibility to true
this._pointer.visible = true;
// If Ok Triggered
if (Input.isTriggered('ok')) {
// Set stop flag to true
this._stop = true;
// Finish
this.finish();
return
};
// Get Speed
var speed = this._speed;
// Get Left & Right Borders
var left = 11;
var right = this.width - 11;
// If Direction is 0 (Left)
if (this._direction === 0) {
if (this._pointer.x <= left ) {
this._direction = 1;
} else {
this._pointer.x = Math.max(this._pointer.x - speed, left);
};
} else {
if (this._pointer.x >= right) {
this._direction = 0;
} else {
this._pointer.x = Math.min(this._pointer.x + speed, right);
};
};
};