Skip to content

Commit

Permalink
Add colliders by name instead of gltf extras
Browse files Browse the repository at this point in the history
gltf extras are incredibly tedious to work with in blender
  • Loading branch information
rparrett committed Aug 27, 2022
1 parent 6237aab commit 181c82b
Show file tree
Hide file tree
Showing 3 changed files with 42 additions and 45 deletions.
1 change: 0 additions & 1 deletion Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 0 additions & 1 deletion Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,6 @@ bevy_jornet = { git = "https://github.com/rparrett/jornet", branch = "jam" }
bevy-ui-navigation = "0.20.0"

interpolation = "0.2"
serde_json = "*"
serde = "*"
ron = "0.8"
rand = "0.8"
Expand Down
85 changes: 42 additions & 43 deletions src/main.rs
Original file line number Diff line number Diff line change
Expand Up @@ -13,8 +13,7 @@ mod ui;
use std::f32::consts::TAU;

use bevy::{
audio::AudioSink, gltf::GltfExtras, log::LogSettings, pbr::PointLightShadowMap, prelude::*,
time::Stopwatch,
audio::AudioSink, log::LogSettings, pbr::PointLightShadowMap, prelude::*, time::Stopwatch,
};
use bevy_asset_loader::prelude::*;
#[cfg(feature = "inspector")]
Expand All @@ -28,7 +27,6 @@ use leaderboard::{get_leaderboard_credentials, LeaderboardPlugin};
use leafwing_input_manager::prelude::*;
use main_menu::MainMenuPlugin;
use save::SavePlugin;
use serde::Deserialize;
use settings::{KeyboardLayout, KeyboardSetting, MusicSetting, SfxSetting};
use ui::{TrickText, UiPlugin};

Expand Down Expand Up @@ -261,58 +259,59 @@ fn spawn_camera(mut commands: Commands, zoom: Res<Zoom>) {

fn decorate_track(
mut commands: Commands,
query: Query<(Entity, &GltfExtras, &Children)>,
mesh_query: Query<(Entity, &Handle<Mesh>), Without<Collider>>,
mesh_query: Query<(Entity, &Name, &Handle<Mesh>), Without<Collider>>,
meshes: Res<Assets<Mesh>>,
mut visibility_query: Query<&mut Visibility>,
mut state: ResMut<State<GameState>>,
) {
let mut decorated = false;
fn chop_name(name: &str) -> Option<&str> {
name.rsplitn(2, '.').last()
}

for (entity, extras, children) in query.iter() {
decorated = true;
#[derive(Deserialize)]
struct TrackExtra {
object_type: String,
}
let mut decorated = false;

if let Ok(v) = serde_json::from_str::<TrackExtra>(&extras.value) {
if v.object_type == "track" {
for (mesh_entity, mesh_handle) in mesh_query.iter_many(children) {
commands
.entity(mesh_entity)
.insert(ColliderDebugColor(Color::GREEN))
.insert(
Collider::from_bevy_mesh(
meshes.get(mesh_handle).unwrap(),
&ComputedColliderShape::TriMesh,
)
.unwrap(),
for (mesh_entity, name, mesh_handle) in mesh_query.iter() {
match chop_name(&**name) {
Some("Track") => {
decorated = true;

commands
.entity(mesh_entity)
.insert(ColliderDebugColor(Color::GREEN))
.insert(
Collider::from_bevy_mesh(
meshes.get(mesh_handle).unwrap(),
&ComputedColliderShape::TriMesh,
)
.insert(Track);
.unwrap(),
)
.insert(Track);

info!("Added collider to {:?}", entity);
}
} else if v.object_type == "finish_line" {
for (mesh_entity, mesh_handle) in mesh_query.iter_many(children) {
commands
.entity(mesh_entity)
.insert(ColliderDebugColor(Color::GRAY))
.insert(
Collider::from_bevy_mesh(
meshes.get(mesh_handle).unwrap(),
&ComputedColliderShape::TriMesh,
)
.unwrap(),
info!("Added track collider to {:?}", mesh_entity);
}
Some("FinishLineCollider") => {
decorated = true;

commands
.entity(mesh_entity)
.insert(ColliderDebugColor(Color::GRAY))
.insert(
Collider::from_bevy_mesh(
meshes.get(mesh_handle).unwrap(),
&ComputedColliderShape::TriMesh,
)
.insert(Sensor)
.insert(FinishLine);
info!("Added collider to {:?}", entity);
}
if let Ok(mut visibility) = visibility_query.get_mut(entity) {
.unwrap(),
)
.insert(Sensor)
.insert(FinishLine);

if let Ok(mut visibility) = visibility_query.get_mut(mesh_entity) {
visibility.is_visible = false;
}

info!("Added finish line collider to {:?}", mesh_entity);
}
_ => {}
}
}

Expand Down

0 comments on commit 181c82b

Please sign in to comment.