move box to primitives

This commit is contained in:
griffi-gh 2023-01-30 00:39:31 +01:00
parent e00af1cefb
commit 0b4363ef88
4 changed files with 58 additions and 55 deletions

View file

@ -54,7 +54,8 @@ use events::{
use input::{init_input, process_inputs}; use input::{init_input, process_inputs};
use fly_controller::update_controllers; use fly_controller::update_controllers;
use rendering::{ use rendering::{
selection_box::{render_selection_box, init_selection_box_buffers}, primitives::init_simple_box_buffers,
selection_box::render_selection_box,
world::draw_world, world::draw_world,
}; };
use block_placement::block_placement_system; use block_placement::block_placement_system;
@ -66,7 +67,7 @@ fn startup() -> Workload {
( (
load_settings, load_settings,
load_prefabs, load_prefabs,
init_selection_box_buffers, init_simple_box_buffers,
insert_lock_state, insert_lock_state,
lock_cursor_now, lock_cursor_now,
init_input, init_input,

View file

@ -1,3 +1,7 @@
use glium::{implement_vertex, VertexBuffer, IndexBuffer, index::PrimitiveType};
use shipyard::{NonSendSync, UniqueView, AllStoragesView, Unique};
use super::Renderer;
pub const CUBE_VERTICES: &[f32] = &[ pub const CUBE_VERTICES: &[f32] = &[
// front // front
0.0, 0.0, 1.0, 0.0, 0.0, 1.0,
@ -30,3 +34,47 @@ pub const CUBE_INDICES: &[u16] = &[
3, 2, 6, 3, 2, 6,
6, 7, 3 6, 7, 3
]; ];
#[derive(Clone, Copy, Default)]
pub struct PositionOnlyVertex {
pub position: [f32; 3],
}
implement_vertex!(PositionOnlyVertex, position);
const fn box_vertices() -> [PositionOnlyVertex; CUBE_VERTICES.len() / 3] {
let mut arr = [PositionOnlyVertex { position: [0., 0., 0.] }; CUBE_VERTICES.len() / 3];
let mut ptr = 0;
loop {
arr[ptr] = PositionOnlyVertex {
position: [
CUBE_VERTICES[ptr * 3],
CUBE_VERTICES[(ptr * 3) + 1],
CUBE_VERTICES[(ptr * 3) + 2]
]
};
ptr += 1;
if ptr >= CUBE_VERTICES.len() / 3 {
return arr
}
}
}
const BOX_VERTICES: &[PositionOnlyVertex] = &box_vertices();
#[derive(Unique)]
pub struct SimpleBoxBuffers(pub VertexBuffer<PositionOnlyVertex>, pub IndexBuffer<u16>);
pub fn init_simple_box_buffers(
storages: AllStoragesView,
display: NonSendSync<UniqueView<Renderer>>
) {
let vert = VertexBuffer::new(
&display.display,
BOX_VERTICES
).unwrap();
let index = IndexBuffer::new(
&display.display,
PrimitiveType::TrianglesList,
CUBE_INDICES
).unwrap();
storages.add_unique_non_send_sync(SimpleBoxBuffers(vert, index));
}

View file

@ -1,13 +1,10 @@
use shipyard::{View, IntoIter, NonSendSync, UniqueViewMut, UniqueView, AllStoragesView, Unique}; use shipyard::{View, IntoIter, NonSendSync, UniqueViewMut, UniqueView};
use glium::{ use glium::{
Surface, Surface,
implement_vertex,
IndexBuffer,
index::PrimitiveType,
VertexBuffer, uniform,
DrawParameters, DrawParameters,
BackfaceCullingMode, BackfaceCullingMode,
Blend, Depth, DepthTest, Blend, Depth, DepthTest,
uniform,
}; };
use crate::{ use crate::{
world::raycast::LookingAtBlock, world::raycast::LookingAtBlock,
@ -15,44 +12,15 @@ use crate::{
}; };
use super::{ use super::{
RenderTarget, RenderTarget,
primitives::{CUBE_INDICES, CUBE_VERTICES}, Renderer primitives::SimpleBoxBuffers,
}; };
#[derive(Clone, Copy, Default)]
pub struct SelBoxVertex {
pub position: [f32; 3],
}
implement_vertex!(SelBoxVertex, position);
const fn box_vertices() -> [SelBoxVertex; CUBE_VERTICES.len() / 3] {
let mut arr = [SelBoxVertex { position: [0., 0., 0.] }; CUBE_VERTICES.len() / 3];
let mut ptr = 0;
loop {
arr[ptr] = SelBoxVertex {
position: [
CUBE_VERTICES[ptr * 3],
CUBE_VERTICES[(ptr * 3) + 1],
CUBE_VERTICES[(ptr * 3) + 2]
]
};
ptr += 1;
if ptr >= CUBE_VERTICES.len() / 3 {
return arr
}
}
}
const BOX_VERTICES: &[SelBoxVertex] = &box_vertices();
#[derive(Unique)]
pub struct SelectionBoxBuffers(VertexBuffer<SelBoxVertex>, IndexBuffer<u16>);
//wip
pub fn render_selection_box( pub fn render_selection_box(
lookat: View<LookingAtBlock>, lookat: View<LookingAtBlock>,
camera: View<Camera>, camera: View<Camera>,
mut target: NonSendSync<UniqueViewMut<RenderTarget>>, mut target: NonSendSync<UniqueViewMut<RenderTarget>>,
program: NonSendSync<UniqueView<SelBoxShaderPrefab>>, program: NonSendSync<UniqueView<SelBoxShaderPrefab>>,
buffers: NonSendSync<UniqueView<SelectionBoxBuffers>>, buffers: NonSendSync<UniqueView<SimpleBoxBuffers>>,
) { ) {
let camera = camera.iter().next().unwrap(); let camera = camera.iter().next().unwrap();
let Some(lookat) = lookat.iter().next() else { return }; let Some(lookat) = lookat.iter().next() else { return };
@ -80,19 +48,3 @@ pub fn render_selection_box(
} }
).unwrap(); ).unwrap();
} }
pub fn init_selection_box_buffers(
storages: AllStoragesView,
display: NonSendSync<UniqueView<Renderer>>
) {
let vert = VertexBuffer::new(
&display.display,
BOX_VERTICES
).unwrap();
let index = IndexBuffer::new(
&display.display,
PrimitiveType::TrianglesList,
CUBE_INDICES
).unwrap();
storages.add_unique_non_send_sync(SelectionBoxBuffers(vert, index));
}

View file

@ -2,15 +2,17 @@ use shipyard::{Unique, AllStoragesView};
#[derive(Unique)] #[derive(Unique)]
pub struct GameSettings { pub struct GameSettings {
//there's a 1 chunk border of loaded but invisible around this /// there's a 1 chunk border of loaded but invisible around this
pub render_distance: u8, pub render_distance: u8,
pub mouse_sensitivity: f32, pub mouse_sensitivity: f32,
pub debug_draw_chunk_border: bool,
} }
impl Default for GameSettings { impl Default for GameSettings {
fn default() -> Self { fn default() -> Self {
Self { Self {
render_distance: 5, render_distance: 5,
mouse_sensitivity: 1., mouse_sensitivity: 1.,
debug_draw_chunk_border: cfg!(debug_assertions),
} }
} }
} }