You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

123 lines
2.3 KiB

#![allow(unused_variables, unused_mut)]
mod game;
mod input;
mod render;
use ash::Device;
use ash::Entry;
use ash::Instance;
use ash::vk;
use game::Camera;
use render::SwapchainCtx;
use render::loading_world::Component;
use render::loading_world::WorldComponent;
use render::skybox::Skybox;
use sdl2::{Sdl, video::Window as SdlWindow};
use std::collections::HashMap;
const APP_NAME: &str = "MineClone";
pub trait GameState {}
pub struct Unstarted;
impl GameState for Unstarted {}
pub struct RenderCtx {
entry: Entry,
instance: Instance,
pdev: vk::PhysicalDevice,
dev: Device,
surface: vk::SurfaceKHR,
queue: vk::Queue,
queue_idx: u32,
cmd_buf: vk::CommandBuffer,
host_vis_idx: u32,
host_invis_idx: u32,
}
pub struct Window {
width: u32,
height: u32,
_sdl: SdlWindow,
}
pub struct RenderAvailable {
sdl_context: Sdl,
window: Window,
ctx: RenderCtx,
}
impl GameState for RenderAvailable {}
pub struct LoadingWorld {
sdl_context: Sdl,
window: Window,
ctx: RenderCtx,
requested_descriptors: HashMap<vk::DescriptorType, u32>,
swapchain: SwapchainCtx,
pass: vk::RenderPass,
skybox: Skybox,
components: Vec<Box<dyn WorldComponent>>,
}
impl GameState for LoadingWorld {}
pub struct InWorld {
sdl_context: Sdl,
window: Window,
ctx: RenderCtx,
skybox: (Skybox, vk::DescriptorSet),
components: Vec<Component>,
sem_avail: vk::Semaphore,
sem_finish: vk::Semaphore,
fence_flight: vk::Fence,
swapchain: SwapchainCtx,
pass: vk::RenderPass,
camera: Camera,
}
impl GameState for InWorld {}
pub struct Game<S: GameState> {
state: S,
}
impl Game<Unstarted> {
pub fn new() -> Self {
Self { state: Unstarted }
}
}
fn decode_rif(raw: &[u8]) -> &[u8] {
&raw[17..]
}
fn main() {
let sdl_context = sdl2::init().unwrap();
let video_subsystem = sdl_context.video().unwrap();
let mut window = video_subsystem
.window(APP_NAME, 1024, 768)
.vulkan()
.resizable()
.build()
.unwrap();
let game = Game::new().init_render(sdl_context, window);
let mut game = game.start_load_world();
let cube = game.create_cube();
game.add_component(cube);
let game = game.start_world();
let game = game.main_loop();
}