1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
|
use teleia::*;
use std::ops::Rem;
pub struct TestGame {
font: font::Bitmap,
tt: font::TrueType,
// cube: mesh::Mesh,
fox: scene::Scene,
tex: texture::Texture,
shader: shader::Shader,
}
impl TestGame {
pub async fn new(ctx: &context::Context) -> Self {
Self {
font: font::Bitmap::new(ctx),
tt: font::TrueType::new(ctx, 12.0, include_bytes!("assets/fonts/ComicNeue-Regular.ttf")),
// cube: mesh::Mesh::from_obj(ctx, include_bytes!("assets/meshes/cube.obj")),
fox: scene::Scene::from_gltf(ctx, include_bytes!("assets/scenes/fox.glb")),
// fox: scene::Scene::from_gltf(ctx, include_bytes!("/home/llll/src/colonq/assets/lcolonq_flat.vrm")),
tex: texture::Texture::new(ctx, include_bytes!("assets/textures/test.png")),
shader: scene::Scene::load_default_shader(ctx),
}
}
}
impl state::Game for TestGame {
fn update(&mut self, ctx: &context::Context, st: &mut state::State) -> Erm<()> {
st.move_camera(
ctx,
&glam::Vec3::new(0.0, 0.0, -1.0),
&glam::Vec3::new(0.0, 0.0, 1.0),
&glam::Vec3::new(0.0, 1.0, 0.0),
);
Ok(())
}
fn render(&mut self, ctx: &context::Context, st: &mut state::State) -> Erm<()> {
// if let Some(n) = self.fox.nodes_by_name.get("J_Bip_C_Neck").and_then(|i| self.fox.nodes.get_mut(*i)) {
// n.transform *= glam::Mat4::from_rotation_z(0.05);
// }
ctx.clear();
self.fox.reflect_animation("Run", (st.tick as f32 / 60.0).rem(3.0));
st.bind_3d(ctx, &self.shader);
self.shader.set_position_3d(
ctx,
&glam::Mat4::from_scale_rotation_translation(
glam::Vec3::new(0.005, 0.005, 0.005),
// glam::Vec3::new(1.0, 1.0, 1.0),
glam::Quat::from_rotation_y(st.tick as f32 / 60.0),
glam::Vec3::new(0.0, -0.2, 0.0),
),
);
self.tex.bind(ctx);
self.fox.render(ctx, &self.shader);
self.font.render_text(ctx, &glam::Vec2::new(0.0, 10.0), "he's all FIXED up");
self.tt.render_text_helper(
ctx, &glam::Vec2::new(10.0, 60.0), &glam::Vec2::new(20.0, 30.0),
"tESTge",
&[
glam::Vec3::new(1.0, 0.0, 0.0),
glam::Vec3::new(0.0, 1.0, 0.0),
],
);
Ok(())
}
}
#[tokio::main]
pub async fn main() {
run("teleia test", 240, 160, Options::empty(), TestGame::new).await;
}
|