use bevy::prelude::*;
use crate::GameScene;
use crate::config::{MainConfig, load_main_config};
// 引用flash
use bevy::{
color::palettes::basic::*, ecs::relationship::RelatedSpawnerCommands, prelude::*,
winit::WinitSettings,
ui::FocusPolicy, // 添加这行
};
use bevy_flash::{FlashPlugin, assets::FlashAnimationSwfData, bundle::FlashAnimation};
use bevy::{audio::Volume, math::ops, prelude::*};
pub const FPS_OVERLAY_Z_INDEX: i32 = i32::MAX - 32;
pub struct GamePlugin;
impl Plugin for GamePlugin {
fn build(&self, app: &mut App) {
app.init_state::<GameScene>()
.add_systems(Startup, (load_main_config_system, setup_game_camera))
.add_plugins(FlashPlugin)
.add_systems(OnEnter(GameScene::Game), (setup_game_camera, spawn_test_sprite))
.add_systems(
Update,
( flash_animation).run_if(in_state(GameScene::Game))
);
}
}
fn load_main_config_system(mut commands: Commands) {
let main_config = load_main_config();
commands.insert_resource(main_config);
}
// 相机初始化
fn setup_game_camera(
mut commands: Commands,
existing_cameras: Query<Entity, With<Camera>>,
) {
// 清理现有摄像机
for entity in existing_cameras.iter() {
commands.entity(entity).despawn();
}
// 创建新摄像机
commands.spawn(Camera2d);
info!("Game 场景摄像机已创建");
}
fn spawn_test_sprite(mut commands: Commands,asset_server: Res<AssetServer>) {
commands.spawn((
Sprite {
color: Color::srgb(0.0, 0.5, 1.0), // 蓝色
custom_size: Some(Vec2::new(100.0, 100.0)), // 100x100 像素
..default()
},
Transform::from_translation(Vec3::new(0.0, 0.0, 0.0)), // 屏幕中心
));
info!("测试蓝色 sprite 已创建");
commands.spawn((
Name::new("svgload"),
FlashAnimation {
// name:"a1",
swf: asset_server.load("swf/66.swf")
},
// Transform::default().with_scale(Vec3::ZERO),
Visibility::Visible,
Transform::from_translation(Vec3::new(0.0, 240.0, 0.0)).with_scale(Vec3::splat(2.0)),
));
}
// 动画播放
fn flash_animation(
mut flashes: ResMut<Assets<FlashAnimationSwfData>>,
mut flash_swf_data_events: EventReader<AssetEvent<FlashAnimationSwfData>>,
mut initialized: Local<bool>,
) {
// 如果已经初始化过了,直接返回
if *initialized {
return;
}
for event in flash_swf_data_events.read() {
if let AssetEvent::LoadedWithDependencies { id } = event {
info!("Flash 动画资源加载完成: {:?}", id);
if let Some(flash) = flashes.get_mut(*id) {
flash.player.set_on_completion(Box::new(|player| {
if let Err(e) = player.set_play_animation("default", false) {
error!("设置动画完成回调失败: {:?}", e);
}
}));
if let Err(e) = flash.player.set_play_animation("default", true) {
error!("开始播放动画失败: {:?}", e);
} else {
info!("Flash 动画开始播放");
*initialized = true; // 标记为已初始化,避免后续重复执行
}
}
}
}
}