doukutsu-rs/src/scene/loading_scene.rs

57 lines
2.1 KiB
Rust
Raw Normal View History

use ggez::{Context, filesystem, GameResult};
use crate::npc::NPCTable;
2020-08-18 16:46:07 +00:00
use crate::scene::Scene;
use crate::shared_game_state::SharedGameState;
2020-08-19 00:55:21 +00:00
use crate::stage::StageData;
use crate::text_script::TextScript;
2020-08-18 16:46:07 +00:00
pub struct LoadingScene {
tick: usize,
}
impl LoadingScene {
2020-08-19 00:55:21 +00:00
pub fn new() -> Self {
Self {
2020-08-18 16:46:07 +00:00
tick: 0,
}
}
}
impl Scene for LoadingScene {
2020-08-19 13:11:34 +00:00
fn tick(&mut self, state: &mut SharedGameState, ctx: &mut Context) -> GameResult {
2020-08-18 16:46:07 +00:00
// deferred to let the loading image draw
if self.tick == 1 {
2020-08-19 13:11:34 +00:00
let stages = StageData::load_stage_table(ctx, &state.base_path)?;
state.stages = stages;
2020-09-25 17:14:52 +00:00
let npc_tbl = filesystem::open(ctx, [&state.base_path, "/npc.tbl"].join(""))?;
let npc_table = NPCTable::load_from(npc_tbl)?;
2020-09-04 23:08:33 +00:00
state.npc_table = npc_table;
2020-09-25 17:14:52 +00:00
let head_tsc = filesystem::open(ctx, [&state.base_path, "/Head.tsc"].join(""))?;
let head_script = TextScript::load_from(head_tsc, &state.constants)?;
2020-09-10 10:25:40 +00:00
state.textscript_vm.set_global_script(head_script);
2020-09-10 12:34:42 +00:00
2020-09-29 00:43:55 +00:00
let arms_item_tsc = filesystem::open(ctx, [&state.base_path, "/ArmsItem.tsc"].join(""))?;
let arms_item_script = TextScript::load_from(arms_item_tsc, &state.constants)?;
state.textscript_vm.set_inventory_script(arms_item_script);
let stage_select_tsc = filesystem::open(ctx, [&state.base_path, "/StageSelect.tsc"].join(""))?;
let stage_select_script = TextScript::load_from(stage_select_tsc, &state.constants)?;
state.textscript_vm.set_stage_select_script(stage_select_script);
2020-10-30 08:49:30 +00:00
state.start_intro(ctx)?;
2020-08-18 16:46:07 +00:00
}
self.tick += 1;
Ok(())
}
2020-08-19 13:11:34 +00:00
fn draw(&self, state: &mut SharedGameState, ctx: &mut Context) -> GameResult {
let batch = state.texture_set.get_or_load_batch(ctx, &state.constants, "Loading")?;
2020-08-18 16:46:07 +00:00
2020-08-19 13:11:34 +00:00
batch.add(((state.canvas_size.0 - batch.width() as f32) / 2.0).floor(),
((state.canvas_size.1 - batch.height() as f32) / 2.0).floor());
batch.draw(ctx)?;
2020-08-18 16:46:07 +00:00
Ok(())
}
}