mirror of
https://gitlab.com/veloren/veloren.git
synced 2024-08-30 18:12:32 +00:00
149 lines
5.2 KiB
Rust
149 lines
5.2 KiB
Rust
use crate::{AdminCommandState, EguiAction, EguiActions};
|
|
use common::cmd::ServerChatCommand;
|
|
use egui::{style::Margin, CollapsingHeader, Context, Resize, Slider, Ui, Vec2, Window};
|
|
use lazy_static::lazy_static;
|
|
|
|
lazy_static! {
|
|
static ref ITEM_SPECS: Vec<String> = {
|
|
let mut item_specs = common::cmd::ITEM_SPECS
|
|
.iter()
|
|
.map(|item_desc| item_desc.replace("common.items.", ""))
|
|
.collect::<Vec<String>>();
|
|
item_specs.sort();
|
|
item_specs
|
|
};
|
|
}
|
|
lazy_static! {
|
|
static ref ENTITY_CONFIGS: Vec<String> = {
|
|
let mut entity_configs = common::cmd::ENTITY_CONFIGS
|
|
.iter()
|
|
.map(|entity_desc| entity_desc.replace("common.entity.", ""))
|
|
.collect::<Vec<String>>();
|
|
entity_configs.sort();
|
|
entity_configs
|
|
};
|
|
}
|
|
|
|
pub fn draw_admin_commands_window(
|
|
ctx: &Context,
|
|
state: &mut AdminCommandState,
|
|
open: &mut bool,
|
|
egui_actions: &mut EguiActions,
|
|
) {
|
|
Window::new("Admin Commands")
|
|
.open(open)
|
|
.default_width(400.0)
|
|
.default_height(600.0)
|
|
.show(ctx, |ui| {
|
|
ui.spacing_mut().item_spacing = Vec2::new(10.0, 10.0);
|
|
ui.vertical(|ui| {
|
|
CollapsingHeader::new("Give Items")
|
|
.default_open(true)
|
|
.show(ui, |ui| {
|
|
draw_give_items(ui, state, egui_actions);
|
|
});
|
|
CollapsingHeader::new("Kits")
|
|
.default_open(false)
|
|
.show(ui, |ui| {
|
|
draw_kits(ui, state, egui_actions);
|
|
});
|
|
CollapsingHeader::new("Spawn Entities")
|
|
.default_open(false)
|
|
.show(ui, |ui| {
|
|
draw_spawn_entities(ui, state, egui_actions);
|
|
})
|
|
});
|
|
});
|
|
}
|
|
|
|
fn draw_kits(ui: &mut Ui, state: &mut AdminCommandState, egui_actions: &mut EguiActions) {
|
|
ui.vertical(|ui| {
|
|
if ui.button("Give Kit").clicked() {
|
|
egui_actions.actions.push(EguiAction::ChatCommand {
|
|
cmd: ServerChatCommand::Kit,
|
|
args: vec![common::cmd::KITS[state.kits_selected_idx].clone()],
|
|
});
|
|
};
|
|
crate::widgets::filterable_list(ui, &common::cmd::KITS, "", &mut state.kits_selected_idx)
|
|
});
|
|
}
|
|
|
|
fn draw_give_items(ui: &mut Ui, state: &mut AdminCommandState, egui_actions: &mut EguiActions) {
|
|
ui.spacing_mut().window_margin = Margin::same(10.0);
|
|
Resize::default()
|
|
.default_size([400.0, 200.0])
|
|
.show(ui, |ui| {
|
|
ui.horizontal(|ui| {
|
|
ui.add(
|
|
Slider::new(&mut state.give_item_qty, 1..=100000)
|
|
.logarithmic(true)
|
|
.clamp_to_range(true)
|
|
.text("Qty"),
|
|
);
|
|
if ui.button("Give Items").clicked() {
|
|
egui_actions.actions.push(EguiAction::ChatCommand {
|
|
cmd: ServerChatCommand::GiveItem,
|
|
args: vec![
|
|
format!(
|
|
"common.items.{}",
|
|
ITEM_SPECS[state.give_item_selected_idx].clone()
|
|
),
|
|
format!("{}", state.give_item_qty),
|
|
],
|
|
});
|
|
};
|
|
});
|
|
ui.horizontal(|ui| {
|
|
ui.label("Filter:");
|
|
|
|
ui.text_edit_singleline(&mut state.give_item_search_text);
|
|
});
|
|
|
|
crate::widgets::filterable_list(
|
|
ui,
|
|
&ITEM_SPECS,
|
|
&state.give_item_search_text,
|
|
&mut state.give_item_selected_idx,
|
|
);
|
|
});
|
|
}
|
|
fn draw_spawn_entities(ui: &mut Ui, state: &mut AdminCommandState, egui_actions: &mut EguiActions) {
|
|
ui.spacing_mut().window_margin = Margin::same(10.0);
|
|
Resize::default()
|
|
.default_size([400.0, 200.0])
|
|
.show(ui, |ui| {
|
|
ui.horizontal(|ui| {
|
|
ui.add(
|
|
Slider::new(&mut state.spawn_entity_qty, 1..=49)
|
|
.logarithmic(true)
|
|
.clamp_to_range(true)
|
|
.text("Qty"),
|
|
);
|
|
if ui.button("Spawn Entities").clicked() {
|
|
egui_actions.actions.push(EguiAction::ChatCommand {
|
|
cmd: ServerChatCommand::MakeNpc,
|
|
args: vec![
|
|
format!(
|
|
"common.entity.{}",
|
|
ENTITY_CONFIGS[state.spawn_entity_selected_idx].clone()
|
|
),
|
|
format!("{}", state.spawn_entity_qty),
|
|
],
|
|
});
|
|
};
|
|
});
|
|
ui.horizontal(|ui| {
|
|
ui.label("Filter:");
|
|
|
|
ui.text_edit_singleline(&mut state.spawn_entity_search_text);
|
|
});
|
|
|
|
crate::widgets::filterable_list(
|
|
ui,
|
|
&ENTITY_CONFIGS,
|
|
&state.spawn_entity_search_text,
|
|
&mut state.spawn_entity_selected_idx,
|
|
);
|
|
});
|
|
}
|