add loading screen prototype

This commit is contained in:
Hyun Ahn 2023-11-29 20:30:54 +09:00
parent ff17c51286
commit ad08aeab04
2 changed files with 293 additions and 259 deletions

View File

@ -23,7 +23,6 @@ import Battle, { BattleType, FixedBattleConfig, fixedBattles } from './battle';
import { GameMode } from './game-mode';
import SpritePipeline from './pipelines/sprite';
import PartyExpBar from './ui/party-exp-bar';
import { TrainerType, trainerConfigs } from './data/trainer-type';
import Trainer from './trainer';
import TrainerData from './system/trainer-data';
import SoundFade from 'phaser3-rex-plugins/plugins/soundfade';
@ -140,205 +139,50 @@ export default class BattleScene extends Phaser.Scene {
this.phaseQueuePrependSpliceIndex = -1;
}
loadImage(key: string, folder: string, filename?: string) {
if (!filename)
filename = `${key}.png`;
this.load.image(key, `images/${folder}/${filename}`);
}
loadSe(key: string, folder?: string, filenames?: string | string[]) {
if (!filenames) filenames = `${key}.wav`;
if (!folder) folder = "";
else folder += "/";
if (!Array.isArray(filenames)) filenames = [filenames];
for (let f of filenames as string[]) {
this.load.audio(key, `audio/se/${folder}${f}`);
}
}
loadAtlas(key: string, folder: string, filenameRoot?: string) {
if (!filenameRoot)
filenameRoot = key;
if (folder)
folder += '/';
this.load.atlas(key, `images/${folder}${filenameRoot}.png`, `images/${folder}/${filenameRoot}.json`);
}
loadSpritesheet(key: string, folder: string, size: integer, filename?: string) {
if (!filename)
filename = `${key}.png`;
this.load.spritesheet(key, `images/${folder}/${filename}`, { frameWidth: size, frameHeight: size });
}
loadSe(key: string, folder?: string, filenames?: string | string[]) {
if (!filenames)
filenames = `${key}.wav`;
if (!folder)
folder = '';
else
folder += '/';
if (!Array.isArray(filenames))
filenames = [ filenames ];
for (let f of filenames as string[]) {
this.load.audio(key, `audio/se/${folder}${f}`);
}
}
if (!filenameRoot) filenameRoot = key;
if (folder) folder += "/";
this.load.atlas(
key,
`images/${folder}${filenameRoot}.png`,
`images/${folder}/${filenameRoot}.json`
);
}
loadBgm(key: string, filename?: string) {
if (!filename)
filename = `${key}.mp3`;
this.load.audio(key, `audio/bgm/${filename}`);
}
if (!filename) filename = `${key}.mp3`;
this.load.audio(key, `audio/bgm/${filename}`);
}
preload() {
// Load menu images
this.loadImage('bg', 'ui');
this.loadImage('bg_command', 'ui');
this.loadImage('bg_fight', 'ui');
this.loadAtlas('prompt', 'ui');
this.loadImage('cursor', 'ui');
this.loadImage('window', 'ui');
this.loadImage('namebox', 'ui');
this.loadImage('pbinfo_player', 'ui');
this.loadImage('pbinfo_player_mini', 'ui');
this.loadImage('pbinfo_enemy_mini', 'ui');
this.loadImage('overlay_lv', 'ui');
this.loadAtlas('numbers', 'ui');
this.loadAtlas('numbers_red', 'ui');
this.loadAtlas('overlay_hp', 'ui');
this.loadImage('overlay_exp', 'ui');
this.loadImage('icon_owned', 'ui');
this.loadImage('ability_bar', 'ui');
this.loadImage('party_exp_bar', 'ui');
this.loadImage('achv_bar', 'ui');
this.loadImage('achv_bar_2', 'ui');
this.loadImage('achv_bar_3', 'ui');
this.loadImage('achv_bar_4', 'ui');
this.loadImage('shiny_star', 'ui', 'shiny.png');
this.loadImage('icon_spliced', 'ui');
loadSpritesheet(
key: string,
folder: string,
size: integer,
filename?: string
) {
if (!filename) filename = `${key}.png`;
this.load.spritesheet(key, `images/${folder}/${filename}`, {
frameWidth: size,
frameHeight: size,
});
}
this.loadImage('pb_tray_overlay_player', 'ui');
this.loadImage('pb_tray_overlay_enemy', 'ui');
this.loadAtlas('pb_tray_ball', 'ui');
loadImage(key: string, folder: string, filename?: string) {
if (!filename) filename = `${key}.png`;
this.load.image(key, `images/${folder}/${filename}`);
}
this.loadImage('party_bg', 'ui');
this.loadImage('party_bg_double', 'ui');
this.loadAtlas('party_slot_main', 'ui');
this.loadAtlas('party_slot', 'ui');
this.loadImage('party_slot_overlay_lv', 'ui');
this.loadImage('party_slot_hp_bar', 'ui');
this.loadAtlas('party_slot_hp_overlay', 'ui');
this.loadAtlas('party_pb', 'ui');
this.loadImage('party_message', 'ui');
this.loadImage('party_message_large', 'ui');
this.loadImage('party_message_options', 'ui');
this.loadImage('party_message_options_wide', 'ui');
this.loadAtlas('party_cancel', 'ui');
this.loadImage('summary_bg', 'ui');
this.loadImage('summary_overlay_shiny', 'ui');
this.loadImage('summary_profile', 'ui');
this.loadImage('summary_status', 'ui');
this.loadImage('summary_stats', 'ui');
this.loadImage('summary_stats_overlay_exp', 'ui');
this.loadImage('summary_moves', 'ui');
this.loadImage('summary_moves_effect', 'ui');
this.loadImage('summary_moves_overlay_row', 'ui');
this.loadImage('summary_moves_overlay_pp', 'ui');
this.loadAtlas('summary_moves_cursor', 'ui');
for (let t = 1; t <= 3; t++)
this.loadImage(`summary_tabs_${t}`, 'ui');
for (let o = 1; o <= 3; o++)
this.loadImage(`option_select_window_${o}`, 'ui');
this.loadImage('starter_select_bg', 'ui');
this.loadImage('starter_select_message', 'ui');
this.loadImage('starter_select_cursor', 'ui');
this.loadImage('starter_select_cursor_highlight', 'ui');
this.loadImage('starter_select_cursor_pokerus', 'ui');
this.loadImage('starter_select_gen_cursor', 'ui');
this.loadImage('starter_select_gen_cursor_highlight', 'ui');
this.loadImage('default_bg', 'arenas');
// Load arena images
Utils.getEnumValues(Biome).map(bt => {
const btKey = Biome[bt].toLowerCase();
this.loadImage(`${btKey}_bg`, 'arenas');
this.loadImage(`${btKey}_a`, 'arenas');
this.loadImage(`${btKey}_b`, 'arenas');
if (getBiomeHasProps(bt)) {
for (let p = 1; p <= 3; p++)
this.loadImage(`${btKey}_b_${p}`, 'arenas')
}
});
// Load trainer images
this.loadImage('trainer_m', 'trainer');
this.loadAtlas('trainer_m_pb', 'trainer');
Utils.getEnumValues(TrainerType).map(tt => {
const config = trainerConfigs[tt];
this.loadAtlas(config.getKey(), 'trainer');
if (config.isDouble)
this.loadAtlas(config.getKey(true), 'trainer');
});
// Load pokemon-related images
this.loadImage(`pkmn__back__sub`, 'pokemon/back', 'sub.png');
this.loadImage(`pkmn__sub`, 'pokemon', 'sub.png');
this.loadAtlas('battle_stats', 'effects');
this.loadAtlas('shiny', 'effects');
this.loadImage('evo_sparkle', 'effects');
this.load.video('evo_bg', 'images/effects/evo_bg.mp4', true);
this.loadAtlas('pb', '');
this.loadAtlas('items', '');
this.loadAtlas('types', '');
this.loadAtlas('statuses', '');
this.loadAtlas('categories', '');
for (let i = 0; i < 7; i++)
this.loadAtlas(`pokemon_icons_${i}`, 'ui');
this.loadSe('select');
this.loadSe('menu_open');
this.loadSe('hit');
this.loadSe('hit_strong');
this.loadSe('hit_weak');
this.loadSe('stat_up');
this.loadSe('stat_down');
this.loadSe('faint');
this.loadSe('flee');
this.loadSe('low_hp');
this.loadSe('exp');
this.loadSe('level_up');
this.loadSe('sparkle');
this.loadSe('restore');
this.loadSe('shine');
this.loadSe('charge');
this.loadSe('beam');
this.loadSe('upgrade');
this.loadSe('buy');
this.loadSe('achv');
this.loadSe('error');
this.loadSe('pb_rel');
this.loadSe('pb_throw');
this.loadSe('pb_bounce_1');
this.loadSe('pb_bounce_2');
this.loadSe('pb_move');
this.loadSe('pb_catch');
this.loadSe('pb_lock');
this.loadSe('pb_tray_enter');
this.loadSe('pb_tray_ball');
this.loadSe('pb_tray_empty');
this.loadSe('PRSFX- Transform', 'battle_anims');
this.loadBgm('menu');
this.loadBgm('level_up_fanfare', 'bw/level_up_fanfare.mp3');
this.loadBgm('item_fanfare', 'bw/item_fanfare.mp3');
this.loadBgm('heal', 'bw/heal.mp3');
this.loadBgm('victory_trainer', 'bw/victory_trainer.mp3');
this.loadBgm('victory_gym', 'bw/victory_gym.mp3');
this.loadBgm('victory_champion', 'bw/victory_champion.mp3');
this.loadBgm('evolution', 'bw/evolution.mp3');
this.loadBgm('evolution_fanfare', 'bw/evolution_fanfare.mp3');
preload() {
populateAnims();
}

View File

@ -1,9 +1,200 @@
import * as Utils from "./utils";
import { Biome } from "./data/biome";
import { getBiomeHasProps } from "./arena";
import { TrainerType, trainerConfigs } from "./data/trainer-type";
class LoadingScene extends Phaser.Scene {
constructor() {
super("LoadingScene");
}
loadAtlas(key: string, folder: string, filenameRoot?: string) {
if (!filenameRoot) filenameRoot = key;
if (folder) folder += "/";
this.load.atlas(
key,
`images/${folder}${filenameRoot}.png`,
`images/${folder}/${filenameRoot}.json`
);
}
loadSe(key: string, folder?: string, filenames?: string | string[]) {
if (!filenames) filenames = `${key}.wav`;
if (!folder) folder = "";
else folder += "/";
if (!Array.isArray(filenames)) filenames = [filenames];
for (let f of filenames as string[]) {
this.load.audio(key, `audio/se/${folder}${f}`);
}
}
loadImage(key: string, folder: string, filename?: string) {
if (!filename) filename = `${key}.png`;
this.load.image(key, `images/${folder}/${filename}`);
}
loadBgm(key: string, filename?: string) {
if (!filename) filename = `${key}.mp3`;
this.load.audio(key, `audio/bgm/${filename}`);
}
preload() {
// Load menu images
this.loadImage("bg", "ui");
this.loadImage("bg_command", "ui");
this.loadImage("bg_fight", "ui");
this.loadAtlas("prompt", "ui");
this.loadImage("cursor", "ui");
this.loadImage("window", "ui");
this.loadImage("namebox", "ui");
this.loadImage("pbinfo_player", "ui");
this.loadImage("pbinfo_player_mini", "ui");
this.loadImage("pbinfo_enemy_mini", "ui");
this.loadImage("overlay_lv", "ui");
this.loadAtlas("numbers", "ui");
this.loadAtlas("numbers_red", "ui");
this.loadAtlas("overlay_hp", "ui");
this.loadImage("overlay_exp", "ui");
this.loadImage("icon_owned", "ui");
this.loadImage("ability_bar", "ui");
this.loadImage("party_exp_bar", "ui");
this.loadImage("achv_bar", "ui");
this.loadImage("achv_bar_2", "ui");
this.loadImage("achv_bar_3", "ui");
this.loadImage("achv_bar_4", "ui");
this.loadImage("shiny_star", "ui", "shiny.png");
this.loadImage("icon_spliced", "ui");
this.loadImage("pb_tray_overlay_player", "ui");
this.loadImage("pb_tray_overlay_enemy", "ui");
this.loadAtlas("pb_tray_ball", "ui");
this.loadImage("party_bg", "ui");
this.loadImage("party_bg_double", "ui");
this.loadAtlas("party_slot_main", "ui");
this.loadAtlas("party_slot", "ui");
this.loadImage("party_slot_overlay_lv", "ui");
this.loadImage("party_slot_hp_bar", "ui");
this.loadAtlas("party_slot_hp_overlay", "ui");
this.loadAtlas("party_pb", "ui");
this.loadImage("party_message", "ui");
this.loadImage("party_message_large", "ui");
this.loadImage("party_message_options", "ui");
this.loadImage("party_message_options_wide", "ui");
this.loadAtlas("party_cancel", "ui");
this.loadImage("summary_bg", "ui");
this.loadImage("summary_overlay_shiny", "ui");
this.loadImage("summary_profile", "ui");
this.loadImage("summary_status", "ui");
this.loadImage("summary_stats", "ui");
this.loadImage("summary_stats_overlay_exp", "ui");
this.loadImage("summary_moves", "ui");
this.loadImage("summary_moves_effect", "ui");
this.loadImage("summary_moves_overlay_row", "ui");
this.loadImage("summary_moves_overlay_pp", "ui");
this.loadAtlas("summary_moves_cursor", "ui");
for (let t = 1; t <= 3; t++) this.loadImage(`summary_tabs_${t}`, "ui");
for (let o = 1; o <= 3; o++)
this.loadImage(`option_select_window_${o}`, "ui");
this.loadImage("starter_select_bg", "ui");
this.loadImage("starter_select_message", "ui");
this.loadImage("starter_select_cursor", "ui");
this.loadImage("starter_select_cursor_highlight", "ui");
this.loadImage("starter_select_cursor_pokerus", "ui");
this.loadImage("starter_select_gen_cursor", "ui");
this.loadImage("starter_select_gen_cursor_highlight", "ui");
this.loadImage("default_bg", "arenas");
// Load arena images
Utils.getEnumValues(Biome).map((bt) => {
const btKey = Biome[bt].toLowerCase();
this.loadImage(`${btKey}_bg`, "arenas");
this.loadImage(`${btKey}_a`, "arenas");
this.loadImage(`${btKey}_b`, "arenas");
if (getBiomeHasProps(bt)) {
for (let p = 1; p <= 3; p++)
this.loadImage(`${btKey}_b_${p}`, "arenas");
}
});
// Load trainer images
this.loadImage("trainer_m", "trainer");
this.loadAtlas("trainer_m_pb", "trainer");
Utils.getEnumValues(TrainerType).map((tt) => {
const config = trainerConfigs[tt];
this.loadAtlas(config.getKey(), "trainer");
if (config.isDouble) this.loadAtlas(config.getKey(true), "trainer");
});
// Load pokemon-related images
this.loadImage(`pkmn__back__sub`, "pokemon/back", "sub.png");
this.loadImage(`pkmn__sub`, "pokemon", "sub.png");
this.loadAtlas("battle_stats", "effects");
this.loadAtlas("shiny", "effects");
this.loadImage("evo_sparkle", "effects");
this.load.video("evo_bg", "images/effects/evo_bg.mp4", true);
this.loadAtlas("pb", "");
this.loadAtlas("items", "");
this.loadAtlas("types", "");
this.loadAtlas("statuses", "");
this.loadAtlas("categories", "");
for (let i = 0; i < 7; i++) this.loadAtlas(`pokemon_icons_${i}`, "ui");
this.loadSe("select");
this.loadSe("menu_open");
this.loadSe("hit");
this.loadSe("hit_strong");
this.loadSe("hit_weak");
this.loadSe("stat_up");
this.loadSe("stat_down");
this.loadSe("faint");
this.loadSe("flee");
this.loadSe("low_hp");
this.loadSe("exp");
this.loadSe("level_up");
this.loadSe("sparkle");
this.loadSe("restore");
this.loadSe("shine");
this.loadSe("charge");
this.loadSe("beam");
this.loadSe("upgrade");
this.loadSe("buy");
this.loadSe("achv");
this.loadSe("error");
this.loadSe("pb_rel");
this.loadSe("pb_throw");
this.loadSe("pb_bounce_1");
this.loadSe("pb_bounce_2");
this.loadSe("pb_move");
this.loadSe("pb_catch");
this.loadSe("pb_lock");
this.loadSe("pb_tray_enter");
this.loadSe("pb_tray_ball");
this.loadSe("pb_tray_empty");
this.loadSe("PRSFX- Transform", "battle_anims");
this.loadBgm("menu");
this.loadBgm("level_up_fanfare", "bw/level_up_fanfare.mp3");
this.loadBgm("item_fanfare", "bw/item_fanfare.mp3");
this.loadBgm("heal", "bw/heal.mp3");
this.loadBgm("victory_trainer", "bw/victory_trainer.mp3");
this.loadBgm("victory_gym", "bw/victory_gym.mp3");
this.loadBgm("victory_champion", "bw/victory_champion.mp3");
this.loadBgm("evolution", "bw/evolution.mp3");
this.loadBgm("evolution_fanfare", "bw/evolution_fanfare.mp3");
this.loadLoadingScreen();
}
@ -12,89 +203,88 @@ class LoadingScene extends Phaser.Scene {
graphics.lineStyle(4, 0xff00ff, 1).setDepth(10);
// let progressBar = this.add.graphics();
// let progressBox = this.add.graphics();
// progressBox.lineStyle(5, 0xff00ff, 1.0);
// progressBox.fillStyle(0x222222, 0.8);
let progressBar = this.add.graphics();
let progressBox = this.add.graphics();
progressBox.lineStyle(5, 0xff00ff, 1.0);
progressBox.fillStyle(0x222222, 0.8);
// let width = this.cameras.main.width;
// let height = this.cameras.main.height;
let width = this.cameras.main.width;
let height = this.cameras.main.height;
// let loadingText = this.make.text({
// x: width / 2,
// y: height / 2 - 50,
// text: "Loading game...",
// style: {
// font: "23px emerald",
// color: "#ffffff",
// },
// });
// loadingText.setOrigin(0.5, 0.5);
let loadingText = this.make.text({
x: width / 2,
y: height / 2 - 50,
text: "Loading game...",
style: {
font: "33px emerald",
color: "#ffffff",
},
});
loadingText.setOrigin(0.5, 0.5);
// let percentText = this.make.text({
// x: width / 2,
// y: height / 2,
// text: "0%",
// style: {
// font: "18px emerald",
// color: "#ffffff",
// },
// });
// percentText.setOrigin(0.5, 0.5);
let percentText = this.make.text({
x: width / 2,
y: height / 2,
text: "0%",
style: {
font: "28px emerald",
color: "#ffffff",
},
});
percentText.setOrigin(0.5, 0.5);
// let assetText = this.make.text({
// x: width / 2,
// y: height / 2 + 50,
// text: "",
// style: {
// font: "18px emerald",
// color: "#ffffff",
// },
// });
// assetText.setOrigin(0.5, 0.5);
let assetText = this.make.text({
x: width / 2,
y: height / 2 + 50,
text: "",
style: {
font: "28px emerald",
color: "#ffffff",
},
});
assetText.setOrigin(0.5, 0.5);
// this.load.on("progress", (value: string) => {
// const parsedValue = parseInt(value);
// percentText.setText(parsedValue * 100 + "%");
// progressBar.clear();
// progressBar.fillStyle(0xffffff, 0.8);
// progressBar.fillRect(width / 2 - 160, 280, 300 * parsedValue, 30);
// });
this.load.on("progress", (value: string) => {
const parsedValue = parseInt(value);
percentText.setText(parsedValue * 100 + "%");
progressBar.clear();
progressBar.fillStyle(0xffffff, 0.8);
progressBar.fillRect(width / 2 - 160, 280, 300 * parsedValue, 30);
});
// this.load.on("fileprogress", (file) => {
// assetText.setText("Loading asset: " + file.key);
// });
this.load.on("fileprogress", (file) => {
assetText.setText("Loading asset: " + file.key);
});
// this.load.on("complete", () => {
// progressBar.destroy();
// progressBox.destroy();
// loadingText.destroy();
// percentText.destroy();
// assetText.destroy();
// });
this.load.on("complete", () => {
progressBar.destroy();
progressBox.destroy();
loadingText.destroy();
percentText.destroy();
assetText.destroy();
});
}
// isLocal() {
// return location.hostname === "localhost" ||
// location.hostname === "127.0.0.1"
// ? true
// : false;
// }
isLocal() {
return location.hostname === "localhost" ||
location.hostname === "127.0.0.1"
? true
: false;
}
// get gameHeight() {
// return this.game.config.height as number;
// }
get gameHeight() {
return this.game.config.height as number;
}
// get gameWidth() {
// return this.game.config.width as number;
// }
get gameWidth() {
return this.game.config.width as number;
}
async create() {
// const logoExposeSetting: number = this.isLocal() ? 500 : 2000;
// this.cameras.main.fadeIn(1000, 255, 255, 255);
setTimeout(() => {
this.scene.start("battle");
}, 500);