From 0dcf70649d587e3e4ecef80c7933137a4da07091 Mon Sep 17 00:00:00 2001 From: _ <_@_> Date: Sun, 9 Jan 2022 17:03:58 +0000 Subject: [PATCH] :recycle: refactor --- src/bin/platformer/level_loader.rs | 82 ++++++++++++++++++++++++++++++ src/bin/platformer/main.rs | 79 +--------------------------- 2 files changed, 84 insertions(+), 77 deletions(-) create mode 100644 src/bin/platformer/level_loader.rs diff --git a/src/bin/platformer/level_loader.rs b/src/bin/platformer/level_loader.rs new file mode 100644 index 0000000..798f3c8 --- /dev/null +++ b/src/bin/platformer/level_loader.rs @@ -0,0 +1,82 @@ +use anyhow::Result; + +use opengl_rust::{ + prelude::*, +}; + +pub struct LoadedLevel { + pub player_spawn: Vec3, + pub buffer: Vec , + pub level: gltf::Document, +} + +impl LoadedLevel { + pub fn from_path (path: &str) -> Result { + use gltf::{ + Semantic, + scene::Transform, + }; + + let (level, buffers, _) = gltf::import (path)?; + let buffer = match buffers.get (0) { + None => bail! ("gltf didn't load any buffers"), + Some (x) => x.0.to_vec (), + }; + + let scene = match level.scenes ().next () { + None => bail! ("No scenes in glTF file"), + Some (x) => x, + }; + + let mut player_spawn = None; + + for node in scene.nodes () { + if node.name () == Some ("Player Spawn") { + let (translation, _, _) = node.transform ().decomposed (); + player_spawn = Some (Vec3::from (translation)); + } + else if let Some (camera) = node.camera () { + + } + else if let Some (mesh) = node.mesh () { + for (i, prim) in mesh.primitives ().enumerate () { + let positions = match prim.get (&Semantic::Positions) { + None => continue, + Some (x) => x, + }; + let normals = match prim.get (&Semantic::Normals) { + None => continue, + Some (x) => x, + }; + let indices = match prim.indices () { + None => continue, + Some (x) => x, + }; + let pos_view = match positions.view () { + None => continue, + Some (x) => x, + }; + let norm_view = match normals.view () { + None => continue, + Some (x) => x, + }; + let indices_view = match indices.view () { + None => continue, + Some (x) => x, + }; + } + } + } + + let player_spawn = match player_spawn { + None => bail! ("glTF file must have `Player Spawn` node"), + Some (x) => x, + }; + + Ok (Self { + buffer, + level, + player_spawn, + }) + } +} diff --git a/src/bin/platformer/main.rs b/src/bin/platformer/main.rs index 9244d42..3a08d31 100644 --- a/src/bin/platformer/main.rs +++ b/src/bin/platformer/main.rs @@ -19,9 +19,11 @@ use opengl_rust::{ }; mod graphics; +mod level_loader; mod virtual_gamepad; use graphics::Graphics; +use level_loader::LoadedLevel; use virtual_gamepad::VirtualGamepad; pub struct GameState { @@ -407,83 +409,6 @@ async fn main () -> Result <()> { Ok (()) } -struct LoadedLevel { - player_spawn: Vec3, - buffer: Vec , - level: gltf::Document, -} - -impl LoadedLevel { - fn from_path (path: &str) -> Result { - use gltf::{ - Semantic, - scene::Transform, - }; - - let (level, buffers, _) = gltf::import (path)?; - let buffer = match buffers.get (0) { - None => bail! ("gltf didn't load any buffers"), - Some (x) => x.0.to_vec (), - }; - - let scene = match level.scenes ().next () { - None => bail! ("No scenes in glTF file"), - Some (x) => x, - }; - - let mut player_spawn = None; - - for node in scene.nodes () { - if node.name () == Some ("Player Spawn") { - let (translation, _, _) = node.transform ().decomposed (); - player_spawn = Some (Vec3::from (translation)); - } - else if let Some (camera) = node.camera () { - - } - else if let Some (mesh) = node.mesh () { - for (i, prim) in mesh.primitives ().enumerate () { - let positions = match prim.get (&Semantic::Positions) { - None => continue, - Some (x) => x, - }; - let normals = match prim.get (&Semantic::Normals) { - None => continue, - Some (x) => x, - }; - let indices = match prim.indices () { - None => continue, - Some (x) => x, - }; - let pos_view = match positions.view () { - None => continue, - Some (x) => x, - }; - let norm_view = match normals.view () { - None => continue, - Some (x) => x, - }; - let indices_view = match indices.view () { - None => continue, - Some (x) => x, - }; - } - } - } - - let player_spawn = match player_spawn { - None => bail! ("glTF file must have `Player Spawn` node"), - Some (x) => x, - }; - - Ok (Self { - buffer, - level, - player_spawn, - }) - } -} - struct ShaderLocations { attr_pos: u32, attr_normal: u32,