-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy patheditor.rs
111 lines (95 loc) · 2.52 KB
/
editor.rs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
mod editor_button;
mod editor_component;
mod editor_system;
mod number_input;
mod object_selector;
mod object_selector_system;
use bevy::prelude::*;
pub use editor_component::*;
pub use editor_system::*;
pub use object_selector::*;
use object_selector_system::*;
use crate::game_object::Position;
pub struct EditorPlugin;
impl Plugin for EditorPlugin {
fn build(&self, app: &mut App) {
app.add_systems(
Update,
(
on_dimensions_changed,
on_editor_button_interaction,
on_editor_number_input_interaction,
on_object_selector_input,
on_selected_object_change,
),
)
.init_resource::<EditorState>()
.add_event::<ActivateSelection>()
.add_event::<ChangeHeight>()
.add_event::<ChangeIdentifier>()
.add_event::<ChangeLevel>()
.add_event::<ChangeWidth>()
.add_event::<DeselectObject>()
.add_event::<MoveAllObjects>()
.add_event::<SelectObject>()
.add_event::<ToggleEditor>()
.add_event::<ToggleSelection>()
.add_observer(change_height)
.add_observer(change_identifier)
.add_observer(change_level)
.add_observer(change_width)
.add_observer(move_all_objects)
.add_observer(on_activate_selection)
.add_observer(on_deselect_object)
.add_observer(on_select_object)
.add_observer(on_toggle_editor)
.add_observer(on_toggle_selection);
}
}
#[derive(Clone, Default, Resource)]
pub struct EditorState {
pub is_open: bool,
pub selected_object: Option<Position>,
pub selected_object_type: Option<EditorObjectType>,
pub selection: SelectionState,
}
#[derive(Clone, Copy, Default, Eq, PartialEq)]
pub enum SelectionState {
#[default]
Disabled,
WaitingForClick,
Selecting {
start: Position,
current: Position,
},
Active {
top_left: Position,
bottom_right: Position,
},
}
#[derive(Event)]
pub struct ChangeHeight(i16);
#[derive(Event)]
pub struct ChangeIdentifier(i16);
#[derive(Event)]
pub struct ChangeLevel(i16);
#[derive(Event)]
pub struct ChangeWidth(i16);
#[derive(Event)]
pub struct DeselectObject;
#[derive(Event)]
pub struct MoveAllObjects {
dx: i16,
dy: i16,
}
#[derive(Event)]
pub struct SelectObject(Position);
#[derive(Event)]
pub struct ToggleEditor;
#[derive(Event)]
pub struct ToggleSelection;
#[derive(Event)]
pub struct ActivateSelection {
start: Position,
current: Position,
}