cyber_rider/src/planet.rs
2024-06-13 14:50:41 -07:00

69 lines
1.7 KiB
Rust

use bevy::{
prelude::{shape::Icosphere, *},
render::{color::Color, mesh::Indices, render_asset::RenderAssetUsages},
};
use bevy_rapier3d::prelude::*;
use hexasphere::shapes::IcoSphere;
use noise::{HybridMulti, NoiseFn, SuperSimplex};
use rand::{Rng, SeedableRng};
use wgpu::PrimitiveTopology;
pub const PLANET_RADIUS: f32 = 2_000.0;
pub const PLANET_HUE: f32 = 31.0;
pub const PLANET_SATURATION: f32 = 1.0;
#[derive(Component)]
pub struct CyberPlanet;
fn spawn_planet(
mut commands: Commands,
mut meshes: ResMut<Assets<Mesh>>,
mut materials: ResMut<Assets<StandardMaterial>>,
) {
//let color = Color::rgb(0.74, 0.5334, 0.176);
let (mesh, shape) = gen_planet(999.9);
let pbody = (RigidBody::Fixed, Ccd { enabled: true });
let pcollide = (
shape,
Friction {
coefficient: 1.2,
..Default::default()
},
Restitution::new(0.8),
);
commands
.spawn(PbrBundle {
mesh: meshes.add(mesh),
material: materials.add(StandardMaterial {
base_color: Color::GREEN,
..Default::default()
}),
..Default::default()
})
.insert(pbody)
.insert(pcollide)
.insert(CyberPlanet);
}
pub struct CyberPlanetPlugin;
impl Plugin for CyberPlanetPlugin {
fn build(&self, app: &mut App) {
app.add_systems(Startup, spawn_planet);
}
}
//---------------------------------------------------------------------
// utils
//---------------------------------------------------------------------
fn gen_planet(span: f32) -> (Mesh, Collider) {
let mesh = Cuboid::new(span, 50.0, span);
let collider = Collider::cuboid(span, 50.0, span);
(mesh.mesh(), collider)
}