Working config and confirmed we matched python

This commit is contained in:
Joey Hines 2024-09-06 15:25:47 -06:00
parent 42c7dc5ba7
commit 4b48b7b1cf
No known key found for this signature in database
GPG Key ID: 995E531F7A569DDB
7 changed files with 160 additions and 12 deletions

1
.gitignore vendored
View File

@ -1 +1,2 @@
/target
config.toml

104
Cargo.lock generated
View File

@ -77,8 +77,16 @@ version = "0.1.0"
dependencies = [
"log",
"macroquad",
"serde",
"toml",
]
[[package]]
name = "equivalent"
version = "1.0.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5"
[[package]]
name = "fdeflate"
version = "0.3.4"
@ -104,7 +112,7 @@ version = "0.7.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0793f5137567643cf65ea42043a538804ff0fbf288649e2141442b602d81f9bc"
dependencies = [
"hashbrown",
"hashbrown 0.13.2",
"ttf-parser",
]
@ -123,6 +131,12 @@ dependencies = [
"ahash",
]
[[package]]
name = "hashbrown"
version = "0.14.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1"
[[package]]
name = "image"
version = "0.24.9"
@ -136,6 +150,16 @@ dependencies = [
"png",
]
[[package]]
name = "indexmap"
version = "2.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "68b900aa2f7301e21c36462b170ee99994de34dff39a4a6a528e80e7376d07e5"
dependencies = [
"equivalent",
"hashbrown 0.14.5",
]
[[package]]
name = "libc"
version = "0.2.158"
@ -178,6 +202,12 @@ dependencies = [
"libc",
]
[[package]]
name = "memchr"
version = "2.7.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3"
[[package]]
name = "miniquad"
version = "0.4.6"
@ -276,6 +306,35 @@ dependencies = [
"proc-macro2",
]
[[package]]
name = "serde"
version = "1.0.210"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c8e3592472072e6e22e0a54d5904d9febf8508f65fb8552499a1abc7d1078c3a"
dependencies = [
"serde_derive",
]
[[package]]
name = "serde_derive"
version = "1.0.210"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "243902eda00fad750862fc144cea25caca5e20d615af0a81bee94ca738f1df1f"
dependencies = [
"proc-macro2",
"quote",
"syn",
]
[[package]]
name = "serde_spanned"
version = "0.6.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "eb5b1b31579f3811bf615c144393417496f152e12ac8b7663bf664f4a815306d"
dependencies = [
"serde",
]
[[package]]
name = "simd-adler32"
version = "0.3.7"
@ -302,6 +361,40 @@ dependencies = [
"unicode-ident",
]
[[package]]
name = "toml"
version = "0.8.19"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a1ed1f98e3fdc28d6d910e6737ae6ab1a93bf1985935a1193e68f93eeb68d24e"
dependencies = [
"serde",
"serde_spanned",
"toml_datetime",
"toml_edit",
]
[[package]]
name = "toml_datetime"
version = "0.6.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0dd7358ecb8fc2f8d014bf86f6f638ce72ba252a2c3a2572f2a795f1d23efb41"
dependencies = [
"serde",
]
[[package]]
name = "toml_edit"
version = "0.22.20"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "583c44c02ad26b0c3f3066fe629275e50627026c51ac2e595cca4c230ce1ce1d"
dependencies = [
"indexmap",
"serde",
"serde_spanned",
"toml_datetime",
"winnow",
]
[[package]]
name = "ttf-parser"
version = "0.15.2"
@ -342,6 +435,15 @@ version = "0.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
[[package]]
name = "winnow"
version = "0.6.18"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "68a9bda4691f099d435ad181000724da8e5899daa10713c2d432552b9ccd3a6f"
dependencies = [
"memchr",
]
[[package]]
name = "zerocopy"
version = "0.7.35"

View File

@ -6,3 +6,5 @@ edition = "2021"
[dependencies]
macroquad = "0.4.13"
log = "0.4.22"
toml = "0.8.19"
serde = { version = "1.0.210", features = ["derive"] }

View File

@ -2,7 +2,7 @@
<head>
<meta charset="utf-8">
<title>TITLE</title>
<title>The Device</title>
<style>
html,
body,

28
src/config.rs Normal file
View File

@ -0,0 +1,28 @@
use serde::{Deserialize, Serialize};
#[derive(Debug, Serialize, Deserialize)]
pub struct DiscConfig {
id: usize,
disc: Vec<char>
}
#[derive(Debug, Serialize, Deserialize)]
pub struct Config {
inner_disc: usize,
outer_disc: usize,
discs: Vec<DiscConfig>
}
impl Config {
pub fn get_disc_from_id(&self, id: usize) -> Vec<char> {
self.discs.iter().find(|d| d.id == id).unwrap().disc.clone()
}
pub fn get_inner_disc(&self) -> Vec<char> {
self.get_disc_from_id(self.inner_disc)
}
pub fn get_outer_disc(&self) -> Vec<char> {
self.get_disc_from_id(self.outer_disc)
}
}

View File

@ -29,6 +29,18 @@ pub struct DecoderState {
}
impl DecoderState {
pub fn new(inner_map: Vec<char>, outer_map: Vec<char>) -> Self {
Self {
inner_disc: Disc {
letter_map: inner_map,
},
outer_disc: Disc {
letter_map: outer_map,
},
..Default::default()
}
}
pub fn set_index(&mut self, index: usize) {
self.outer_disc_index = index;
}
@ -46,11 +58,11 @@ impl DecoderState {
}
pub fn get_current_target_angle(&self) -> f32 {
self.get_angle_per_letter() * (self.outer_disc_index as f32)
(2.0 * PI) - self.get_angle_per_letter() * (self.outer_disc_index as f32)
}
pub fn get_outer_letter_at_index(&self, index: usize) -> char {
let index = (index as i32 - self.outer_disc_index as i32)
let index = (index as i32 + self.outer_disc_index as i32)
.rem_euclid(self.outer_disc.letter_map.len() as i32) as usize;
self.outer_disc.letter_map[index]
}
@ -71,7 +83,7 @@ impl DecoderState {
.position(|n| *n == c)
.unwrap();
let index = (norm_index as i32 + self.outer_disc_index as i32)
let index = (norm_index as i32 - self.outer_disc_index as i32)
.rem_euclid(self.outer_disc.letter_map.len() as i32) as usize;
return index;

View File

@ -1,9 +1,11 @@
mod disc;
mod config;
use crate::disc::{DecoderState, Disc};
use macroquad::prelude::*;
use std::f32::consts::PI;
use std::string::ToString;
use crate::config::Config;
const SHADOW: Color = Color::new(0.25, 0.25, 0.25, 0.5);
@ -290,11 +292,7 @@ pub fn draw_device(ctx: &mut Context) {
let next_button_size = Vec2::new(size.x * 0.1, size.x * 0.1);
if is_mouse_in_area(next_button_pos - next_button_size * 0.5, next_button_size) {
if ctx.mode == Mode::Encode {
ctx.decoder_state.change_index(1);
} else {
ctx.decoder_state.change_index(-1);
}
ctx.decoder_state.change_index(1);
}
draw_circle(
@ -541,7 +539,12 @@ fn input_panel(ctx: &mut Context, base: Vec2, size: Vec2) {
async fn main() {
game_init();
let decoder = DecoderState::default();
let config = load_file("config.toml").await.unwrap();
let config_str = String::from_utf8(config).unwrap();
let config: Config = toml::from_str(config_str.as_str()).unwrap();
let decoder = DecoderState::new(config.get_inner_disc(), config.get_outer_disc());
let input_disc = DecoderState::default();
let mut context = Context {
@ -552,7 +555,7 @@ async fn main() {
context
.input_state
.set_index(context.input_state.outer_disc.letter_map.len() * 3 / 4);
.set_index(context.input_state.outer_disc.letter_map.len() / 4);
loop {
clear_background(WHITE);