Fixed bevy_blender plugin not adding some components when something is spawned before it
This commit is contained in:
parent
e7aed2f974
commit
ca0987bbe3
@ -1,6 +1,6 @@
|
||||
use bevy::prelude::*;
|
||||
// use bevy::render::primitives::Aabb;
|
||||
use bevy_rapier3d::geometry::Collider as RapierCollider;
|
||||
use bevy_rapier3d::geometry::{Collider as RapierCollider, Sensor};
|
||||
use bevy_rapier3d::prelude::{ActiveCollisionTypes, ActiveEvents, ComputedColliderShape};
|
||||
|
||||
use super::utils::*;
|
||||
@ -82,18 +82,12 @@ pub fn physics_replace_proxies(
|
||||
.unwrap();
|
||||
commands
|
||||
.entity(entity)
|
||||
.insert(rapier_collider)
|
||||
// FIXME: this is just for demo purposes !!!
|
||||
.insert(
|
||||
ActiveCollisionTypes::default()
|
||||
| ActiveCollisionTypes::KINEMATIC_STATIC
|
||||
| ActiveCollisionTypes::STATIC_STATIC
|
||||
| ActiveCollisionTypes::DYNAMIC_STATIC,
|
||||
)
|
||||
.insert(ActiveEvents::COLLISION_EVENTS);
|
||||
.insert(rapier_collider);
|
||||
// FIXME: this is just for demo purposes !!!;
|
||||
//.insert(ActiveEvents::COLLISION_EVENTS);
|
||||
// .insert(ActiveEvents::COLLISION_EVENTS)
|
||||
// break;
|
||||
// RapierCollider::convex_hull(points)
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1,5 +1,7 @@
|
||||
use bevy::app::{Plugin, Update};
|
||||
|
||||
use crate::setup::load_state::update_game_load_state;
|
||||
|
||||
use super::{character::{player_hitbox::PlayerHitBox, player_character::PlayerCharacter, player_eye::PlayerEye, in_player_hands_parent::InPlayerHandsParent}, physics::{rapier::{AutoAABBCollider, physics_replace_proxies}, self}};
|
||||
|
||||
|
||||
@ -15,9 +17,8 @@ impl Plugin for ProxyComponentsPlugin {
|
||||
app.register_type::<InPlayerHandsParent>();
|
||||
|
||||
// Physics
|
||||
app
|
||||
.register_type::<AutoAABBCollider>()
|
||||
.register_type::<physics::rapier::Collider>()
|
||||
.add_systems(Update, physics_replace_proxies);
|
||||
app.register_type::<AutoAABBCollider>();
|
||||
app.register_type::<physics::rapier::Collider>();
|
||||
app.add_systems(Update, (physics_replace_proxies, update_game_load_state));
|
||||
}
|
||||
}
|
@ -1,5 +1,7 @@
|
||||
use bevy::prelude::*;
|
||||
|
||||
use crate::comps::core::markers::proxy::physics::rapier::physics_replace_proxies;
|
||||
|
||||
use super::{
|
||||
item::{item_spawner, ItemSpawnPointPlugin},
|
||||
player::player_spawner,
|
||||
|
@ -37,7 +37,7 @@ fn setup_plugins(application: &mut App) {
|
||||
.add_plugins(proxy::plugin::ProxyComponentsPlugin)
|
||||
.add_plugins(MainGameUIPlugin)
|
||||
.add_plugins(MainEditorUiPlugin)
|
||||
.add_plugins(RapierDebugRenderPlugin::default());
|
||||
;//.add_plugins(RapierDebugRenderPlugin::default());
|
||||
}
|
||||
|
||||
fn load(application: &mut App) {
|
||||
|
@ -30,7 +30,7 @@ pub struct GltfAsset {
|
||||
pub fn load_all_assets(
|
||||
mut commands: Commands,
|
||||
asset_server: Res<AssetServer>,
|
||||
mut game_load_state: ResMut<GameLoadState>,
|
||||
//mut game_load_state: ResMut<GameLoadState>,
|
||||
) {
|
||||
let skybox_handle: Handle<Image> = asset_server.load(CUBEMAPS[0].0);
|
||||
commands.insert_resource(Cubemap {
|
||||
@ -52,9 +52,6 @@ pub fn load_all_assets(
|
||||
commands.insert_resource(GltfAssets {
|
||||
assets: Vec::from([m4a1_gltf_asset, glock17_gltf_asset, main_character_asset]),
|
||||
});
|
||||
game_load_state.assets_loaded = true;
|
||||
// This works becaue this system is called on startup, so commands will finish running when game starts the update phase.
|
||||
// Meaning assets will be finished loading as soon as the first update system runs.
|
||||
}
|
||||
|
||||
impl GltfAssetType {
|
||||
|
@ -1,9 +1,12 @@
|
||||
use bevy::prelude::*;
|
||||
use bevy::{prelude::*, gltf::Gltf};
|
||||
|
||||
use super::assets::GltfAssets;
|
||||
|
||||
#[derive(Resource, Default, Reflect)]
|
||||
#[reflect(Resource)]
|
||||
pub struct GameLoadState {
|
||||
pub assets_loaded: bool,
|
||||
pub loaded_assets: Vec<AssetId<Gltf>>,
|
||||
pub animations_loaded: bool,
|
||||
pub player_loaded: bool,
|
||||
}
|
||||
@ -13,3 +16,22 @@ impl GameLoadState {
|
||||
self.assets_loaded && self.animations_loaded
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
pub fn update_game_load_state(
|
||||
mut game_state: ResMut<GameLoadState>,
|
||||
mut asset_event_reader: EventReader<AssetEvent<Gltf>>,
|
||||
gltf_assets: Res<GltfAssets>,
|
||||
) {
|
||||
if let Some(asset_event) = asset_event_reader.read().next() {
|
||||
match asset_event {
|
||||
AssetEvent::Added { id } => {
|
||||
game_state.loaded_assets.push(*id);
|
||||
if gltf_assets.assets.len() == game_state.loaded_assets.len() {
|
||||
game_state.assets_loaded = true;
|
||||
}
|
||||
}
|
||||
_ => ()
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user