Skip to content

Commit

Permalink
Merge pull request #15 from Tokeiburu/water-rendering
Browse files Browse the repository at this point in the history
No longer renders water on empty tiles or below tiles.
  • Loading branch information
Borf authored Dec 18, 2023
2 parents 5785968 + 4129d25 commit 02b3770
Show file tree
Hide file tree
Showing 5 changed files with 53 additions and 20 deletions.
36 changes: 18 additions & 18 deletions browedit/MapView.Objectmode.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -237,30 +237,30 @@ void MapView::postRenderObjectMode(BrowEdit* browEdit)
lockedGizmo = !ImGui::GetIO().KeyCtrl;
}

if (!lockedGizmo) {
if (map->selectedNodes.size() == 1 && gadget.mode == Gadget::Mode::Rotate) {
mat = glm::rotate(mat, -glm::radians(map->selectedNodes[0]->getComponent<RswObject>()->rotation.z), glm::vec3(0, 0, 1));
rotMat = glm::rotate(rotMat, -glm::radians(map->selectedNodes[0]->getComponent<RswObject>()->rotation.z), glm::vec3(0, 0, 1));
if (map->selectedNodes[0]->getComponent<RswObject>()) {
if (!lockedGizmo) {
if (map->selectedNodes.size() == 1 && gadget.mode == Gadget::Mode::Rotate) {
mat = glm::rotate(mat, -glm::radians(map->selectedNodes[0]->getComponent<RswObject>()->rotation.z), glm::vec3(0, 0, 1));
rotMat = glm::rotate(rotMat, -glm::radians(map->selectedNodes[0]->getComponent<RswObject>()->rotation.z), glm::vec3(0, 0, 1));
}
}
}

if (map->selectedNodes.size() == 1 && gadget.mode == Gadget::Mode::Scale) {
mat = glm::rotate(mat, -glm::radians(map->selectedNodes[0]->getComponent<RswObject>()->rotation.z), glm::vec3(0, 0, 1));
mat = glm::rotate(mat, -glm::radians(map->selectedNodes[0]->getComponent<RswObject>()->rotation.x), glm::vec3(1, 0, 0));
mat = glm::rotate(mat, glm::radians(map->selectedNodes[0]->getComponent<RswObject>()->rotation.y), glm::vec3(0, 1, 0));
if (map->selectedNodes.size() == 1 && gadget.mode == Gadget::Mode::Scale) {
mat = glm::rotate(mat, -glm::radians(map->selectedNodes[0]->getComponent<RswObject>()->rotation.z), glm::vec3(0, 0, 1));
mat = glm::rotate(mat, -glm::radians(map->selectedNodes[0]->getComponent<RswObject>()->rotation.x), glm::vec3(1, 0, 0));
mat = glm::rotate(mat, glm::radians(map->selectedNodes[0]->getComponent<RswObject>()->rotation.y), glm::vec3(0, 1, 0));

rotMat = glm::rotate(rotMat, -glm::radians(map->selectedNodes[0]->getComponent<RswObject>()->rotation.z), glm::vec3(0, 0, 1));
rotMat = glm::rotate(rotMat, glm::radians(map->selectedNodes[0]->getComponent<RswObject>()->rotation.x), glm::vec3(1, 0, 0));
rotMat = glm::rotate(rotMat, glm::radians(map->selectedNodes[0]->getComponent<RswObject>()->rotation.y), glm::vec3(0, 1, 0));
rotMat = glm::rotate(rotMat, -glm::radians(map->selectedNodes[0]->getComponent<RswObject>()->rotation.z), glm::vec3(0, 0, 1));
rotMat = glm::rotate(rotMat, glm::radians(map->selectedNodes[0]->getComponent<RswObject>()->rotation.x), glm::vec3(1, 0, 0));
rotMat = glm::rotate(rotMat, glm::radians(map->selectedNodes[0]->getComponent<RswObject>()->rotation.y), glm::vec3(0, 1, 0));
}
}

gadget.draw(mouseRay, mat, !lockedGizmo ? -map->selectedNodes[0]->getComponent<RswObject>()->rotation.x : 0);
gadget.draw(mouseRay, mat, !lockedGizmo && map->selectedNodes[0]->getComponent<RswObject>() ? -map->selectedNodes[0]->getComponent<RswObject>()->rotation.x : 0);

if (!lockedGizmo) {
if (map->selectedNodes.size() == 1 && gadget.mode == Gadget::Mode::Rotate) {
if (gadget.selectedAxis == Gadget::Axis::Y) {
rotMat = glm::rotate(rotMat, glm::radians(map->selectedNodes[0]->getComponent<RswObject>()->rotation.x), glm::vec3(1, 0, 0));
}
if (!lockedGizmo && map->selectedNodes[0]->getComponent<RswObject>() && map->selectedNodes.size() == 1 && gadget.mode == Gadget::Mode::Rotate) {
if (gadget.selectedAxis == Gadget::Axis::Y) {
rotMat = glm::rotate(rotMat, glm::radians(map->selectedNodes[0]->getComponent<RswObject>()->rotation.x), glm::vec3(1, 0, 0));
}
}

Expand Down
12 changes: 11 additions & 1 deletion browedit/actions/ObjectChangeAction.h
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
#include <browedit/Node.h>
#include <browedit/components/RsmRenderer.h>
#include <browedit/components/GndRenderer.h>
#include <browedit/components/WaterRenderer.h>

template<class T>
class ObjectChangeAction : public Action
Expand Down Expand Up @@ -32,7 +33,11 @@ class ObjectChangeAction : public Action
auto gndRenderer = node->getComponent<GndRenderer>();
if (gndRenderer)
gndRenderer->setChunksDirty(); //TODO : only set this specific chunk dirty

auto waterRenderer = node->getComponent<WaterRenderer>();
if (waterRenderer) {
waterRenderer->renderFullWater = false;
waterRenderer->setDirty();
}
if ((std::string*)ptr == &(node->name))
node->onRename(map);
}
Expand All @@ -45,6 +50,11 @@ class ObjectChangeAction : public Action
auto gndRenderer = node->getComponent<GndRenderer>();
if (gndRenderer)
gndRenderer->setChunksDirty(); //TODO : only set this specific chunk dirty
auto waterRenderer = node->getComponent<WaterRenderer>();
if (waterRenderer) {
waterRenderer->renderFullWater = false;
waterRenderer->setDirty();
}
if ((std::string*)ptr == &(node->name))
node->onRename(map);
}
Expand Down
9 changes: 8 additions & 1 deletion browedit/components/Rsw.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -781,7 +781,14 @@ void Rsw::buildImGui(BrowEdit* browEdit)
auto waterRenderer = node->getComponent<WaterRenderer>();
waterRenderer->reloadTextures();
}
util::DragFloat(browEdit, browEdit->activeMapView->map, node, "Height", &water.height, 0.1f, -100, 100);
if (util::DragFloat(browEdit, browEdit->activeMapView->map, node, "Height", &water.height, 0.1f, -100, 100)) {
auto waterRenderer = node->getComponent<WaterRenderer>();

if (!waterRenderer->renderFullWater) {
waterRenderer->renderFullWater = true;
waterRenderer->setDirty();
}
}
util::DragFloat(browEdit, browEdit->activeMapView->map, node, "Wave Height", &water.amplitude, 0.1f, -100, 100);
util::DragInt(browEdit, browEdit->activeMapView->map, node, "Texture Animation Speed", &water.textureAnimSpeed, 1, 0, 1000);
util::DragFloat(browEdit, browEdit->activeMapView->map, node, "Wave Speed", &water.waveSpeed, 0.1f, -100, 100);
Expand Down
15 changes: 15 additions & 0 deletions browedit/components/WaterRenderer.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -41,13 +41,28 @@ void WaterRenderer::render()
if (!vbo || dirty)
{
auto gnd = node->getComponent<Gnd>();
float waveHeight = -9999;

if (rsw)
waveHeight = rsw->water.height - rsw->water.amplitude;

if(!vbo)
vbo = new gl::VBO<VertexP3T2>();
std::vector<VertexP3T2> verts;
for (int x = 0; x < gnd->width; x++)
{
for (int y = 0; y < gnd->height; y++)
{
auto c = gnd->cubes[x][gnd->height - y - 1];

if (!this->renderFullWater) {
if (c->tileUp == -1)
continue;

if (c->heights[0] <= waveHeight && c->heights[1] <= waveHeight && c->heights[2] <= waveHeight && c->heights[3] <= waveHeight)
continue;
}

verts.push_back(VertexP3T2(glm::vec3(10 * x, 0, 10 * (y+1)), glm::vec2((x % 4) * 0.25f + 0.00f, (y % 4) * 0.25f + 0.00f)));
verts.push_back(VertexP3T2(glm::vec3(10 * (x+1), 0, 10 * (y+1)), glm::vec2((x % 4) * 0.25f + 0.25f, (y % 4) * 0.25f + 0.00f)));
verts.push_back(VertexP3T2(glm::vec3(10 * (x+1), 0, 10 * (y+2)), glm::vec2((x % 4) * 0.25f + 0.25f, (y % 4) * 0.25f + 0.25f)));
Expand Down
1 change: 1 addition & 0 deletions browedit/components/WaterRenderer.h
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@ class WaterRenderer : public Renderer
gl::VBO<VertexP3T2>* vbo = nullptr;
bool dirty = true;
bool viewFog = false;
bool renderFullWater = false;

WaterRenderer();
~WaterRenderer();
Expand Down

0 comments on commit 02b3770

Please sign in to comment.