Skip to content

Commit 587a7fb

Browse files
authored
Merge pull request rpgtkoolmv#183 from rpgtkoolmv/progress_fps
Fix progress bar and Community_Basic.js can manipulate bar and rendering fps
2 parents f56c202 + 8e9170e commit 587a7fb

File tree

2 files changed

+77
-15
lines changed

2 files changed

+77
-15
lines changed

js/rpg_core/Graphics.js

Lines changed: 35 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -240,6 +240,16 @@ Graphics.setLoadingImage = function(src) {
240240
this._loadingImage.src = src;
241241
};
242242

243+
/**
244+
* Sets whether the progress bar is enabled.
245+
*
246+
* @static
247+
* @method setEnableProgress
248+
*/
249+
Graphics.setProgressEnabled = function(enable) {
250+
this._progressEnabled = enable;
251+
};
252+
243253
/**
244254
* Initializes the counter for displaying the "Now Loading" image.
245255
*
@@ -260,30 +270,43 @@ Graphics._setupProgress = function(){
260270
this._progressElement = document.createElement('div');
261271
this._progressElement.id = 'loading-progress';
262272
this._progressElement.width = 600;
263-
this._progressElement.height = 30;
264-
this._progressElement.style.background = 'linear-gradient(to top, gray, lightgray)';
265-
this._progressElement.style.border = '5px solid white';
266-
this._progressElement.style.borderRadius = '15px';
273+
this._progressElement.height = 300;
274+
this._progressElement.style.visibility = 'hidden';
267275

268276
this._barElement = document.createElement('div');
269277
this._barElement.id = 'loading-bar';
270-
this._barElement.style.width = '0%';
271-
this._barElement.style.height = '100%';
272-
this._barElement.style.background = 'linear-gradient(to top, lime, palegreen)';
273-
this._barElement.style.borderRadius = '10px';
278+
this._barElement.style.width = '100%';
279+
this._barElement.style.height = '10%';
280+
this._barElement.style.background = 'linear-gradient(to top, gray, lightgray)';
281+
this._barElement.style.border = '5px solid white';
282+
this._barElement.style.borderRadius = '15px';
283+
this._barElement.style.marginTop = '40%';
284+
285+
this._filledBarElement = document.createElement('div');
286+
this._filledBarElement.id = 'loading-filled-bar';
287+
this._filledBarElement.style.width = '0%';
288+
this._filledBarElement.style.height = '100%';
289+
this._filledBarElement.style.background = 'linear-gradient(to top, lime, honeydew)';
290+
this._filledBarElement.style.borderRadius = '10px';
274291

275292
this._progressElement.appendChild(this._barElement);
293+
this._barElement.appendChild(this._filledBarElement);
294+
this._updateProgress();
276295

277296
document.body.appendChild(this._progressElement);
278297
};
279298

280299
Graphics._showProgress = function(){
281-
this._progressElement.value = 0;
282-
this._progressElement.style.visibility = 'visible';
300+
if (this._progressEnabled) {
301+
this._progressElement.value = 0;
302+
this._progressElement.style.visibility = 'visible';
303+
this._progressElement.style.zIndex = 98;
304+
}
283305
};
284306

285307
Graphics._hideProgress = function(){
286308
this._progressElement.style.visibility = 'hidden';
309+
clearTimeout(this._progressTimeout);
287310
};
288311

289312
Graphics._updateProgressCount = function(countLoaded, countLoading){
@@ -294,13 +317,11 @@ Graphics._updateProgressCount = function(countLoaded, countLoading){
294317
progressValue = 100;
295318
}
296319

297-
this._barElement.style.width = progressValue + '%';
320+
this._filledBarElement.style.width = progressValue + '%';
298321
};
299322

300323
Graphics._updateProgress = function(){
301-
this._progressElement.style.zIndex = 99;
302324
this._centerElement(this._progressElement);
303-
this._progressElement.style.marginTop = 450 * this._realScale + 'px';
304325
};
305326

306327
/**
@@ -326,7 +347,6 @@ Graphics.endLoading = function() {
326347
this._clearUpperCanvas();
327348
this._upperCanvas.style.opacity = 0;
328349
this._hideProgress();
329-
clearTimeout(this._progressTimeout);
330350
};
331351

332352
/**
@@ -380,6 +400,7 @@ Graphics.eraseLoadingError = function() {
380400
*/
381401
Graphics.printError = function(name, message) {
382402
this._errorShowed = true;
403+
this._hideProgress();
383404
this.hideFps();
384405
if (this._errorPrinter) {
385406
this._updateErrorPrinter();

plugins/Community_Basic.js

Lines changed: 42 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,16 @@
6363
* @type string
6464
* @desc The message when error occurred
6565
* @default Error occurred. Please ask to the creator of this game.
66+
*
67+
* @param enableProgressBar
68+
* @type boolean
69+
* @desc Show progress bar when it takes a long time to load resources
70+
* @default true
71+
*
72+
* @param maxRenderingFps
73+
* @type number
74+
* @desc The maximum value of rendering frame per seconds (0: unlimited)
75+
* @default 0
6676
*/
6777

6878
/*:ja
@@ -135,6 +145,18 @@
135145
* @type string
136146
* @text エラーメッセージ
137147
* @default エラーが発生しました。ゲームの作者にご連絡ください。
148+
*
149+
* @param enableProgressBar
150+
* @type boolean
151+
* @text ロード進捗バー有効化
152+
* @desc ONにすると、読み込みに時間がかかっている時にロード進捗バーを表示します
153+
* @default true
154+
*
155+
* @param maxRenderingFps
156+
* @type number
157+
* @text 描画FPS上限値
158+
* @desc 描画FPSの上限値を設定します (0を指定した場合は制限なし)
159+
* @default 0
138160
*/
139161

140162
(function() {
@@ -152,12 +174,14 @@
152174
var screenWidth = toNumber(parameters['screenWidth'], 816);
153175
var screenHeight = toNumber(parameters['screenHeight'], 624);
154176
var renderingMode = parameters['renderingMode'].toLowerCase();
155-
var alwaysDash = parameters['alwaysDash'].toLowerCase() === 'true';
177+
var alwaysDash = parameters['alwaysDash'] === 'true';
156178
var textSpeed = toNumber(parameters['textSpeed'], 1);
157179
var windowWidthTo = toNumber(parameters['changeWindowWidthTo'], 0);
158180
var windowHeightTo = toNumber(parameters['changeWindowHeightTo'], 0);
181+
var maxRenderingFps = toNumber(parameters['maxRenderingFps'], 0);
159182
var autoSaveFileId = toNumber(parameters['autoSaveFileId'], 0);
160183
var errorMessage = parameters['errorMessage'];
184+
var enableProgressBar = parameters['enableProgressBar'] === 'true';
161185

162186
var windowWidth;
163187
var windowHeight;
@@ -221,6 +245,23 @@
221245
}
222246
};
223247

248+
if (maxRenderingFps) {
249+
var currentTime = Date.now();
250+
var deltaTime = 1000 / maxRenderingFps;
251+
var accumulator = 0;
252+
var _SceneManager_renderScene = SceneManager.renderScene;
253+
SceneManager.renderScene = function() {
254+
var newTime = Date.now();
255+
accumulator += newTime - currentTime;
256+
currentTime = newTime;
257+
if (accumulator >= deltaTime) {
258+
accumulator -= deltaTime;
259+
_SceneManager_renderScene.apply(this, arguments);
260+
}
261+
};
262+
}
263+
224264
DataManager.setAutoSaveFileId(autoSaveFileId);
225265
Graphics.setErrorMessage(errorMessage);
266+
Graphics.setProgressEnabled(enableProgressBar);
226267
})();

0 commit comments

Comments
 (0)