Select stuff (hit detection is still off)
This commit is contained in:
@@ -6,6 +6,8 @@ use crate::input::InputState;
|
||||
use crate::vulkan::{RendererDescriptorSets, TextureHandle};
|
||||
use crate::vulkan::{MeshHandle, VulkanRenderer};
|
||||
|
||||
use super::pipelines::vs;
|
||||
|
||||
#[derive(Clone)]
|
||||
pub struct GameObject {
|
||||
pub mesh_index: usize,
|
||||
@@ -15,14 +17,15 @@ pub struct GameObject {
|
||||
pub rotation: Quaternion<f32>,
|
||||
pub scale: Vector3<f32>,
|
||||
pub children: Vec<GameObject>,
|
||||
pub descriptor_sets: Vec<Arc<RendererDescriptorSets>>
|
||||
pub descriptor_sets: Vec<Arc<RendererDescriptorSets>>,
|
||||
pub is_selected: bool
|
||||
}
|
||||
|
||||
impl GameObject {
|
||||
pub fn new(mesh: MeshHandle) -> GameObject {
|
||||
GameObject { mesh_index: mesh.index, texture_index: mesh.diffuse_handle, normal_map_index: mesh.normal_handle, position: Vector3::new(0.0, 0.0, 0.0),
|
||||
rotation: Quaternion::new(1.0, 0.0, 0.0, 0.0), scale: Vector3::new(1.0, 1.0, 1.0), children: vec![],
|
||||
descriptor_sets: vec![] }
|
||||
descriptor_sets: vec![], is_selected: false }
|
||||
}
|
||||
|
||||
pub fn _set_position(&mut self, x: f32, y: f32, z: f32) {
|
||||
@@ -51,6 +54,13 @@ impl GameObject {
|
||||
self.rotation = self.rotation * Quaternion::from(Euler::new(Deg(x), Deg(y), Deg(z)));
|
||||
}
|
||||
|
||||
pub fn get_push_constants(&self) -> vs::ty::PushConstants {
|
||||
vs::ty::PushConstants {
|
||||
model: self.get_model_matrix().into(),
|
||||
is_selected: if self.is_selected { 0 } else { 1 },
|
||||
}
|
||||
}
|
||||
|
||||
pub fn get_model_matrix(&self) -> Matrix4<f32> {
|
||||
let translation = Matrix4::from_translation(self.position);
|
||||
let rotation: Matrix4<f32> = self.rotation.into();
|
||||
|
||||
@@ -27,7 +27,6 @@ use pipelines::{Drawcall, LineShader};
|
||||
use pipelines::line_vs::ty::LinePushConstants;
|
||||
use pipelines::DefaultShader;
|
||||
use pipelines::vs;
|
||||
use pipelines::vs::ty::PushConstants;
|
||||
|
||||
use crate::config::RenderConfig;
|
||||
use crate::vulkan::gameobject::{GameObject, GameObjectHandle};
|
||||
@@ -91,7 +90,6 @@ pub struct Texture {
|
||||
pub struct GameData {
|
||||
pub start_time: SystemTime,
|
||||
pub line_vertices: Vec<LinePoint>,
|
||||
pub push_constants: PushConstants,
|
||||
pub line_push_constants: LinePushConstants,
|
||||
pub recreate_pipeline: bool,
|
||||
pub dimensions: [u32; 2],
|
||||
@@ -126,9 +124,6 @@ impl VulkanRenderer {
|
||||
pub fn init(line_vertices: Vec<LinePoint>, enable_validation_layers: bool, render_config: RenderConfig) -> (VulkanRenderer, EventLoop<()>) {
|
||||
// Create empty game data struct to be filled
|
||||
let mut data = GameData {
|
||||
push_constants: PushConstants {
|
||||
model: Matrix4::identity().into(),
|
||||
},
|
||||
line_push_constants: LinePushConstants {
|
||||
model: Matrix4::identity().into(),
|
||||
view: Matrix4::identity().into(),
|
||||
|
||||
@@ -140,8 +140,7 @@ impl Drawcall for DefaultShader {
|
||||
for i in 0..game_data.game_objects.len() {
|
||||
let game_object = &game_data.game_objects[i];
|
||||
let mesh = &game_data.meshes[game_object.mesh_index];
|
||||
let mut push_constants = game_data.push_constants.clone();
|
||||
push_constants.model = game_object.get_model_matrix().into();
|
||||
let push_constants = game_object.get_push_constants();
|
||||
|
||||
builder.draw_indexed(
|
||||
self.pipeline.clone(),
|
||||
|
||||
Reference in New Issue
Block a user