Skip to content

Commit

Permalink
Implement simplistic PowerHub construction
Browse files Browse the repository at this point in the history
Relates to #23.
  • Loading branch information
Indy2222 committed Jun 27, 2022
1 parent 379bd23 commit 51d1adb
Show file tree
Hide file tree
Showing 3 changed files with 83 additions and 9 deletions.
1 change: 1 addition & 0 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions crates/controller/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ de_core = { path = "../core", version = "0.1.0-dev" }
de_index = { path = "../index", version = "0.1.0-dev" }
de_terrain = { path = "../terrain", version = "0.1.0-dev" }
de_pathing = { path = "../pathing", version = "0.1.0-dev" }
de_objects = { path = "../objects", version = "0.1.0-dev" }

# Other
bevy = "0.7.0"
Expand Down
90 changes: 81 additions & 9 deletions crates/controller/src/command.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,12 @@ use bevy::{
input::{mouse::MouseButtonInput, ElementState},
prelude::*,
};
use de_core::{objects::MovableSolid, projection::ToFlat};
use de_core::{
gconfig::GameConfig,
objects::{ActiveObjectType, MovableSolid, ObjectType},
projection::ToFlat,
};
use de_objects::{Draft, DraftBundle, SpawnBundle};
use de_pathing::UpdateEntityPath;
use iyes_loopless::prelude::*;

Expand All @@ -26,10 +31,22 @@ impl Plugin for CommandPlugin {
.after(Labels::PreInputUpdate),
)
.with_system(
// TODO do this after move_drafts?
left_click_handler
.run_if(on_pressed(MouseButton::Left))
.label(Labels::InputUpdate)
.after(Labels::PreInputUpdate),
)
.with_system(
// TODO rename to movement_handler
spawn_draft
.label(Labels::InputUpdate)
.after(Labels::PreInputUpdate),
)
.with_system(
move_drafts
.label(Labels::InputUpdate)
.after(Labels::PreInputUpdate),
),
);
}
Expand Down Expand Up @@ -63,18 +80,73 @@ fn right_click_handler(
}

fn left_click_handler(
mut events: EventWriter<SelectEvent>,
mut commands: Commands,
game_config: Res<GameConfig>,
mut select_events: EventWriter<SelectEvent>,
keys: Res<Input<KeyCode>>,
pointer: Res<Pointer>,
drafts: Query<(Entity, &Transform, &ObjectType), With<Draft>>,
) {
let selection_mode = if keys.pressed(KeyCode::LControl) {
SelectionMode::Add
if drafts.is_empty() {
let selection_mode = if keys.pressed(KeyCode::LControl) {
SelectionMode::Add
} else {
SelectionMode::Replace
};
let event = match pointer.entity() {
Some(entity) => SelectEvent::single(entity, selection_mode),
None => SelectEvent::none(selection_mode),
};
select_events.send(event);
} else {
SelectionMode::Replace
for (entity, &transform, &object_type) in drafts.iter() {
// TODO: spawn only if there is no collision
commands.entity(entity).despawn_recursive();
commands
.spawn_bundle(SpawnBundle::new(object_type, transform))
.insert(game_config.player());
}
}
}

fn spawn_draft(
mut commands: Commands,
keys: Res<Input<KeyCode>>,
pointer: Res<Pointer>,
drafts: Query<Entity, With<Draft>>,
) {
if !keys.just_pressed(KeyCode::B) {
return;
}

for entity in drafts.iter() {
commands.entity(entity).despawn_recursive();
}

let point = match pointer.terrain_point() {
Some(point) => point,
None => return,
};
let event = match pointer.entity() {
Some(entity) => SelectEvent::single(entity, selection_mode),
None => SelectEvent::none(selection_mode),

// TODO: powerhub
let object_type = ObjectType::Active(ActiveObjectType::Base);
commands.spawn_bundle(DraftBundle::new(
object_type,
Transform {
translation: point,
..Default::default()
},
));
}

fn move_drafts(pointer: Res<Pointer>, mut drafts: Query<&mut Transform, With<Draft>>) {
// TODO move by some delta, rather than to a point
// TODO: make this a no-op if the mouse was not moved
let point = match pointer.terrain_point() {
Some(point) => point,
None => return,
};
events.send(event);
for mut transform in drafts.iter_mut() {
transform.translation = point;
}
}

0 comments on commit 51d1adb

Please sign in to comment.