2024-04-22 17:42:51 +00:00
|
|
|
// ▄████████▄ + ███ + ▄█████████ ███ +
|
|
|
|
// ███▀ ▀███ + + ███ ███▀ + ███ + +
|
|
|
|
// ███ + ███ ███ ███ █████████ ███ ███ ███ ███
|
|
|
|
// ███ +███ ███ ███ ███ ███▐██████ ███ ███ ███
|
|
|
|
// ███ + ███ ███+ ███ +███ ███ + ███ ███ + ███
|
|
|
|
// ███▄ ▄███ ███▄ ███ ███ + ███ + ███ ███▄ ███
|
|
|
|
// ▀████████▀ + ▀███████ ███▄ ███▄ ▀████ ▀███████
|
|
|
|
// + + + ███
|
|
|
|
// + ▀████████████████████████████████████████████████████▀
|
2024-04-23 15:33:36 +00:00
|
|
|
//
|
|
|
|
// This module manages model loading and animation.
|
2024-04-22 17:42:51 +00:00
|
|
|
|
2024-04-22 19:01:27 +00:00
|
|
|
use bevy::ecs::system::EntityCommands;
|
2024-04-22 17:42:51 +00:00
|
|
|
use bevy::prelude::*;
|
2024-04-22 19:01:27 +00:00
|
|
|
|
2024-04-22 21:09:50 +00:00
|
|
|
pub struct SkeletonPlugin;
|
|
|
|
impl Plugin for SkeletonPlugin {
|
|
|
|
fn build(&self, app: &mut App) {
|
2024-04-23 17:08:27 +00:00
|
|
|
app.add_systems(Update, play_animations);
|
2024-04-22 21:09:50 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2024-04-22 19:01:27 +00:00
|
|
|
pub fn asset_name_to_path(name: &str) -> &'static str {
|
|
|
|
match name {
|
2024-04-24 01:03:57 +00:00
|
|
|
"suitv2" => "models/suit_v2/suit_v2.glb#Scene0",
|
2024-04-24 01:03:18 +00:00
|
|
|
"suit_ar_chefhat" => "models/suit_v2/ar_chefhat.glb#Scene0",
|
2024-04-22 19:01:27 +00:00
|
|
|
"asteroid1" => "models/asteroid.glb#Scene0",
|
|
|
|
"asteroid2" => "models/asteroid2.glb#Scene0",
|
|
|
|
"asteroid_lum" => "models/asteroid_lum.glb#Scene0",
|
2024-05-01 01:31:30 +00:00
|
|
|
"hollow_asteroid" => "models/hollow_asteroid.glb#Scene0",
|
2024-04-22 19:01:27 +00:00
|
|
|
"moonlet" => "models/moonlet.glb#Scene0",
|
|
|
|
"monolith" => "models/monolith_neon.glb#Scene0",
|
|
|
|
"lightorb" => "models/lightorb.glb#Scene0",
|
|
|
|
"orb_busstop" => "models/orb_busstop.glb#Scene0",
|
|
|
|
"orb_busstop_dim" => "models/orb_busstop_dim.glb#Scene0",
|
2024-05-01 01:31:30 +00:00
|
|
|
"crate" => "models/crate.glb#Scene0",
|
2024-04-22 19:01:27 +00:00
|
|
|
"MeteorAceGT" => "models/MeteorAceGT.glb#Scene0",
|
2024-05-08 03:50:35 +00:00
|
|
|
"cruiser" => "models/cruiser.glb#Scene0",
|
2024-04-22 19:01:27 +00:00
|
|
|
"satellite" => "models/satellite.glb#Scene0",
|
|
|
|
"pizzeria" => "models/pizzeria2.glb#Scene0",
|
|
|
|
"pizzasign" => "models/pizzasign.glb#Scene0",
|
|
|
|
"selectagon" => "models/selectagon.glb#Scene0",
|
|
|
|
"orbitring" => "models/orbitring.glb#Scene0",
|
2024-04-22 21:36:19 +00:00
|
|
|
"clippy" => "models/clippy/clippy.glb#Scene0",
|
|
|
|
"clippy_ar" => "models/clippy/ar_happy.glb#Scene0",
|
2024-04-22 19:01:27 +00:00
|
|
|
"whale" => "models/whale.glb#Scene0",
|
2024-05-01 15:43:16 +00:00
|
|
|
"marker_satellites" => "models/marker_satellites.glb#Scene0",
|
2024-05-01 16:07:51 +00:00
|
|
|
"marker_planets" => "models/marker_planets.glb#Scene0",
|
2024-04-22 19:01:27 +00:00
|
|
|
"point_of_interest" => "models/point_of_interest.glb#Scene0",
|
|
|
|
_ => "models/error.glb#Scene0",
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
pub fn load(
|
|
|
|
name: &str,
|
|
|
|
entity_commands: &mut EntityCommands,
|
|
|
|
asset_server: &AssetServer,
|
|
|
|
) {
|
2024-05-10 08:15:05 +00:00
|
|
|
entity_commands.insert(load_scene_by_path(asset_name_to_path(name), asset_server));
|
2024-04-22 19:01:27 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
#[inline]
|
|
|
|
pub fn load_scene_by_path(
|
|
|
|
path: &str,
|
|
|
|
asset_server: &AssetServer
|
|
|
|
) -> Handle<Scene> {
|
|
|
|
let path_string = path.to_string();
|
|
|
|
if let Some(handle) = asset_server.get_handle(&path_string) {
|
|
|
|
handle
|
|
|
|
} else {
|
|
|
|
asset_server.load(&path_string)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2024-04-23 17:08:27 +00:00
|
|
|
fn play_animations(
|
|
|
|
mut players: Query<&mut AnimationPlayer, Added<AnimationPlayer>>,
|
|
|
|
asset_server: Res<AssetServer>,
|
|
|
|
) {
|
|
|
|
for mut player in &mut players {
|
2024-04-24 01:03:57 +00:00
|
|
|
let animation = asset_server.load("models/suit_v2/suit_v2.glb#Animation0");
|
2024-04-23 17:08:27 +00:00
|
|
|
player.play(animation.clone()).repeat();
|
|
|
|
}
|
|
|
|
}
|