aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Cargo.lock46
-rw-r--r--Cargo.toml3
-rw-r--r--debug.txt516
-rw-r--r--src/generation.rs10
-rw-r--r--src/ui.rs32
5 files changed, 580 insertions, 27 deletions
diff --git a/Cargo.lock b/Cargo.lock
index 4206a98..aada68b 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -86,10 +86,11 @@ dependencies = [
[[package]]
name = "gof-rs"
-version = "0.2.1"
+version = "0.2.2"
dependencies = [
"colored",
"crossterm",
+ "include_dir",
"rand",
"tui",
]
@@ -104,6 +105,25 @@ dependencies = [
]
[[package]]
+name = "include_dir"
+version = "0.7.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "18762faeff7122e89e0857b02f7ce6fcc0d101d5e9ad2ad7846cc01d61b7f19e"
+dependencies = [
+ "include_dir_macros",
+]
+
+[[package]]
+name = "include_dir_macros"
+version = "0.7.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b139284b5cf57ecfa712bcc66950bb635b31aff41c188e8a4cfc758eca374a3f"
+dependencies = [
+ "proc-macro2",
+ "quote",
+]
+
+[[package]]
name = "lazy_static"
version = "1.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -176,6 +196,24 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "eb9f9e6e233e5c4a35559a617bf40a4ec447db2e84c20b55a6f83167b7e57872"
[[package]]
+name = "proc-macro2"
+version = "1.0.47"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5ea3d908b0e36316caf9e9e2c4625cdde190a7e6f440d794667ed17a1855e725"
+dependencies = [
+ "unicode-ident",
+]
+
+[[package]]
+name = "quote"
+version = "1.0.21"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bbe448f377a7d6961e30f5955f9b8d106c3f5e449d493ee1b125c1d43c2b5179"
+dependencies = [
+ "proc-macro2",
+]
+
+[[package]]
name = "rand"
version = "0.8.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -270,6 +308,12 @@ dependencies = [
]
[[package]]
+name = "unicode-ident"
+version = "1.0.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6ceab39d59e4c9499d4e5a8ee0e2735b891bb7308ac83dfb4e80cad195c9f6f3"
+
+[[package]]
name = "unicode-segmentation"
version = "1.9.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
diff --git a/Cargo.toml b/Cargo.toml
index 21dd101..704ef52 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -1,6 +1,6 @@
[package]
name = "gof-rs"
-version = "0.2.1"
+version = "0.2.2"
license = "MIT"
authors = ["Omar Magdy <omar.professional8777@gmai.com>"]
description = "Game of life in your terminal with over 500 unique patterns to choose from."
@@ -14,6 +14,7 @@ include = ["src/", "presets/patterns/*.txt"]
[dependencies]
colored = "2.0.0"
crossterm = "0.25.0"
+include_dir = "0.7.3"
rand = "0.8.5"
tui = "0.19.0"
diff --git a/debug.txt b/debug.txt
new file mode 100644
index 0000000..c206f4f
--- /dev/null
+++ b/debug.txt
@@ -0,0 +1,516 @@
+ Compiling gof-rs v0.2.1 (/home/pengu/test/rust-dev/gof-rs)
+ Finished dev [unoptimized + debuginfo] target(s) in 0.80s
+ Running `target/debug/gof-rs`
+"pattern1.txt"
+"pattern10.txt"
+"pattern100.txt"
+"pattern101.txt"
+"pattern102.txt"
+"pattern103.txt"
+"pattern104.txt"
+"pattern105.txt"
+"pattern106.txt"
+"pattern107.txt"
+"pattern108.txt"
+"pattern109.txt"
+"pattern11.txt"
+"pattern110.txt"
+"pattern111.txt"
+"pattern112.txt"
+"pattern113.txt"
+"pattern114.txt"
+"pattern115.txt"
+"pattern116.txt"
+"pattern117.txt"
+"pattern118.txt"
+"pattern119.txt"
+"pattern12.txt"
+"pattern120.txt"
+"pattern121.txt"
+"pattern122.txt"
+"pattern123.txt"
+"pattern124.txt"
+"pattern125.txt"
+"pattern126.txt"
+"pattern127.txt"
+"pattern128.txt"
+"pattern129.txt"
+"pattern13.txt"
+"pattern130.txt"
+"pattern131.txt"
+"pattern132.txt"
+"pattern133.txt"
+"pattern134.txt"
+"pattern135.txt"
+"pattern136.txt"
+"pattern137.txt"
+"pattern138.txt"
+"pattern139.txt"
+"pattern14.txt"
+"pattern140.txt"
+"pattern141.txt"
+"pattern142.txt"
+"pattern143.txt"
+"pattern144.txt"
+"pattern145.txt"
+"pattern146.txt"
+"pattern147.txt"
+"pattern148.txt"
+"pattern149.txt"
+"pattern15.txt"
+"pattern150.txt"
+"pattern151.txt"
+"pattern152.txt"
+"pattern153.txt"
+"pattern154.txt"
+"pattern155.txt"
+"pattern156.txt"
+"pattern157.txt"
+"pattern158.txt"
+"pattern159.txt"
+"pattern16.txt"
+"pattern160.txt"
+"pattern161.txt"
+"pattern162.txt"
+"pattern163.txt"
+"pattern164.txt"
+"pattern165.txt"
+"pattern166.txt"
+"pattern167.txt"
+"pattern168.txt"
+"pattern169.txt"
+"pattern17.txt"
+"pattern170.txt"
+"pattern171.txt"
+"pattern172.txt"
+"pattern173.txt"
+"pattern174.txt"
+"pattern175.txt"
+"pattern176.txt"
+"pattern177.txt"
+"pattern178.txt"
+"pattern179.txt"
+"pattern18.txt"
+"pattern180.txt"
+"pattern181.txt"
+"pattern182.txt"
+"pattern183.txt"
+"pattern184.txt"
+"pattern185.txt"
+"pattern186.txt"
+"pattern187.txt"
+"pattern188.txt"
+"pattern189.txt"
+"pattern19.txt"
+"pattern190.txt"
+"pattern191.txt"
+"pattern192.txt"
+"pattern193.txt"
+"pattern194.txt"
+"pattern195.txt"
+"pattern196.txt"
+"pattern197.txt"
+"pattern198.txt"
+"pattern199.txt"
+"pattern2.txt"
+"pattern20.txt"
+"pattern200.txt"
+"pattern201.txt"
+"pattern202.txt"
+"pattern203.txt"
+"pattern204.txt"
+"pattern205.txt"
+"pattern206.txt"
+"pattern207.txt"
+"pattern208.txt"
+"pattern209.txt"
+"pattern21.txt"
+"pattern210.txt"
+"pattern211.txt"
+"pattern212.txt"
+"pattern213.txt"
+"pattern214.txt"
+"pattern215.txt"
+"pattern216.txt"
+"pattern217.txt"
+"pattern218.txt"
+"pattern219.txt"
+"pattern22.txt"
+"pattern220.txt"
+"pattern221.txt"
+"pattern222.txt"
+"pattern223.txt"
+"pattern224.txt"
+"pattern225.txt"
+"pattern226.txt"
+"pattern227.txt"
+"pattern228.txt"
+"pattern229.txt"
+"pattern23.txt"
+"pattern230.txt"
+"pattern231.txt"
+"pattern232.txt"
+"pattern233.txt"
+"pattern234.txt"
+"pattern235.txt"
+"pattern236.txt"
+"pattern237.txt"
+"pattern238.txt"
+"pattern239.txt"
+"pattern24.txt"
+"pattern240.txt"
+"pattern241.txt"
+"pattern242.txt"
+"pattern243.txt"
+"pattern244.txt"
+"pattern245.txt"
+"pattern246.txt"
+"pattern247.txt"
+"pattern248.txt"
+"pattern249.txt"
+"pattern25.txt"
+"pattern250.txt"
+"pattern251.txt"
+"pattern252.txt"
+"pattern253.txt"
+"pattern254.txt"
+"pattern255.txt"
+"pattern256.txt"
+"pattern257.txt"
+"pattern258.txt"
+"pattern259.txt"
+"pattern26.txt"
+"pattern260.txt"
+"pattern261.txt"
+"pattern262.txt"
+"pattern263.txt"
+"pattern264.txt"
+"pattern265.txt"
+"pattern266.txt"
+"pattern267.txt"
+"pattern268.txt"
+"pattern269.txt"
+"pattern27.txt"
+"pattern270.txt"
+"pattern271.txt"
+"pattern272.txt"
+"pattern273.txt"
+"pattern274.txt"
+"pattern275.txt"
+"pattern276.txt"
+"pattern277.txt"
+"pattern278.txt"
+"pattern279.txt"
+"pattern28.txt"
+"pattern280.txt"
+"pattern281.txt"
+"pattern282.txt"
+"pattern283.txt"
+"pattern284.txt"
+"pattern285.txt"
+"pattern286.txt"
+"pattern287.txt"
+"pattern288.txt"
+"pattern289.txt"
+"pattern29.txt"
+"pattern290.txt"
+"pattern291.txt"
+"pattern292.txt"
+"pattern293.txt"
+"pattern294.txt"
+"pattern295.txt"
+"pattern296.txt"
+"pattern297.txt"
+"pattern298.txt"
+"pattern299.txt"
+"pattern3.txt"
+"pattern30.txt"
+"pattern300.txt"
+"pattern301.txt"
+"pattern302.txt"
+"pattern303.txt"
+"pattern304.txt"
+"pattern305.txt"
+"pattern306.txt"
+"pattern307.txt"
+"pattern308.txt"
+"pattern309.txt"
+"pattern31.txt"
+"pattern310.txt"
+"pattern311.txt"
+"pattern312.txt"
+"pattern313.txt"
+"pattern314.txt"
+"pattern315.txt"
+"pattern316.txt"
+"pattern317.txt"
+"pattern318.txt"
+"pattern319.txt"
+"pattern32.txt"
+"pattern320.txt"
+"pattern321.txt"
+"pattern322.txt"
+"pattern323.txt"
+"pattern324.txt"
+"pattern325.txt"
+"pattern326.txt"
+"pattern327.txt"
+"pattern328.txt"
+"pattern329.txt"
+"pattern33.txt"
+"pattern330.txt"
+"pattern331.txt"
+"pattern332.txt"
+"pattern333.txt"
+"pattern334.txt"
+"pattern335.txt"
+"pattern336.txt"
+"pattern337.txt"
+"pattern338.txt"
+"pattern339.txt"
+"pattern34.txt"
+"pattern340.txt"
+"pattern341.txt"
+"pattern342.txt"
+"pattern343.txt"
+"pattern344.txt"
+"pattern345.txt"
+"pattern346.txt"
+"pattern347.txt"
+"pattern348.txt"
+"pattern349.txt"
+"pattern35.txt"
+"pattern350.txt"
+"pattern351.txt"
+"pattern352.txt"
+"pattern353.txt"
+"pattern354.txt"
+"pattern355.txt"
+"pattern356.txt"
+"pattern357.txt"
+"pattern358.txt"
+"pattern359.txt"
+"pattern36.txt"
+"pattern360.txt"
+"pattern361.txt"
+"pattern362.txt"
+"pattern363.txt"
+"pattern364.txt"
+"pattern365.txt"
+"pattern366.txt"
+"pattern367.txt"
+"pattern368.txt"
+"pattern369.txt"
+"pattern37.txt"
+"pattern370.txt"
+"pattern371.txt"
+"pattern372.txt"
+"pattern373.txt"
+"pattern374.txt"
+"pattern375.txt"
+"pattern376.txt"
+"pattern377.txt"
+"pattern378.txt"
+"pattern379.txt"
+"pattern38.txt"
+"pattern380.txt"
+"pattern381.txt"
+"pattern382.txt"
+"pattern383.txt"
+"pattern384.txt"
+"pattern385.txt"
+"pattern386.txt"
+"pattern387.txt"
+"pattern388.txt"
+"pattern389.txt"
+"pattern39.txt"
+"pattern390.txt"
+"pattern391.txt"
+"pattern392.txt"
+"pattern393.txt"
+"pattern394.txt"
+"pattern395.txt"
+"pattern396.txt"
+"pattern397.txt"
+"pattern398.txt"
+"pattern399.txt"
+"pattern4.txt"
+"pattern40.txt"
+"pattern400.txt"
+"pattern401.txt"
+"pattern402.txt"
+"pattern403.txt"
+"pattern404.txt"
+"pattern405.txt"
+"pattern406.txt"
+"pattern407.txt"
+"pattern408.txt"
+"pattern409.txt"
+"pattern41.txt"
+"pattern410.txt"
+"pattern411.txt"
+"pattern412.txt"
+"pattern413.txt"
+"pattern414.txt"
+"pattern415.txt"
+"pattern416.txt"
+"pattern417.txt"
+"pattern418.txt"
+"pattern419.txt"
+"pattern42.txt"
+"pattern420.txt"
+"pattern421.txt"
+"pattern422.txt"
+"pattern423.txt"
+"pattern424.txt"
+"pattern425.txt"
+"pattern426.txt"
+"pattern427.txt"
+"pattern428.txt"
+"pattern429.txt"
+"pattern43.txt"
+"pattern430.txt"
+"pattern431.txt"
+"pattern432.txt"
+"pattern433.txt"
+"pattern434.txt"
+"pattern435.txt"
+"pattern436.txt"
+"pattern437.txt"
+"pattern438.txt"
+"pattern439.txt"
+"pattern44.txt"
+"pattern440.txt"
+"pattern441.txt"
+"pattern442.txt"
+"pattern443.txt"
+"pattern444.txt"
+"pattern445.txt"
+"pattern446.txt"
+"pattern447.txt"
+"pattern448.txt"
+"pattern449.txt"
+"pattern45.txt"
+"pattern450.txt"
+"pattern451.txt"
+"pattern452.txt"
+"pattern453.txt"
+"pattern454.txt"
+"pattern455.txt"
+"pattern456.txt"
+"pattern457.txt"
+"pattern458.txt"
+"pattern459.txt"
+"pattern46.txt"
+"pattern460.txt"
+"pattern461.txt"
+"pattern462.txt"
+"pattern463.txt"
+"pattern464.txt"
+"pattern465.txt"
+"pattern466.txt"
+"pattern467.txt"
+"pattern468.txt"
+"pattern469.txt"
+"pattern47.txt"
+"pattern470.txt"
+"pattern471.txt"
+"pattern472.txt"
+"pattern473.txt"
+"pattern474.txt"
+"pattern475.txt"
+"pattern476.txt"
+"pattern477.txt"
+"pattern478.txt"
+"pattern479.txt"
+"pattern48.txt"
+"pattern480.txt"
+"pattern481.txt"
+"pattern482.txt"
+"pattern483.txt"
+"pattern484.txt"
+"pattern485.txt"
+"pattern486.txt"
+"pattern487.txt"
+"pattern488.txt"
+"pattern489.txt"
+"pattern49.txt"
+"pattern490.txt"
+"pattern491.txt"
+"pattern492.txt"
+"pattern493.txt"
+"pattern494.txt"
+"pattern495.txt"
+"pattern496.txt"
+"pattern497.txt"
+"pattern498.txt"
+"pattern499.txt"
+"pattern5.txt"
+"pattern50.txt"
+"pattern500.txt"
+"pattern501.txt"
+"pattern502.txt"
+"pattern503.txt"
+"pattern504.txt"
+"pattern505.txt"
+"pattern506.txt"
+"pattern507.txt"
+"pattern508.txt"
+"pattern509.txt"
+"pattern51.txt"
+"pattern510.txt"
+"pattern511.txt"
+"pattern512.txt"
+"pattern513.txt"
+"pattern52.txt"
+"pattern53.txt"
+"pattern54.txt"
+"pattern55.txt"
+"pattern56.txt"
+"pattern57.txt"
+"pattern58.txt"
+"pattern59.txt"
+"pattern6.txt"
+"pattern60.txt"
+"pattern61.txt"
+"pattern62.txt"
+"pattern63.txt"
+"pattern64.txt"
+"pattern65.txt"
+"pattern66.txt"
+"pattern67.txt"
+"pattern68.txt"
+"pattern69.txt"
+"pattern7.txt"
+"pattern70.txt"
+"pattern71.txt"
+"pattern72.txt"
+"pattern73.txt"
+"pattern74.txt"
+"pattern75.txt"
+"pattern76.txt"
+"pattern77.txt"
+"pattern78.txt"
+"pattern79.txt"
+"pattern8.txt"
+"pattern80.txt"
+"pattern81.txt"
+"pattern82.txt"
+"pattern83.txt"
+"pattern84.txt"
+"pattern85.txt"
+"pattern86.txt"
+"pattern87.txt"
+"pattern88.txt"
+"pattern89.txt"
+"pattern9.txt"
+"pattern90.txt"
+"pattern91.txt"
+"pattern92.txt"
+"pattern93.txt"
+"pattern94.txt"
+"pattern95.txt"
+"pattern96.txt"
+"pattern97.txt"
+"pattern98.txt"
+"pattern99.txt"
diff --git a/src/generation.rs b/src/generation.rs
index 63aa3e3..f58bba9 100644
--- a/src/generation.rs
+++ b/src/generation.rs
@@ -159,13 +159,13 @@ pub fn next_gen(app: &mut App) -> Gen {
nxt_gen
}
-pub fn gen_from_file(path: &PathBuf) -> Gen {
+pub fn gen_from_file(s : &String) -> Gen {
let mut gen = Gen::new();
- let file = File::open(path).expect("File not found");
- let reader = BufReader::new(file);
+ // let file = File::open(path).expect("File not found");
+ // let reader = BufReader::new(file);
- for line in reader.lines() {
- let line = line.unwrap();
+ for line in s.lines() {
+ let line = line;
let mut row: Vec<Cell> = vec![];
for ch in line.chars() {
if ch == '.' {
diff --git a/src/ui.rs b/src/ui.rs
index 73a345f..692e3e3 100644
--- a/src/ui.rs
+++ b/src/ui.rs
@@ -18,9 +18,12 @@ use tui::{
widgets::{Block, Borders, List, ListItem, ListState, Paragraph},
Frame, Terminal,
};
+use include_dir::{include_dir, Dir};
use crate::generation::*;
+static PRESETS_DIR : Dir<'_> = include_dir!("$CARGO_MANIFEST_DIR/presets/patterns/");
+
pub struct StatefulList<T> {
state: ListState,
items: Vec<T>,
@@ -74,7 +77,7 @@ impl<T> StatefulList<T> {
/// Check the event handling at the bottom to see how to change the state on incoming events.
/// Check the drawing logic for items on how to specify the highlighting style for selected items.
pub struct App {
- pub items: StatefulList<(String, PathBuf)>,
+ pub items: StatefulList<(String, String)>,
pub flag_cur: bool,
pub layout: Layout,
pub cur_gen: Gen,
@@ -82,29 +85,18 @@ pub struct App {
impl App {
pub fn new() -> App {
- fn read_presets() -> io::Result<Vec<(String, PathBuf)>> {
+ fn read_presets() -> Vec<(String, String)> {
let mut result = Vec::new();
- for path in std::fs::read_dir("./presets/patterns")? {
- let path = path?.path();
- if !path.is_file() {
- continue;
- }
- if let Some(file_name) = path.file_name() {
- let file_name = file_name.to_string_lossy();
- if file_name.starts_with("pattern") && file_name.ends_with(".txt") {
- result.push((file_name.trim_end_matches(".txt").to_owned(), path));
- }
- }
+ for i in 1..=513 {
+ let file_name = format!("pattern{}.txt", i);
+ let file = PRESETS_DIR.get_file(file_name.to_owned()).unwrap();
+ let body = file.contents_utf8().unwrap().to_owned();
+ result.push((file_name, body));
}
- result.sort_by_key(|(name, _)| {
- name.trim_start_matches("pattern")
- .parse::<u32>()
- .unwrap_or(0)
- });
- Ok(result)
+ result
}
App {
- items: StatefulList::with_items(read_presets().unwrap_or_else(|_| Vec::new())),
+ items: StatefulList::with_items(read_presets()),
flag_cur: false,
layout: Layout::default()
.direction(Direction::Horizontal)