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>, mut materials: ResMut>, ) { //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) }