Rename cubes to scene in custom_shader example
This commit is contained in:
parent
78a06384b1
commit
9ddfaf3ee7
2 changed files with 31 additions and 31 deletions
|
|
@ -1,11 +1,11 @@
|
||||||
mod camera;
|
mod camera;
|
||||||
mod cubes;
|
|
||||||
mod pipeline;
|
mod pipeline;
|
||||||
mod primitive;
|
mod primitive;
|
||||||
|
mod scene;
|
||||||
|
|
||||||
use crate::camera::Camera;
|
use crate::camera::Camera;
|
||||||
use crate::cubes::Cubes;
|
|
||||||
use crate::pipeline::Pipeline;
|
use crate::pipeline::Pipeline;
|
||||||
|
use crate::scene::Scene;
|
||||||
|
|
||||||
use iced::executor;
|
use iced::executor;
|
||||||
use iced::time::Instant;
|
use iced::time::Instant;
|
||||||
|
|
@ -25,14 +25,14 @@ fn main() -> iced::Result {
|
||||||
|
|
||||||
struct IcedCubes {
|
struct IcedCubes {
|
||||||
start: Instant,
|
start: Instant,
|
||||||
cubes: Cubes,
|
scene: Scene,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Default for IcedCubes {
|
impl Default for IcedCubes {
|
||||||
fn default() -> Self {
|
fn default() -> Self {
|
||||||
Self {
|
Self {
|
||||||
start: Instant::now(),
|
start: Instant::now(),
|
||||||
cubes: Cubes::new(),
|
scene: Scene::new(),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -62,20 +62,20 @@ impl Application for IcedCubes {
|
||||||
|
|
||||||
fn update(&mut self, message: Self::Message) -> Command<Self::Message> {
|
fn update(&mut self, message: Self::Message) -> Command<Self::Message> {
|
||||||
match message {
|
match message {
|
||||||
Message::CubeAmountChanged(num) => {
|
Message::CubeAmountChanged(amount) => {
|
||||||
self.cubes.adjust_num_cubes(num);
|
self.scene.change_amount(amount);
|
||||||
}
|
}
|
||||||
Message::CubeSizeChanged(size) => {
|
Message::CubeSizeChanged(size) => {
|
||||||
self.cubes.size = size;
|
self.scene.size = size;
|
||||||
}
|
}
|
||||||
Message::Tick(time) => {
|
Message::Tick(time) => {
|
||||||
self.cubes.update(time - self.start);
|
self.scene.update(time - self.start);
|
||||||
}
|
}
|
||||||
Message::ShowDepthBuffer(show) => {
|
Message::ShowDepthBuffer(show) => {
|
||||||
self.cubes.show_depth_buffer = show;
|
self.scene.show_depth_buffer = show;
|
||||||
}
|
}
|
||||||
Message::LightColorChanged(color) => {
|
Message::LightColorChanged(color) => {
|
||||||
self.cubes.light_color = color;
|
self.scene.light_color = color;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -87,21 +87,21 @@ impl Application for IcedCubes {
|
||||||
control(
|
control(
|
||||||
"Amount",
|
"Amount",
|
||||||
slider(
|
slider(
|
||||||
1..=cubes::MAX,
|
1..=scene::MAX,
|
||||||
self.cubes.cubes.len() as u32,
|
self.scene.cubes.len() as u32,
|
||||||
Message::CubeAmountChanged
|
Message::CubeAmountChanged
|
||||||
)
|
)
|
||||||
.width(100)
|
.width(100)
|
||||||
),
|
),
|
||||||
control(
|
control(
|
||||||
"Size",
|
"Size",
|
||||||
slider(0.1..=0.25, self.cubes.size, Message::CubeSizeChanged)
|
slider(0.1..=0.25, self.scene.size, Message::CubeSizeChanged)
|
||||||
.step(0.01)
|
.step(0.01)
|
||||||
.width(100),
|
.width(100),
|
||||||
),
|
),
|
||||||
checkbox(
|
checkbox(
|
||||||
"Show Depth Buffer",
|
"Show Depth Buffer",
|
||||||
self.cubes.show_depth_buffer,
|
self.scene.show_depth_buffer,
|
||||||
Message::ShowDepthBuffer
|
Message::ShowDepthBuffer
|
||||||
),
|
),
|
||||||
]
|
]
|
||||||
|
|
@ -110,10 +110,10 @@ impl Application for IcedCubes {
|
||||||
let bottom_controls = row![
|
let bottom_controls = row![
|
||||||
control(
|
control(
|
||||||
"R",
|
"R",
|
||||||
slider(0.0..=1.0, self.cubes.light_color.r, move |r| {
|
slider(0.0..=1.0, self.scene.light_color.r, move |r| {
|
||||||
Message::LightColorChanged(Color {
|
Message::LightColorChanged(Color {
|
||||||
r,
|
r,
|
||||||
..self.cubes.light_color
|
..self.scene.light_color
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
.step(0.01)
|
.step(0.01)
|
||||||
|
|
@ -121,10 +121,10 @@ impl Application for IcedCubes {
|
||||||
),
|
),
|
||||||
control(
|
control(
|
||||||
"G",
|
"G",
|
||||||
slider(0.0..=1.0, self.cubes.light_color.g, move |g| {
|
slider(0.0..=1.0, self.scene.light_color.g, move |g| {
|
||||||
Message::LightColorChanged(Color {
|
Message::LightColorChanged(Color {
|
||||||
g,
|
g,
|
||||||
..self.cubes.light_color
|
..self.scene.light_color
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
.step(0.01)
|
.step(0.01)
|
||||||
|
|
@ -132,10 +132,10 @@ impl Application for IcedCubes {
|
||||||
),
|
),
|
||||||
control(
|
control(
|
||||||
"B",
|
"B",
|
||||||
slider(0.0..=1.0, self.cubes.light_color.b, move |b| {
|
slider(0.0..=1.0, self.scene.light_color.b, move |b| {
|
||||||
Message::LightColorChanged(Color {
|
Message::LightColorChanged(Color {
|
||||||
b,
|
b,
|
||||||
..self.cubes.light_color
|
..self.scene.light_color
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
.step(0.01)
|
.step(0.01)
|
||||||
|
|
@ -149,7 +149,7 @@ impl Application for IcedCubes {
|
||||||
.align_items(Alignment::Center);
|
.align_items(Alignment::Center);
|
||||||
|
|
||||||
let shader =
|
let shader =
|
||||||
shader(&self.cubes).width(Length::Fill).height(Length::Fill);
|
shader(&self.scene).width(Length::Fill).height(Length::Fill);
|
||||||
|
|
||||||
container(
|
container(
|
||||||
column![shader, controls, vertical_space(20),]
|
column![shader, controls, vertical_space(20),]
|
||||||
|
|
|
||||||
|
|
@ -12,7 +12,7 @@ use std::time::Duration;
|
||||||
pub const MAX: u32 = 500;
|
pub const MAX: u32 = 500;
|
||||||
|
|
||||||
#[derive(Clone)]
|
#[derive(Clone)]
|
||||||
pub struct Cubes {
|
pub struct Scene {
|
||||||
pub size: f32,
|
pub size: f32,
|
||||||
pub cubes: Vec<Cube>,
|
pub cubes: Vec<Cube>,
|
||||||
pub camera: Camera,
|
pub camera: Camera,
|
||||||
|
|
@ -20,9 +20,9 @@ pub struct Cubes {
|
||||||
pub light_color: Color,
|
pub light_color: Color,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Cubes {
|
impl Scene {
|
||||||
pub fn new() -> Self {
|
pub fn new() -> Self {
|
||||||
let mut cubes = Self {
|
let mut scene = Self {
|
||||||
size: 0.2,
|
size: 0.2,
|
||||||
cubes: vec![],
|
cubes: vec![],
|
||||||
camera: Camera::default(),
|
camera: Camera::default(),
|
||||||
|
|
@ -30,9 +30,9 @@ impl Cubes {
|
||||||
light_color: Color::WHITE,
|
light_color: Color::WHITE,
|
||||||
};
|
};
|
||||||
|
|
||||||
cubes.adjust_num_cubes(MAX);
|
scene.change_amount(MAX);
|
||||||
|
|
||||||
cubes
|
scene
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn update(&mut self, time: Duration) {
|
pub fn update(&mut self, time: Duration) {
|
||||||
|
|
@ -41,13 +41,13 @@ impl Cubes {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn adjust_num_cubes(&mut self, num_cubes: u32) {
|
pub fn change_amount(&mut self, amount: u32) {
|
||||||
let curr_cubes = self.cubes.len() as u32;
|
let curr_cubes = self.cubes.len() as u32;
|
||||||
|
|
||||||
match num_cubes.cmp(&curr_cubes) {
|
match amount.cmp(&curr_cubes) {
|
||||||
Ordering::Greater => {
|
Ordering::Greater => {
|
||||||
// spawn
|
// spawn
|
||||||
let cubes_2_spawn = (num_cubes - curr_cubes) as usize;
|
let cubes_2_spawn = (amount - curr_cubes) as usize;
|
||||||
|
|
||||||
let mut cubes = 0;
|
let mut cubes = 0;
|
||||||
self.cubes.extend(iter::from_fn(|| {
|
self.cubes.extend(iter::from_fn(|| {
|
||||||
|
|
@ -61,7 +61,7 @@ impl Cubes {
|
||||||
}
|
}
|
||||||
Ordering::Less => {
|
Ordering::Less => {
|
||||||
// chop
|
// chop
|
||||||
let cubes_2_cut = curr_cubes - num_cubes;
|
let cubes_2_cut = curr_cubes - amount;
|
||||||
let new_len = self.cubes.len() - cubes_2_cut as usize;
|
let new_len = self.cubes.len() - cubes_2_cut as usize;
|
||||||
self.cubes.truncate(new_len);
|
self.cubes.truncate(new_len);
|
||||||
}
|
}
|
||||||
|
|
@ -70,7 +70,7 @@ impl Cubes {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<Message> shader::Program<Message> for Cubes {
|
impl<Message> shader::Program<Message> for Scene {
|
||||||
type State = ();
|
type State = ();
|
||||||
type Primitive = primitive::Primitive;
|
type Primitive = primitive::Primitive;
|
||||||
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue