summaryrefslogtreecommitdiff
path: root/examples
diff options
context:
space:
mode:
authorLLLL Colonq <llll@colonq>2025-03-03 18:56:22 -0500
committerLLLL Colonq <llll@colonq>2025-03-03 18:56:38 -0500
commit8450893a1c0598b3af8c7cf9a9c39966e754ae14 (patch)
treed5c3162c91b44aa1e52e1098ae729aec5d305e2a /examples
parente73044fbd51f9c8f15eb6bd60248887ccd8b16f0 (diff)
Move example to example
Diffstat (limited to 'examples')
-rw-r--r--examples/assets/fonts/ComicNeue-Regular.ttfbin0 -> 54848 bytes
-rw-r--r--examples/assets/meshes/cube.obj38
-rw-r--r--examples/assets/scenes/fox.glbbin0 -> 162852 bytes
-rw-r--r--examples/assets/textures/test.pngbin0 -> 125 bytes
-rw-r--r--examples/fox.rs72
5 files changed, 110 insertions, 0 deletions
diff --git a/examples/assets/fonts/ComicNeue-Regular.ttf b/examples/assets/fonts/ComicNeue-Regular.ttf
new file mode 100644
index 0000000..d454f46
--- /dev/null
+++ b/examples/assets/fonts/ComicNeue-Regular.ttf
Binary files differ
diff --git a/examples/assets/meshes/cube.obj b/examples/assets/meshes/cube.obj
new file mode 100644
index 0000000..2f3a670
--- /dev/null
+++ b/examples/assets/meshes/cube.obj
@@ -0,0 +1,38 @@
+# Blender 4.1.1
+# www.blender.org
+o Cube
+v 1.000000 1.000000 -1.000000
+v 1.000000 -1.000000 -1.000000
+v 1.000000 1.000000 1.000000
+v 1.000000 -1.000000 1.000000
+v -1.000000 1.000000 -1.000000
+v -1.000000 -1.000000 -1.000000
+v -1.000000 1.000000 1.000000
+v -1.000000 -1.000000 1.000000
+vn -0.0000 1.0000 -0.0000
+vn -0.0000 -0.0000 1.0000
+vn -1.0000 -0.0000 -0.0000
+vn -0.0000 -1.0000 -0.0000
+vn 1.0000 -0.0000 -0.0000
+vn -0.0000 -0.0000 -1.0000
+vt 0.625000 0.500000
+vt 0.875000 0.500000
+vt 0.875000 0.750000
+vt 0.625000 0.750000
+vt 0.375000 0.750000
+vt 0.625000 1.000000
+vt 0.375000 1.000000
+vt 0.375000 0.000000
+vt 0.625000 0.000000
+vt 0.625000 0.250000
+vt 0.375000 0.250000
+vt 0.125000 0.500000
+vt 0.375000 0.500000
+vt 0.125000 0.750000
+s 0
+f 1/1/1 5/2/1 7/3/1 3/4/1
+f 4/5/2 3/4/2 7/6/2 8/7/2
+f 8/8/3 7/9/3 5/10/3 6/11/3
+f 6/12/4 2/13/4 4/5/4 8/14/4
+f 2/13/5 1/1/5 3/4/5 4/5/5
+f 6/11/6 5/10/6 1/1/6 2/13/6
diff --git a/examples/assets/scenes/fox.glb b/examples/assets/scenes/fox.glb
new file mode 100644
index 0000000..1ef5c0d
--- /dev/null
+++ b/examples/assets/scenes/fox.glb
Binary files differ
diff --git a/examples/assets/textures/test.png b/examples/assets/textures/test.png
new file mode 100644
index 0000000..0752be0
--- /dev/null
+++ b/examples/assets/textures/test.png
Binary files differ
diff --git a/examples/fox.rs b/examples/fox.rs
new file mode 100644
index 0000000..33df561
--- /dev/null
+++ b/examples/fox.rs
@@ -0,0 +1,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) -> Option<()> {
+ 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),
+ );
+ Some(())
+ }
+ fn render(&mut self, ctx: &context::Context, st: &mut state::State) -> Option<()> {
+ // 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),
+ ],
+ );
+ Some(())
+ }
+}
+
+#[tokio::main]
+pub async fn main() {
+ run("teleia test", 240, 160, Options::empty(), TestGame::new).await;
+}