traaains/editor/train/
mod.rs1use bevy::{
4 app::{Plugin, Update},
5 ecs::{
6 query::With,
7 schedule::IntoScheduleConfigs,
8 system::{Res, ResMut, Single},
9 },
10 input::{ButtonInput, keyboard::KeyCode},
11 state::{
12 app::AppExtStates,
13 condition::in_state,
14 state::{NextState, OnEnter, SubStates},
15 },
16 ui::widget::Text,
17};
18
19use crate::editor::{EditorState, StateText, train::placing::PlacingTrainPlugin};
20
21pub mod placing;
22
23#[derive(Clone, Debug, Default, PartialEq, Eq, Hash, SubStates)]
24#[source(EditorState = EditorState::Train)]
25pub enum TrainEditorState {
26 #[default]
27 PlacingTrain,
28}
29
30pub fn input_handler(
31 input: Res<ButtonInput<KeyCode>>,
32 mut next_editor_state: ResMut<NextState<EditorState>>,
33) {
34 if input.just_pressed(KeyCode::Escape) {
35 next_editor_state.set(EditorState::Viewing);
36 }
37}
38
39fn on_enter_train(mut text: Single<&mut Text, With<StateText>>) {
40 text.0 = String::from("Placing trains\nEsc to exit");
41}
42
43pub struct TrainEditorPlugin;
45
46impl Plugin for TrainEditorPlugin {
47 fn build(&self, app: &mut bevy::app::App) {
48 app.add_plugins(PlacingTrainPlugin)
49 .add_sub_state::<TrainEditorState>()
50 .add_systems(OnEnter(EditorState::Train), on_enter_train)
51 .add_systems(Update, input_handler.run_if(in_state(EditorState::Train)));
52 }
53}