commit a2b00e5942905917531d150233c27bd390ff0840 Author: Aly Sewelam Date: Sat Jul 25 16:50:55 2026 +0300 BANG BIG PEANITS diff --git a/.envrc b/.envrc new file mode 100644 index 0000000..1d953f4 --- /dev/null +++ b/.envrc @@ -0,0 +1 @@ +use nix diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..d0160f2 --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +/target +/.direnv/ diff --git a/Cargo.lock b/Cargo.lock new file mode 100644 index 0000000..3369a16 --- /dev/null +++ b/Cargo.lock @@ -0,0 +1,347 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 4 + +[[package]] +name = "aho-corasick" +version = "1.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ddd31a130427c27518df266943a5308ed92d4b226cc639f5a8f1002816174301" +dependencies = [ + "memchr", +] + +[[package]] +name = "animal-rayscue" +version = "0.1.0" +dependencies = [ + "raylib", +] + +[[package]] +name = "bindgen" +version = "0.72.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "993776b509cfb49c750f11b8f07a46fa23e0a1386ffc01fb1e7d343efc387895" +dependencies = [ + "bitflags", + "cexpr", + "clang-sys", + "itertools", + "log", + "prettyplease", + "proc-macro2", + "quote", + "regex", + "rustc-hash", + "shlex 1.3.0", + "syn 2.0.119", +] + +[[package]] +name = "bitflags" +version = "2.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b588b76d00fde79687d7646a9b5bdf3cc0f655e0bbd080335a95d7e96f3587da" + +[[package]] +name = "cc" +version = "1.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5add81bb678e6cb321aff7fa0dc7689ad82b112dbc032cea19f91d6b8e3582b9" +dependencies = [ + "find-msvc-tools", + "jobserver", + "libc", + "shlex 2.0.1", +] + +[[package]] +name = "cexpr" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6fac387a98bb7c37292057cffc56d62ecb629900026402633ae9160df93a8766" +dependencies = [ + "nom", +] + +[[package]] +name = "cfg-if" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801" + +[[package]] +name = "clang-sys" +version = "1.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b023947811758c97c59bf9d1c188fd619ad4718dcaa767947df1cadb14f39f4" +dependencies = [ + "glob", + "libc", + "libloading", +] + +[[package]] +name = "cmake" +version = "0.1.58" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c0f78a02292a74a88ac736019ab962ece0bc380e3f977bf72e376c5d78ff0678" +dependencies = [ + "cc", +] + +[[package]] +name = "either" +version = "1.17.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9e5e8f6c15a24b9a3ee5efec809ccd006d3b30e8b3bb63c39af737c7f87daa1d" + +[[package]] +name = "find-msvc-tools" +version = "0.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5baebc0774151f905a1a2cc41989300b1e6fbb29aff0ceffa1064fdd3088d582" + +[[package]] +name = "getrandom" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "300e883d756b2e4ec94e02791f39b04b522276138852cfc41d9fb7e904106099" +dependencies = [ + "cfg-if", + "libc", + "r-efi", +] + +[[package]] +name = "glob" +version = "0.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e4eba85ea1d0a966a983acd07deee566e67395d2d96b6fb39e62b5a833f1eb0b" + +[[package]] +name = "itertools" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "413ee7dfc52ee1a4949ceeb7dbc8a33f2d6c088194d9f922fb8318faf1f01186" +dependencies = [ + "either", +] + +[[package]] +name = "jobserver" +version = "0.1.35" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1c00acbd29eabad4a2392fa0e921c874934dbbf4194312ad20f04a0ed67a3cb3" +dependencies = [ + "getrandom", + "libc", +] + +[[package]] +name = "libc" +version = "0.2.189" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3eaf3ede3fee6db1a4c2ee091bf8a8b4dccdc6d17f656fb07896ee72867612f2" + +[[package]] +name = "libloading" +version = "0.8.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d7c4b02199fee7c5d21a5ae7d8cfa79a6ef5bb2fc834d6e9058e89c825efdc55" +dependencies = [ + "cfg-if", + "windows-link", +] + +[[package]] +name = "log" +version = "0.4.33" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ceec5bc11778974d1bcb055b18002eba7f4b3518b6a0081b3af5f21666da9ad" + +[[package]] +name = "memchr" +version = "2.8.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cf8baf1c55e62ffcace7a9f06f4bd9cd3f0c4beb022d3b367256b91b87513d98" + +[[package]] +name = "minimal-lexical" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" + +[[package]] +name = "nom" +version = "7.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a" +dependencies = [ + "memchr", + "minimal-lexical", +] + +[[package]] +name = "prettyplease" +version = "0.2.37" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "479ca8adacdd7ce8f1fb39ce9ecccbfe93a3f1344b3d0d97f20bc0196208f62b" +dependencies = [ + "proc-macro2", + "syn 2.0.119", +] + +[[package]] +name = "proc-macro2" +version = "1.0.107" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "985e7ec9bb745e6ce6535b544d84d6cd6f7ad8bd711c398938ae983b91a766d9" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "quote" +version = "1.0.47" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1fbf4db142a473a8d80c26bbf18454ed458bf8d26c8219c331daecfdbd079001" +dependencies = [ + "proc-macro2", +] + +[[package]] +name = "r-efi" +version = "6.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8dcc9c7d52a811697d2151c701e0d08956f92b0e24136cf4cf27b57a6a0d9bf" + +[[package]] +name = "raylib" +version = "6.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "74b6057eb69bc6ac196260f5751a9bc69d69a445174d288ad87b9f6cefecd88c" +dependencies = [ + "raylib-sys", + "seq-macro", + "thiserror", +] + +[[package]] +name = "raylib-sys" +version = "6.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "36be0f95d9ea818847eedf4a6a73cbd5331db5a558069747dae827ac3c12fdf8" +dependencies = [ + "bindgen", + "cc", + "cmake", +] + +[[package]] +name = "regex" +version = "1.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f020237b6c8eed93db2e2cb53c00c60a8e1bc73da7d073199a1180401450218d" +dependencies = [ + "aho-corasick", + "memchr", + "regex-automata", + "regex-syntax", +] + +[[package]] +name = "regex-automata" +version = "0.4.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8fcfdb36bda0c880c5931cdc7a2bcdc8ba4556847b9d912bca70bc94708711ad" +dependencies = [ + "aho-corasick", + "memchr", + "regex-syntax", +] + +[[package]] +name = "regex-syntax" +version = "0.8.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d6f6ff9a378485b298a5286656da665ba74413d36db0979633275d2e708145d4" + +[[package]] +name = "rustc-hash" +version = "2.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6b1e7f9a428571be2dc5bc0505c13fb6bf936822b894ec87abf8a08a4e51742d" + +[[package]] +name = "seq-macro" +version = "0.3.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1bc711410fbe7399f390ca1c3b60ad0f53f80e95c5eb935e52268a0e2cd49acc" + +[[package]] +name = "shlex" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" + +[[package]] +name = "shlex" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8fadd59c855ef2080decdef8ff161eb6661b86933c9d82e5ba29dc602a55aba" + +[[package]] +name = "syn" +version = "2.0.119" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "872831b642d1a07999a962a351ed35b955ea2cfc8f3862091e2a240a84f17297" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "syn" +version = "3.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "53e9bae58849f64dfa4f5d5ae372c8341f7305f82a3868709269343628b659a3" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "thiserror" +version = "2.0.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09a43598840e33d5b0331f38c5e30d13bb11c11210a4b58f0d9b18a5a5eefcd9" +dependencies = [ + "thiserror-impl", +] + +[[package]] +name = "thiserror-impl" +version = "2.0.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "43cbfe0cf76104d42a574802844187e84a305e531ed54455f11fbde0f10541cd" +dependencies = [ + "proc-macro2", + "quote", + "syn 3.0.3", +] + +[[package]] +name = "unicode-ident" +version = "1.0.24" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6e4313cd5fcd3dad5cafa179702e2b244f760991f45397d14d4ebf38247da75" + +[[package]] +name = "windows-link" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f0805222e57f7521d6a62e36fa9163bc891acd422f971defe97d64e70d0a4fe5" diff --git a/Cargo.toml b/Cargo.toml new file mode 100644 index 0000000..0f16c7e --- /dev/null +++ b/Cargo.toml @@ -0,0 +1,8 @@ +[package] +name = "animal-rayscue" +version = "0.1.0" +edition = "2024" + +[dependencies] + +raylib = "6.0" diff --git a/changelog.org b/changelog.org new file mode 100644 index 0000000..c52eb95 --- /dev/null +++ b/changelog.org @@ -0,0 +1 @@ +* Unreleased diff --git a/docs/entities.svg b/docs/entities.svg new file mode 100644 index 0000000..7e5af1c --- /dev/null +++ b/docs/entities.svg @@ -0,0 +1,48 @@ + + + + + + + + + +player + +player + + + +animal + +animal + + + +save_animal + +save_animal + + + +interact_with_env + +interact_with_env + + + +interact_with_anim + +interact_with_anim + + + +use_item + +use_item + + + diff --git a/notes.org b/notes.org new file mode 100644 index 0000000..98095ca --- /dev/null +++ b/notes.org @@ -0,0 +1,24 @@ +* Inbox +** [2026-07-25 Sat 14:06] Level Design +- player (helps animal) +- save animal (and bring it back) +- Stage changes after saving animal to get back +** Diagrams +#+begin_src dot :file docs/entities.svg :results file graphics +digraph { + //entities + player; + animal; + + // actions + node [shape="box"]; + save_animal; + interact_with_env; + interact_with_anim; + use_item; + escape_player; +} +#+end_src + +#+RESULTS: +[[file:docs/entities.svg]] diff --git a/shell.nix b/shell.nix new file mode 100644 index 0000000..755f113 --- /dev/null +++ b/shell.nix @@ -0,0 +1,37 @@ +{ pkgs ? import {} }: + +let + libs = with pkgs; [ + libGL + libx11 + libxcursor + libxrandr + libxinerama + libxi + libxext + wayland + libxkbcommon + alsa-lib + fontconfig + freetype + glfw + curl + ]; +in +pkgs.mkShell { + buildInputs = with pkgs; [ + rustup + + cmake + pkg-config + gcc + + + llvmPackages.libclang + llvmPackages.clang + ] ++ libs; + + LD_LIBRARY_PATH = pkgs.lib.makeLibraryPath (libs ++ [ pkgs.llvmPackages.libclang.lib ]); + LIBCLANG_PATH = "${pkgs.llvmPackages.libclang.lib}/lib"; + BINDGEN_EXTRA_CLANG_ARGS = "-isystem ${pkgs.glibc.dev}/include -isystem ${pkgs.stdenv.cc.cc}/lib/gcc/${pkgs.stdenv.hostPlatform.config}/${pkgs.stdenv.cc.cc.version}/include"; +} diff --git a/src/controls.rs b/src/controls.rs new file mode 100644 index 0000000..cecfc06 --- /dev/null +++ b/src/controls.rs @@ -0,0 +1,17 @@ +pub struct InputState { + pub right: bool, + pub left: bool, + pub down: bool, + pub jump: bool, +} + +impl InputState { + pub fn new(right: bool, left: bool, down: bool, jump: bool) -> Self { + Self { + right, + left, + down, + jump, + } + } +} diff --git a/src/main.rs b/src/main.rs new file mode 100644 index 0000000..4ecbac3 --- /dev/null +++ b/src/main.rs @@ -0,0 +1,53 @@ +use controls::InputState; +use player::Player; + +mod controls; +mod player; +fn main() { + use raylib::prelude::*; + let (mut rl, thread) = raylib::init().size(640, 480).title("My peanits").build(); + let mut player: Player = Player::default(); + + while !rl.window_should_close() { + rl.set_target_fps(69); + // Player movement + if rl.is_key_down(KeyboardKey::KEY_RIGHT) { + player.handle_input(&InputState::new(true, false, false, false)); + println!("LEFT"); + } else if rl.is_key_down(KeyboardKey::KEY_LEFT) { + player.handle_input(&InputState::new(false, true, false, false)); + } else if rl.is_key_down(KeyboardKey::KEY_DOWN) { + player.handle_input(&InputState::new(false, false, true, false)); + } else if rl.is_key_down(KeyboardKey::KEY_SPACE) { + player.handle_jump(&InputState::new(false, false, false, true)); + } + let mut d = rl.begin_drawing(&thread); + d.clear_background(Color::WHITE); + d.draw_text("MY BIG PEANITS", 12, 12, 20, Color::BLACK); + d.draw_rectangle( + player.position.x as i32, + player.position.y as i32, + 100, + 200, + Color::RED, + ); + d.draw_circle( + (player.position.x + 50.0) as i32, + player.position.y as i32, + 50.0, + Color::RED, + ); + d.draw_circle( + (player.position.x + 100.0) as i32, + (player.position.y + 210.0) as i32, + 50.0, + Color::RED, + ); + d.draw_circle( + (player.position.x + 15.0) as i32, + (player.position.y + 210.0) as i32, + 50.0, + Color::RED, + ); + } +} diff --git a/src/player.rs b/src/player.rs new file mode 100644 index 0000000..99496e3 --- /dev/null +++ b/src/player.rs @@ -0,0 +1,54 @@ +use super::controls::InputState; +use raylib::prelude::*; + +#[derive(Default)] +pub struct Player { + pub position: Vector2, + width: f32, + height: f32, + speed: f32, + jump_velocity: f32, + grounded: bool, +} + +impl Player { + fn new( + position: Vector2, + width: f32, + height: f32, + speed: f32, + jump_velocity: f32, + grounded: bool, + ) -> Self { + Self { + position, + width, + height, + speed, + jump_velocity, + grounded, + } + } + + pub fn handle_input(&mut self, input: &InputState) { + // Da inpoot handol)) + if input.right { + self.position.x += 2.0; + } else if input.left { + self.position.x -= 2.0; + } else if input.down { + self.position.y += 4.0; + } + } + + pub fn handle_jump(&mut self, input: &InputState) { + if input.jump { + self.position.y -= 10.0; + } + } + + pub fn rect(&self) -> Rectangle { + todo!() + // Collision bawx n shi + } +}