Skip to content

Commit

Permalink
refactor: removing duplicated logic and styling
Browse files Browse the repository at this point in the history
  • Loading branch information
moliva committed Nov 24, 2023
1 parent a7b5f4a commit c0ba10e
Show file tree
Hide file tree
Showing 4 changed files with 42 additions and 91 deletions.
12 changes: 2 additions & 10 deletions src/components/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -33,15 +33,7 @@ pub struct SelectedOption;

// One of the two settings that can be set through the menu. It will be a resource in the app
#[derive(Resource, Debug, Component, PartialEq, Eq, Clone, Copy)]
pub enum StampResource {
Point,
Glider,
}
pub struct StampResource(pub Stamp);

#[derive(Resource, Debug, Component, PartialEq, Eq, Clone, Copy)]
pub enum SimmetryResource {
None,
X,
Y,
XY,
}
pub struct SimmetryResource(pub Simmetry);
4 changes: 2 additions & 2 deletions src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ const FULL_CHAR: &str = "▓";

pub type Position = (usize, usize);

#[derive(Debug, Clone, Copy)]
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum Stamp {
Point,
// still lifes
Expand Down Expand Up @@ -73,7 +73,7 @@ impl Stamp {
}
}

#[derive(Debug, Clone, Copy)]
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum Simmetry {
None,
X,
Expand Down
18 changes: 5 additions & 13 deletions src/main.rs
Original file line number Diff line number Diff line change
@@ -1,12 +1,9 @@
use bevy::{diagnostic::LogDiagnosticsPlugin, input::common_conditions::*, prelude::*};

use components::{
GameTimer, SelectedStamp, SimmetryResource, StampResource, COL_SIZE, ROW_SIZE, TICK_SECONDS,
};
use components::{GameTimer, SimmetryResource, StampResource, COL_SIZE, ROW_SIZE, TICK_SECONDS};
use conway_rs::{Grid, Simmetry, Stamp};
use systems::{
button_system, handle_click, menu_action, pause_system, setting_button, spawn_camera,
spawn_grid, tickity,
button_system, handle_click, pause_system, setting_button, spawn_camera, spawn_grid, tickity,
};

mod components;
Expand Down Expand Up @@ -35,12 +32,8 @@ fn main() {

App::new()
.insert_resource(grid)
.insert_resource(SelectedStamp {
stamp: Stamp::Point,
simmetry: Simmetry::None,
})
.insert_resource(StampResource::Point)
.insert_resource(SimmetryResource::None)
.insert_resource(StampResource(Stamp::Point))
.insert_resource(SimmetryResource(Simmetry::None))
.insert_resource(GameTimer(Timer::from_seconds(
TICK_SECONDS,
TimerMode::Repeating,
Expand All @@ -52,8 +45,7 @@ fn main() {
.add_systems(
Update,
(
menu_action,
handle_click.run_if(input_just_released(MouseButton::Left)),
handle_click.run_if(input_pressed(MouseButton::Left)),
pause_system,
setting_button::<StampResource>,
setting_button::<SimmetryResource>,
Expand Down
99 changes: 33 additions & 66 deletions src/systems/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,8 @@ use bevy::{prelude::*, window::PrimaryWindow};
use conway_rs::{Grid, Simmetry, Stamp};

use crate::components::{
GameTimer, Item, ItemBundle, SelectedOption, SelectedStamp, SimmetryResource, StampResource,
COL_SIZE, ROW_SIZE,
GameTimer, Item, ItemBundle, SelectedOption, SimmetryResource, StampResource, COL_SIZE,
ROW_SIZE,
};

const ALIVE_COLOR: Color = Color::ANTIQUE_WHITE;
Expand All @@ -19,16 +19,6 @@ const PRESSED_BUTTON: Color = Color::rgb(0.35, 0.75, 0.35);

const TEXT_COLOR: Color = Color::rgb(0.9, 0.9, 0.9);

#[derive(Component)]
pub enum MenuButtonAction {
Point,
Glider,
None,
X,
Y,
XY,
}

pub fn spawn_camera(mut commands: Commands) {
commands.spawn(Camera2dBundle::default());
}
Expand Down Expand Up @@ -94,31 +84,30 @@ pub fn spawn_grid(
})
.with_children(|builder| {
let button_style = Style {
width: Val::Px(250.0),
height: Val::Px(65.0),
margin: UiRect::all(Val::Px(20.0)),
width: Val::Px(150.0),
height: Val::Px(45.0),
margin: UiRect::all(Val::Px(10.0)),
justify_content: JustifyContent::Center,
align_items: AlignItems::Center,
..default()
};

let button_text_style = TextStyle {
font_size: 40.0,
font_size: 25.0,
color: TEXT_COLOR,
..default()
};
for (action, text, stamp_resource) in [
(MenuButtonAction::Point, "Point", StampResource::Point),
(MenuButtonAction::Glider, "Glider", StampResource::Glider),

builder.spawn(TextBundle::from_section("Stamp", button_text_style.clone()));
for (text, stamp_resource) in [
("Point", StampResource(Stamp::Point)),
("Glider", StampResource(Stamp::Glider)),
] {
let mut entity = builder.spawn((
ButtonBundle {
style: button_style.clone(),
background_color: NORMAL_BUTTON.into(),
..default()
},
action,
));
let mut entity = builder.spawn(ButtonBundle {
style: button_style.clone(),
background_color: NORMAL_BUTTON.into(),
..default()
});
entity.insert(stamp_resource);

if stamp_resource == *selected_stamp_resource {
Expand All @@ -133,20 +122,21 @@ pub fn spawn_grid(
});
}

for (action, text, simmetry_resource) in [
(MenuButtonAction::None, "None", SimmetryResource::None),
(MenuButtonAction::X, "X", SimmetryResource::X),
(MenuButtonAction::Y, "Y", SimmetryResource::Y),
(MenuButtonAction::XY, "XY", SimmetryResource::XY),
builder.spawn(TextBundle::from_section(
"Simmetry",
button_text_style.clone(),
));
for (text, simmetry_resource) in [
("None", SimmetryResource(Simmetry::None)),
("X", SimmetryResource(Simmetry::X)),
("Y", SimmetryResource(Simmetry::Y)),
("XY", SimmetryResource(Simmetry::XY)),
] {
let mut entity = builder.spawn((
ButtonBundle {
style: button_style.clone(),
background_color: NORMAL_BUTTON.into(),
..default()
},
action,
));
let mut entity = builder.spawn(ButtonBundle {
style: button_style.clone(),
background_color: NORMAL_BUTTON.into(),
..default()
});
entity.insert(simmetry_resource);

if simmetry_resource == *selected_simmetry_resource {
Expand Down Expand Up @@ -185,7 +175,8 @@ fn item_rect(builder: &mut ChildBuilder, color: Color) {
}

pub fn handle_click(
selected_stamp: Res<SelectedStamp>,
selected_stamp: Res<StampResource>,
selected_simmetry: Res<SimmetryResource>,
mut grid: ResMut<Grid<COL_SIZE, ROW_SIZE>>,
q_windows: Query<&Window, With<PrimaryWindow>>,
) {
Expand All @@ -198,7 +189,7 @@ pub fn handle_click(
return;
}

grid.stamp(selected_stamp.stamp, (y, x), selected_stamp.simmetry);
grid.stamp(selected_stamp.0, (y, x), selected_simmetry.0);
} else {
println!("Cursor is not in the game window.");
}
Expand All @@ -219,30 +210,6 @@ fn to_grid(n: f32) -> usize {
(n / CELL_SIZE).floor() as usize
}

pub fn menu_action(
interaction_query: Query<
(&Interaction, &MenuButtonAction),
(Changed<Interaction>, With<Button>),
>,
// mut app_exit_events: EventWriter<AppExit>,
// mut menu_state: ResMut<NextState<MenuState>>,
// mut game_state: ResMut<NextState<GameState>>,
mut selected_stamp: ResMut<SelectedStamp>,
) {
for (interaction, menu_button_action) in &interaction_query {
if *interaction == Interaction::Pressed {
match menu_button_action {
MenuButtonAction::Point => selected_stamp.stamp = Stamp::Point,
MenuButtonAction::Glider => selected_stamp.stamp = Stamp::Glider,
MenuButtonAction::None => selected_stamp.simmetry = Simmetry::None,
MenuButtonAction::X => selected_stamp.simmetry = Simmetry::X,
MenuButtonAction::Y => selected_stamp.simmetry = Simmetry::Y,
MenuButtonAction::XY => selected_stamp.simmetry = Simmetry::XY,
}
}
}
}

pub fn button_system(
mut interaction_query: Query<
(&Interaction, &mut BackgroundColor, Option<&SelectedOption>),
Expand Down

0 comments on commit c0ba10e

Please sign in to comment.