mirror of
https://github.com/MaSzyna-EU07/maszyna.git
synced 2026-07-22 18:39:18 +02:00
further WIP on launcher
This commit is contained in:
@@ -211,7 +211,21 @@ void ui::scenerylist_panel::draw_trainset(trainset_desc &trainset)
|
|||||||
|
|
||||||
glm::ivec2 size = mini->size();
|
glm::ivec2 size = mini->size();
|
||||||
float width = 30.0f / size.y * size.x;
|
float width = 30.0f / size.y * size.x;
|
||||||
|
float beforeX = ImGui::GetCursorPosX();
|
||||||
ImGui::Image(reinterpret_cast<void*>(mini->get()), ImVec2(width, 30), ImVec2(0, 1), ImVec2(1, 0));
|
ImGui::Image(reinterpret_cast<void*>(mini->get()), ImVec2(width, 30), ImVec2(0, 1), ImVec2(1, 0));
|
||||||
|
float afterX = ImGui::GetCursorPosX();
|
||||||
|
|
||||||
|
ImGui::SameLine(beforeX);
|
||||||
|
ImGui::InvisibleButton(dyn_desc.name.c_str(), ImVec2(width, 30));
|
||||||
|
if (ImGui::BeginDragDropSource(ImGuiDragDropFlags_SourceAutoExpirePayload)) {
|
||||||
|
vehicle_moved data(trainset, dyn_desc, position - 1);
|
||||||
|
|
||||||
|
ImGui::Image(reinterpret_cast<void*>(mini->get()), ImVec2(width, 30), ImVec2(0, 1), ImVec2(1, 0));
|
||||||
|
|
||||||
|
ImGui::SetDragDropPayload("vehicle_set", &data, sizeof(vehicle_moved));
|
||||||
|
ImGui::EndDragDropSource();
|
||||||
|
}
|
||||||
|
ImGui::SameLine(afterX);
|
||||||
|
|
||||||
if (ImGui::IsItemClicked(1)) {
|
if (ImGui::IsItemClicked(1)) {
|
||||||
register_popup(std::make_unique<ui::dynamic_edit_popup>(*this, dyn_desc));
|
register_popup(std::make_unique<ui::dynamic_edit_popup>(*this, dyn_desc));
|
||||||
@@ -283,6 +297,23 @@ void ui::scenerylist_panel::draw_droptarget(trainset_desc &trainset, int positio
|
|||||||
desc.skin = skin;
|
desc.skin = skin;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
payload = ImGui::AcceptDragDropPayload("vehicle_set");
|
||||||
|
if (payload) {
|
||||||
|
vehicle_moved *moved = reinterpret_cast<vehicle_moved*>(payload->Data);
|
||||||
|
|
||||||
|
dynamic_desc desc_copy = moved->dynamic;
|
||||||
|
int offset = 0;
|
||||||
|
if (&trainset == &moved->source) {
|
||||||
|
trainset.vehicles.erase(trainset.vehicles.begin() + moved->position);
|
||||||
|
if (moved->position < position)
|
||||||
|
offset = -1;
|
||||||
|
} else {
|
||||||
|
desc_copy.name = desc_copy.skin->skin + "_" + std::to_string((int)LocalRandom(0.0, 10000000.0));
|
||||||
|
}
|
||||||
|
|
||||||
|
trainset.vehicles.insert(trainset.vehicles.begin() + position + offset, desc_copy);
|
||||||
|
}
|
||||||
ImGui::EndDragDropTarget();
|
ImGui::EndDragDropTarget();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -37,6 +37,15 @@ class scenerylist_panel : public ui_panel
|
|||||||
void render_contents() override;
|
void render_contents() override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
struct vehicle_moved {
|
||||||
|
trainset_desc &source;
|
||||||
|
dynamic_desc &dynamic;
|
||||||
|
int position;
|
||||||
|
|
||||||
|
vehicle_moved(trainset_desc &source, dynamic_desc &dynamic, int position)
|
||||||
|
: source(source), dynamic(dynamic), position(position) {}
|
||||||
|
};
|
||||||
|
|
||||||
scenery_scanner &scanner;
|
scenery_scanner &scanner;
|
||||||
scenery_desc *selected_scenery = nullptr;
|
scenery_desc *selected_scenery = nullptr;
|
||||||
trainset_desc *selected_trainset = nullptr;
|
trainset_desc *selected_trainset = nullptr;
|
||||||
|
|||||||
Reference in New Issue
Block a user