Skip to content

Commit

Permalink
Merge branch 'master' into SwitchWar3
Browse files Browse the repository at this point in the history
  • Loading branch information
stijnherfst authored Sep 16, 2018
2 parents 8554b54 + f65b07d commit 0a0248f
Show file tree
Hide file tree
Showing 17 changed files with 147 additions and 94 deletions.
Binary file modified HiveWE/Data/Icons/Ribbon/open32x32.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
59 changes: 55 additions & 4 deletions HiveWE/DoodadBrush.cpp
Original file line number Diff line number Diff line change
@@ -1,5 +1,20 @@
#include "stdafx.h"

/// Gets a random variation from the possible_variation list
int DoodadBrush::get_random_variation() {
if (possible_variations.size() == 0) {
return 0;
}

std::mt19937 rng;
rng.seed(std::random_device()());
std::uniform_int_distribution<std::mt19937::result_type> dist(0, possible_variations.size() - 1);

auto it = possible_variations.begin();
std::advance(it, dist(rng));
return *it;
}

void DoodadBrush::key_press_event(QKeyEvent* event) {
switch (event->key()) {
case Qt::Key_Delete:
Expand Down Expand Up @@ -48,7 +63,20 @@ void DoodadBrush::apply() {
if (id == "") {
return;
}
map.doodads.add_doodad(id, free_placement ? input_handler.mouse_world : glm::vec3(glm::vec2(glm::ivec2(input_handler.mouse_world * 2.f)) * 0.5f + 0.25f, input_handler.mouse_world.z));

glm::vec3 position;
if (free_placement) {
position = input_handler.mouse_world;
} else {
// Round to 0.5
position = glm::vec3(glm::trunc(glm::vec2(input_handler.mouse_world) * 2.f) * 0.5f + 0.25f, input_handler.mouse_world.z);
}

map.doodads.add_doodad(id, variation, position);

if (random_variation) {
set_random_variation();
}
}

void DoodadBrush::render_brush() const {
Expand Down Expand Up @@ -90,9 +118,28 @@ void DoodadBrush::render_selection() const {
gl->glEnable(GL_DEPTH_TEST);
}

void DoodadBrush::set_random_variation() {
variation = get_random_variation();
mesh = map.doodads.get_mesh(id, variation);
}

void DoodadBrush::add_variation(int variation) {
possible_variations.insert(variation);
}

void DoodadBrush::erase_variation(int variation) {
possible_variations.erase(variation);
if (this->variation == variation) {
this->variation = get_random_variation();
}
}


void DoodadBrush::set_doodad(const std::string& id) {
this->id = id;

if (random_variation) {
set_random_variation();
}
bool is_doodad = map.doodads.doodads_slk.row_header_exists(id);
slk::SLK& slk = is_doodad ? map.doodads.doodads_slk : map.doodads.destructibles_slk;

Expand All @@ -104,12 +151,16 @@ void DoodadBrush::set_doodad(const std::string& id) {
} else {
if (hierarchy.file_exists(pathing_texture_path)) {
free_placement = false;
auto pathing_texture = resource_manager.load<Texture>(pathing_texture_path);
pathing_texture = resource_manager.load<Texture>(pathing_texture_path);
free_rotation = pathing_texture->width == pathing_texture->height;
} else {
free_placement = true;
}
}

mesh = map.doodads.get_mesh(id, 0);
possible_variations.clear();
int variation_count = std::stoi(slk.data("numVar", id));
for (int i = 0; i < variation_count; i++) {
possible_variations.insert(i);
}
}
12 changes: 11 additions & 1 deletion HiveWE/DoodadBrush.h
Original file line number Diff line number Diff line change
@@ -1,14 +1,20 @@
#pragma once

class DoodadBrush : public Brush {
public:
std::set<int> possible_variations = { 0 };
int get_random_variation();

std::string id;
int variation;
std::shared_ptr<StaticMesh> mesh;
std::shared_ptr<Texture> pathing_texture;
public:

bool free_placement;
bool free_rotation;

bool random_variation = true;

void key_press_event(QKeyEvent* event) override;
void mouse_release_event(QMouseEvent* event) override;
void mouse_move_event(QMouseEvent* event) override;
Expand All @@ -19,5 +25,9 @@ class DoodadBrush : public Brush {
void render_brush() const override;
void render_selection() const override;

void set_random_variation();
void add_variation(int variation);
void erase_variation(int variation);

void set_doodad(const std::string& id);
};
31 changes: 20 additions & 11 deletions HiveWE/DoodadPalette.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,7 @@ DoodadPalette::DoodadPalette(QWidget* parent) : QDialog(parent) {
random_variation->setText("Random\nVariation");
random_variation->setIcon(QIcon("Data/Icons/Ribbon/variation32x32.png"));
random_variation->setCheckable(true);
random_variation->setChecked(true);
variation_section->addWidget(random_variation);
variation_section->addWidget(variations);

Expand Down Expand Up @@ -91,11 +92,12 @@ DoodadPalette::DoodadPalette(QWidget* parent) : QDialog(parent) {

//section->addLayout(lay);

ribbon_tab->add_section(selection_section);
ribbon_tab->add_section(placement_section);
ribbon_tab->add_section(variation_section);
ribbon_tab->addSection(selection_section);
ribbon_tab->addSection(placement_section);
ribbon_tab->addSection(variation_section);

connect(selection_mode, &QToolButton::toggled, [&]() { brush.switch_mode(); });
connect(selection_mode, &QRibbonButton::toggled, [&]() { brush.switch_mode(); });
connect(random_variation, &QRibbonButton::toggled, [&](bool checked) { brush.random_variation = checked; });

connect(ui.tileset, QOverload<int>::of(&QComboBox::currentIndexChanged), this, &DoodadPalette::update_list);
connect(ui.type, QOverload<int>::of(&QComboBox::currentIndexChanged), this, &DoodadPalette::update_list);
Expand All @@ -111,7 +113,7 @@ DoodadPalette::~DoodadPalette() {
bool DoodadPalette::event(QEvent *e) {
if (e->type() == QEvent::WindowActivate) {
map.brush = &brush;
emit ribbon_tab_requested(ribbon_tab);
emit ribbon_tab_requested(ribbon_tab, "Doodad Palette");
}
return QWidget::event(e);
}
Expand Down Expand Up @@ -150,7 +152,7 @@ void DoodadPalette::update_list() {
}

void DoodadPalette::selection_changed(QListWidgetItem* item) {
std::string id = item->data(Qt::UserRole).toString().toStdString();
const std::string id = item->data(Qt::UserRole).toString().toStdString();

brush.set_doodad(id);
selection_mode->setChecked(false);
Expand All @@ -162,10 +164,17 @@ void DoodadPalette::selection_changed(QListWidgetItem* item) {

int variation_count = std::stoi(slk.data("numVar", id));
for (int i = 0; i < variation_count; i++) {
QRibbonButton* test = new QRibbonButton;
test->setCheckable(true);
test->setChecked(true);
test->setText(QString::number(i));
variations->addWidget(test, i % 3, i / 3);
QRibbonButton* toggle = new QRibbonButton;
toggle->setCheckable(true);
toggle->setChecked(true);
toggle->setText(QString::number(i));
variations->addWidget(toggle, i % 3, i / 3);
connect(toggle, &QRibbonButton::toggled, [=](bool checked) {
if (checked) {
brush.add_variation(i);
} else {
brush.erase_variation(i);
}
});
}
}
2 changes: 1 addition & 1 deletion HiveWE/DoodadPalette.h
Original file line number Diff line number Diff line change
Expand Up @@ -24,5 +24,5 @@ class DoodadPalette : public QDialog {

QRibbonContainer* variations = new QRibbonContainer;
signals:
void ribbon_tab_requested(QRibbonTab* tab);
void ribbon_tab_requested(QRibbonTab* tab, QString name);
};
5 changes: 3 additions & 2 deletions HiveWE/Doodads.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -178,10 +178,11 @@ void Doodads::render() {
}
}

Doodad& Doodads::add_doodad(std::string id, glm::vec3 position) {
Doodad& Doodads::add_doodad(std::string id, int variation, glm::vec3 position) {
Doodad doodad;
doodad.id = id;
doodad.mesh = get_mesh(id, 0);
doodad.variation = variation;
doodad.mesh = get_mesh(id, variation);
doodad.position = position;
doodad.scale = glm::vec3(1 / 128.f);
doodad.angle = 0;
Expand Down
2 changes: 1 addition & 1 deletion HiveWE/Doodads.h
Original file line number Diff line number Diff line change
Expand Up @@ -66,7 +66,7 @@ class Doodads {
void create();
void render();

Doodad& add_doodad(std::string id, glm::vec3 position);
Doodad& add_doodad(std::string id, int variation, glm::vec3 position);
void remove_doodad(Doodad* doodad);

std::vector<Doodad*> query_area(QRectF area);
Expand Down
33 changes: 7 additions & 26 deletions HiveWE/HiveWE.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,6 @@ HiveWE::HiveWE(QWidget* parent) : QMainWindow(parent) {
connect(new QShortcut(Qt::Key_T, this), &QShortcut::activated, ui.ribbon->wireframe_visible, &QPushButton::click);
connect(new QShortcut(Qt::Key_F3, this), &QShortcut::activated, ui.ribbon->debug_visible, &QPushButton::click);


connect(ui.ribbon->reset_camera, &QPushButton::clicked, [&]() { camera->reset(); });
connect(ui.ribbon->switch_camera, &QPushButton::clicked, this, &HiveWE::switch_camera);

Expand All @@ -53,41 +52,23 @@ HiveWE::HiveWE(QWidget* parent) : QMainWindow(parent) {

connect(ui.ribbon->import_heightmap, &QPushButton::clicked, this, &HiveWE::import_heightmap);

//connect(ui.actionOpen, &QAction::triggered, this, &HiveWE::load);
//connect(ui.actionSave, &QAction::triggered, [&]() { map.save(map.filesystem_path); });
//connect(ui.actionSave_As, &QAction::triggered, this, &HiveWE::save_as);
//connect(ui.actionTest_Map, &QAction::triggered, [&]() { map.play_test(); });

//connect(ui.ribbon->new_map, &QAction::triggered, this, &HiveWE::load);
connect(ui.ribbon->open_map, &QPushButton::clicked, this, &HiveWE::load);
connect(ui.ribbon->save_map, &QPushButton::clicked, [&]() { map.save(map.filesystem_path); });
connect(ui.ribbon->save_map_as, &QPushButton::clicked, this, &HiveWE::save_as);
connect(ui.ribbon->test_map, &QPushButton::clicked, [&]() { map.play_test(); });
connect(ui.ribbon->exit, &QPushButton::clicked, [&]() { });

//connect(ui.actionUnits, &QAction::triggered, [&](bool checked) { map.render_units = checked; });
//connect(ui.actionDoodads, &QAction::triggered, [&](bool checked) { map.render_doodads = checked; });
//connect(ui.actionPathing, &QAction::triggered, [&](bool checked) { map.render_pathing = checked; });
//connect(ui.actionBrush, &QAction::triggered, [&](bool checked) { map.render_brush = checked; });
//connect(ui.actionLighting, &QAction::triggered, [&](bool checked) { map.render_lighting = checked; });
//connect(ui.actionWireframe, &QAction::triggered, [&](bool checked) { map.render_wireframe = checked; });
//connect(ui.actionFrame_Times, &QAction::triggered, [&](bool checked) { map.show_timings = checked; });

//connect(ui.actionReset_Camera, &QAction::triggered, [&]() { camera->reset(); });
//connect(ui.actionSwitch_Camera, &QAction::triggered, this, &HiveWE::switch_camera);
connect(ui.ribbon->change_tileset, &QRibbonButton::clicked, [this]() { new TileSetter(this); });
connect(ui.ribbon->change_tile_pathing, &QRibbonButton::clicked, [this]() { new TilePather(this); });

connect(ui.actionDescription, &QAction::triggered, [&]() { (new MapInfoEditor(this))->ui.tabs->setCurrentIndex(0); });
connect(ui.actionLoading_Screen, &QAction::triggered, [&]() { (new MapInfoEditor(this))->ui.tabs->setCurrentIndex(1); });
connect(ui.actionOptions, &QAction::triggered, [&]() { (new MapInfoEditor(this))->ui.tabs->setCurrentIndex(2); });
connect(ui.actionPreferences, &QAction::triggered, [&]() { (new MapInfoEditor(this))->ui.tabs->setCurrentIndex(3); });

connect(ui.actionTileSetter, &QAction::triggered, [this]() { new TileSetter(this); });
connect(ui.actionChangeTilePathing, &QAction::triggered, [this]() { new TilePather(this); });

connect(ui.actionEnforce_Water_Height_Limit, &QAction::triggered, [&](bool checked) { map.enforce_water_height_limits = checked; });
connect(ui.actionSwitch_Warcraft, &QAction::triggered, this, &HiveWE::switch_warcraft);



//connect(ui.actionSwitch_Warcraft, &QAction::triggered, this, &HiveWE::switch_warcraft);

connect(ui.actionPathing_Palette, &QAction::triggered, [this]() {
auto palette = new PathingPallete(this);
connect(this, &HiveWE::tileset_changed, [palette]() {
Expand Down Expand Up @@ -221,13 +202,13 @@ void HiveWE::import_heightmap() {
gl->glTextureSubImage2D(map.terrain.ground_height, 0, 0, 0, width, height, GL_RED, GL_FLOAT, map.terrain.ground_heights.data());
}

void HiveWE::set_current_custom_tab(QRibbonTab* tab) {
void HiveWE::set_current_custom_tab(QRibbonTab* tab, QString name) {
if (current_custom_tab == tab) {
return;
}
remove_custom_tab();
current_custom_tab = tab;
ui.ribbon->addTab(tab, "Testtab");
ui.ribbon->addTab(tab, name);
ui.ribbon->setCurrentIndex(ui.ribbon->count() - 1);
}

Expand Down
2 changes: 1 addition & 1 deletion HiveWE/HiveWE.h
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ class HiveWE : public QMainWindow {
void import_heightmap();

/// Adds the tab to the ribbon and sets the current index to this tab
void set_current_custom_tab(QRibbonTab* tab);
void set_current_custom_tab(QRibbonTab* tab, QString name);
void remove_custom_tab();
signals:
void tileset_changed();
Expand Down
32 changes: 0 additions & 32 deletions HiveWE/HiveWE.ui
Original file line number Diff line number Diff line change
Expand Up @@ -57,15 +57,6 @@
<height>21</height>
</rect>
</property>
<widget class="QMenu" name="menuFile">
<property name="title">
<string>File</string>
</property>
<addaction name="actionOpen"/>
<addaction name="actionSave"/>
<addaction name="actionSave_As"/>
<addaction name="actionTest_Map"/>
</widget>
<widget class="QMenu" name="menuWindow">
<property name="title">
<string>Window</string>
Expand All @@ -82,19 +73,6 @@
<addaction name="actionImport_Manager"/>
<addaction name="actionTrigger_Editor"/>
</widget>
<widget class="QMenu" name="menuTools">
<property name="title">
<string>Tools</string>
</property>
<widget class="QMenu" name="menuPathing_Map">
<property name="title">
<string>Pathing Map</string>
</property>
<addaction name="actionChangeTilePathing"/>
</widget>
<addaction name="actionTileSetter"/>
<addaction name="menuPathing_Map"/>
</widget>
<widget class="QMenu" name="menuScenario">
<property name="title">
<string>Map</string>
Expand All @@ -106,17 +84,7 @@
<addaction name="actionSize_and_Camera_Bounds"/>
<addaction name="separator"/>
</widget>
<widget class="QMenu" name="menuAdvanced">
<property name="title">
<string>Advanced</string>
</property>
<addaction name="actionEnforce_Water_Height_Limit"/>
<addaction name="actionSwitch_Warcraft"/>
</widget>
<addaction name="menuFile"/>
<addaction name="menuScenario"/>
<addaction name="menuTools"/>
<addaction name="menuAdvanced"/>
<addaction name="menuWindow"/>
</widget>
<action name="actionConvert_Blockers_to_Pathmap">
Expand Down
Loading

0 comments on commit 0a0248f

Please sign in to comment.