Working config and confirmed we matched python
This commit is contained in:
parent
42c7dc5ba7
commit
4b48b7b1cf
1
.gitignore
vendored
1
.gitignore
vendored
@ -1 +1,2 @@
|
||||
/target
|
||||
config.toml
|
104
Cargo.lock
generated
104
Cargo.lock
generated
@ -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"
|
||||
|
@ -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"] }
|
||||
|
@ -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
28
src/config.rs
Normal 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)
|
||||
}
|
||||
}
|
18
src/disc.rs
18
src/disc.rs
@ -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;
|
||||
|
17
src/main.rs
17
src/main.rs
@ -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);
|
||||
|
Loading…
x
Reference in New Issue
Block a user