pub mod am_integration;
pub mod chapter;
pub mod collision;
pub mod config;
pub mod danmaku;
mod sequencer;
use crate::app_state::AppState;
use crate::app_state::battle::am_integration::AmBattlePlugin;
use crate::app_state::battle::chapter::Chapter;
use crate::app_state::battle::collision::BattleCollisionPlugin;
use crate::app_state::battle::config::BattlePlayerConfig;
use crate::app_state::battle::danmaku::DanmakuPlugin;
use crate::app_state::battle::sequencer::SequencerPlugin;
use crate::core::ron_loader::RonAssetLoader;
use bevy::app::{App, Plugin, Update};
use bevy::prelude::*;
use serde::{Deserialize, Serialize};
#[derive(Component)]
pub(crate) struct BattleEntity;
#[derive(SystemSet, Debug, Clone, PartialEq, Eq, Hash)]
pub struct BattleUpdate;
#[derive(SystemSet, Debug, Clone, PartialEq, Eq, Hash)]
pub struct BattleMovementSet;
#[derive(Component)]
pub struct BattleCamera;
pub(crate) struct BattlePlugin;
impl Plugin for BattlePlugin {
fn build(&self, app: &mut App) {
app.configure_sets(Update, BattleUpdate.run_if(in_state(AppState::Battle)))
.configure_sets(Update, BattleMovementSet.in_set(BattleUpdate))
.init_asset::<BattleAsset>()
.register_asset_loader(RonAssetLoader::<BattleAsset>::new(&["battle.ron"]))
.init_asset::<BattlePlayerConfig>()
.register_asset_loader(RonAssetLoader::<BattlePlayerConfig>::new(&[
"battle_player.ron",
]))
.add_plugins((
SequencerPlugin,
BattleCollisionPlugin,
DanmakuPlugin,
AmBattlePlugin,
))
.add_systems(OnEnter(AppState::Battle), setup_battle_camera);
}
}
fn setup_battle_camera(
mut commands: Commands,
q_cameras: Query<Entity, (With<Camera2d>, Without<BattleCamera>)>,
resolution_scale: Res<crate::app_state::app_setup::ResolutionScale>,
) {
let scale_value = resolution_scale.get();
info!(
"[Battle] Setting up battle camera with resolution_scale={}, camera_scale={}",
scale_value,
1.0 / scale_value as f32
);
for camera_entity in q_cameras.iter() {
commands.entity(camera_entity).despawn();
}
commands.spawn((
Camera2d,
Projection::Orthographic(OrthographicProjection {
scale: 1.0 / scale_value as f32,
..OrthographicProjection::default_2d()
}),
BattleCamera,
BattleEntity,
Name::new("Battle Camera2d"),
));
}
#[derive(Asset, TypePath, Debug, Clone, Deserialize, Serialize)]
#[serde(transparent)]
pub struct BattleAsset(pub Vec<Chapter>);