69 lines
1.7 KiB
Rust
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)
|
|
}
|