From 174061feb1cfcd9a422927354c95b240ba863dae Mon Sep 17 00:00:00 2001 From: _ <_@_> Date: Sun, 19 Dec 2021 03:47:57 +0000 Subject: [PATCH] shadows are working idk --- .gitignore | 1 + crate.png | Bin 0 -> 1948 bytes earth.png | Bin 0 -> 13171 bytes sphere.iqm | Bin 40264 -> 11080 bytes src/bin/platformer.rs | 67 ++++++++++++++++++++++++++++++++++++++---- src/physics.rs | 4 +-- src/timestep.rs | 2 +- 7 files changed, 66 insertions(+), 8 deletions(-) create mode 100644 crate.png create mode 100644 earth.png diff --git a/.gitignore b/.gitignore index 08272ef..9b27146 100644 --- a/.gitignore +++ b/.gitignore @@ -1,6 +1,7 @@ /quic_server.crt /target **/*.rs.bk +/videos *.blend* *.trace diff --git a/crate.png b/crate.png new file mode 100644 index 0000000000000000000000000000000000000000..6c19367308ae7a879c731e6bc551f24cee5f279e GIT binary patch literal 1948 zcmbVM`!~~%AAT<}WEr^(xphMqR;tY<%xJBop%SGP%~&Cp+_DKprgp@~W%1cQa!EB* zB!z|f$fY9l5pr+Y1xvY(%~$`z_c`ZzJ?A{TUljlV2=vmxw9{@nf!DuuNi$}q-s*yMy?aackU`cjok|5XRcjBsjt#F{Oq0Lhmk%5&QUn(J>-xqi%t3;>(9 z{2>TnOS9|C;RvDS&P(=%_2Z zJ$3GMf4>)W*Yt8sLURgzmpb%^F7#NgCm)`9dMDiEn-X}V+QyBW-O7hVGr|JDX{L{G z1=JT?eQ}X8;`X_d6!>@Dt;IP}=xbm5K)6xTzwUlH>_FjeYcl?I%DL~C910x;~-Aba*Z^@jqREr z2yB&6?fgkPP)k+1!|$<{mJ+Z<fIc3x5&gUEk*?R{?|Bjq7810jG8mRafI>a*@C@;j* zDwBxcxn--wHaf>!!PlD#Ro_kP#))bIoL&jy7Fcfc=iyEm$qwAChl&v|je}Ge=JbmM zUi(Pb6sp0Jk!vZQoX}N*-lgn1r?x)^06LhNU; z1u4H+=JQt#xTtvyC(~EDF@T?GOln+N0qb=|_6y${W%(?SAp&C6 zmmwHCx%(_xLAuw@kC*hYgHjEWVMfZq{AUt9`02Tj7`WxNT7>#H_C317VEMrqe9%c^ z@|{oIxh=#(+Oll0KnPkplNB1_%ACvwtQ0kLbBHzK?+DY_Hnb=0qo`>ISpG^KS67=yo+*VxE(s6|JaX@se8LkX!ixH52d>Ad)e~ffA zAiC#iL07^*dC8zn-^YKYt40zWX7Rs@ zjuIgY!AOmHv~s3-cvYj`2m^bRvxk59%3)sVbIMZv<(>iYaxQb2Gt|;|eL%$;Q{0IR zUr+b&N`iOXIA_2dF0Z+qaR@j1h1Q3Z2X#~&Y_)-s2Y?w+Uyl3V_)`^4o!{)~*WghY z+y0kpUm<+i3AtC1hONc$i5^Ai`6b?*@)J%UgkPU!UJetV4J8Q=)=G~*vBETYumwBjD1CNsN>{P4!0UZ2XxEiKNVNIw19#M2-{Aij auD^{BdU%Alp^3A9DzL8ZF6GXb68{GS-k-$) literal 0 HcmV?d00001 diff --git a/earth.png b/earth.png new file mode 100644 index 0000000000000000000000000000000000000000..3abd9adc7c97ba396ecd7064ee958eee56c52bc1 GIT binary patch literal 13171 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 literal 0 HcmV?d00001 diff --git a/sphere.iqm b/sphere.iqm index 2a9c7a1349346a3c28301b41801b9f429ba1fd4e..b137494dc6bf94d2d0576ced39229d2cd03c0413 100644 GIT binary patch literal 11080 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 QERqtT#^uuM!TGWO284C_n*aa+ literal 40264 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 Result <()> { let sdl_context = sdl2::init ().map_err (|e| anyhow! ("Can't init SDL: {}", e))?; let video_subsystem = sdl_context.video ().map_err (|e| anyhow! ("Can't get SDL video subsystem: {}", e))?; - let window = video_subsystem.window ("3D platformer", 1280, 720) + let window = video_subsystem.window ("3D platformer", 320, 240) .position_centered () .opengl () .build () @@ -275,7 +330,7 @@ async fn main () -> Result <()> { glezz::enable_vertex_attrib_array (attrs [attributes::NORMAL]); }); - let graphics = GameGraphics { + let mut graphics = GameGraphics { mesh_cube, mesh_sky, mesh_sphere, @@ -284,7 +339,9 @@ async fn main () -> Result <()> { shaders, text_stream, texture_crate: Texture::from_file ("crate.png"), + texture_earth: Texture::from_file ("earth.png"), texture_sky: Texture::from_file ("sky.png"), + frames: 0, }; let mut gl_state = Default::default (); @@ -374,9 +431,9 @@ async fn main () -> Result <()> { window.gl_make_current (&gl_ctx).unwrap (); graphics.draw (&game_state, &mut gl_state); + graphics.frames += 1; window.gl_swap_window (); - graphics_frames += 1; tokio::time::sleep (Duration::from_millis (15)).await; } diff --git a/src/physics.rs b/src/physics.rs index 2487956..132d864 100644 --- a/src/physics.rs +++ b/src/physics.rs @@ -59,8 +59,8 @@ impl Triangle { #[derive (Clone, Copy, Debug, PartialEq)] pub struct Collision { - t: f32, - p_impact: Vec3, + pub t: f32, + pub p_impact: Vec3, normal: Vec3, i: usize, c_type: CollisionType, diff --git a/src/timestep.rs b/src/timestep.rs index c8e1f0c..447f6c7 100644 --- a/src/timestep.rs +++ b/src/timestep.rs @@ -12,7 +12,7 @@ impl TimeStep { pub fn new (fps_num: u16, fps_den: u16) -> Self { Self { last_frame_time: Instant::now (), - accum: 0, + accum: (fps_den / 2).into (), fps_num, fps_den, }