Skip to content

Commit

Permalink
Bromedit compiles again
Browse files Browse the repository at this point in the history
fixed some submesh positioning
  • Loading branch information
Borf committed Oct 10, 2019
1 parent a75c2be commit df22bb2
Show file tree
Hide file tree
Showing 12 changed files with 83 additions and 50 deletions.
1 change: 1 addition & 0 deletions brolib/BroLib/IRsm.h
Original file line number Diff line number Diff line change
Expand Up @@ -93,6 +93,7 @@ class IRsm


virtual void updateMatrices() {}
virtual void save(const std::string& fileName) {}



Expand Down
11 changes: 7 additions & 4 deletions brolib/BroLib/MapRenderer.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -809,6 +809,11 @@ void MapRenderer::renderModel(Rsw::Model* model, blib::Renderer* renderer)
model->aabb.max = glm::max(model->aabb.max, verts[i].position);
}
}
if (rsm2Model)
{
model->aabb.min = glm::vec3(-99, -99, -99);
model->aabb.max = glm::vec3(99, 99, 99);
}
}

if (model->model->renderer == NULL)
Expand Down Expand Up @@ -1044,7 +1049,7 @@ void MapRenderer::renderMeshFbo(IRsm* rsm, float rotation, blib::FBO* fbo, blib:
}


void MapRenderer::renderMesh(Rsm* rsm, const glm::mat4 &camera, blib::Renderer* renderer)
void MapRenderer::renderMesh(IRsm* rsm, const glm::mat4 &camera, blib::Renderer* renderer)
{
blib::FBO* oldFbo = rswRenderState.activeFbo;

Expand All @@ -1063,9 +1068,7 @@ void MapRenderer::renderMesh(Rsm* rsm, const glm::mat4 &camera, blib::Renderer*
rswRenderState.activeFbo = nullptr;
rswRenderState.depthTest = true;

Rsm* rsm1 = dynamic_cast<Rsm*>(rsm);
if(rsm1)
renderMesh(rsm1->rootMesh, glm::mat4(), rsm->renderer, renderer);
renderMesh(rsm->rootMesh, glm::mat4(), rsm->renderer, renderer);

rswRenderState.activeFbo = oldFbo;
//rswRenderState.activeShader->setUniform(RswShaderAttributes::ProjectionMatrix, projectionMatrix);
Expand Down
2 changes: 1 addition & 1 deletion brolib/BroLib/MapRenderer.h
Original file line number Diff line number Diff line change
Expand Up @@ -205,7 +205,7 @@ class MapRenderer : public blib::gl::GlResizeRegister
void setShadowDirty();
void setColorDirty() { gndTileColorDirty = true; }
void renderMeshFbo(IRsm* rsm, float rotation, blib::FBO* fbo, blib::Renderer* renderer);
void renderMesh(Rsm* rsm, const glm::mat4& matrix, blib::Renderer* renderer);
void renderMesh(IRsm* rsm, const glm::mat4& matrix, blib::Renderer* renderer);
bool gndTextureGridDirty;
bool gndGridDirty;
bool gatDirty;
Expand Down
5 changes: 2 additions & 3 deletions brolib/BroLib/Rsm2.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -90,6 +90,7 @@ void Rsm2::load0203(blib::util::StreamInFile* rsmFile)
mesh->textures.push_back(f - textures.begin());
}

mesh->offset = glm::mat4(1.0f);
mesh->offset[0][0] = rsmFile->readFloat();//rotation
mesh->offset[0][1] = rsmFile->readFloat();
mesh->offset[0][2] = rsmFile->readFloat();
Expand Down Expand Up @@ -195,15 +196,13 @@ void Rsm2::load0203(blib::util::StreamInFile* rsmFile)
void Rsm2::Mesh::calcMatrix1()
{
matrix1 = glm::mat4();
matrix1 = glm::translate(matrix1, pos);
for (unsigned int i = 0; i < children.size(); i++)
child(i)->calcMatrix1();
}
void Rsm2::Mesh::calcMatrix2()
{
matrix2 = glm::mat4();


matrix2 = glm::translate(matrix2, pos);
matrix2 *= offset;

for (unsigned int i = 0; i < children.size(); i++)
Expand Down
12 changes: 3 additions & 9 deletions brolib/BroLib/Rsw.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -872,13 +872,9 @@ void Rsw::Model::getWorldVerts(std::vector<int>& indices, std::vector<glm::vec3>

std::vector<glm::vec3> Rsw::Model::collisions(const blib::math::Ray &ray)
{
if (!aabb.hasRayCollision(ray, 0, 10000000))
if(!model || !model->loaded || !model->rootMesh || !aabb.hasRayCollision(ray, 0, 10000000))
return std::vector<glm::vec3>();
Rsm* rsm = dynamic_cast<Rsm*>(model);
if (rsm)
return collisions_(rsm->rootMesh, ray, matrixCache);

return std::vector<glm::vec3>();
return collisions_(model->rootMesh, ray, matrixCache);
}


Expand All @@ -905,9 +901,7 @@ void Rsw::Model::foreachface(std::function<void(const std::vector<glm::vec3>&)>
{
if (!model)
return;
Rsm* rsm = dynamic_cast<Rsm*>(model);
if (rsm)
foreachface_(rsm->rootMesh, callback, matrixCache);
foreachface_(model->rootMesh, callback, matrixCache);
}

Rsw::QuadTreeNode::QuadTreeNode(std::vector<glm::vec3>::const_iterator &it, int level /*= 0*/) : bbox(glm::vec3(0, 0, 0), glm::vec3(0,0,0))
Expand Down
72 changes: 48 additions & 24 deletions bromedit/BromEdit.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -108,7 +108,8 @@ void BromEdit::init()
//loadModel("data\\model\\pud\\stall_03.rsm");
//loadModel("data\\model\\pud\\swing_01.rsm");
//loadModel("data\\model\\pud\\balloon_01.rsm");
loadModel("data\\model\\plants_e_01.rsm2");
//loadModel("data\\model\\plants_e_01.rsm2");
loadModel("data\\model\\ilusion\\boarding_j_01.rsm2");

grid = resourceManager->getResource<blib::Texture>("assets/textures/grid.png");
grid->setTextureRepeat(true);
Expand Down Expand Up @@ -168,8 +169,8 @@ void BromEdit::update(double elapsedTime)
if (mouseState.position.y > bary+40)
{
int index = (int)((mouseState.position.y - bary - 40) / 13);
std::function<void(Rsm::Mesh*)> selectMesh;
selectMesh = [&, this](Rsm::Mesh* mesh)
std::function<void(IRsm::IMesh*)> selectMesh;
selectMesh = [&, this](IRsm::IMesh* mesh)
{
if (index == 0)
{
Expand All @@ -182,11 +183,11 @@ void BromEdit::update(double elapsedTime)

};
selectMesh(model->rootMesh);

for (auto frame : selectedMesh->frames)
#ifdef FIXME
for (auto frame : selectedRsmMesh->frames)
if (fabs(frame->time / 10.0 - timeSelect) < 5)
frameProperties->selectFrame(frame);

#endif

}
if (mouseState.position.y > bary && mouseState.position.y < bary + 40)
Expand All @@ -211,7 +212,7 @@ void BromEdit::update(double elapsedTime)
if (mouseState.position.y > bary + 40 && mouseState.position.x > 100 && mouseState.leftButton)
{
timeSelect = mouseState.position.x - 100.0f;
for (auto frame : selectedMesh->frames)
for (auto frame : selectedRsmMesh->frames)
if (fabs(frame->time / 10.0 - timeSelect) < 5)
frameProperties->selectFrame(frame);
if (model->renderer->timer.isPaused())
Expand All @@ -235,7 +236,11 @@ void BromEdit::draw()
matrix = glm::rotate(matrix, rotation.y, glm::vec3(1, 0, 0));
matrix = glm::rotate(matrix, rotation.x, glm::vec3(0, 1, 0));
matrix = glm::rotate(matrix, glm::pi<float>(), glm::vec3(1, 0, 0));
matrix = glm::translate(matrix, glm::vec3(model->realbbrange));

if(model->version < 0x0200)
matrix = glm::translate(matrix, glm::vec3(model1->realbbrange));
else
matrix = glm::translate(matrix, glm::vec3(100));


renderer->setViewPort(0, 200, window->getWidth(), window->getHeight() - 200);
Expand Down Expand Up @@ -296,9 +301,9 @@ void BromEdit::draw()


int i = 0;
std::function<void(Rsm::Mesh*, int)> drawLine;
std::function<void(IRsm::IMesh*, int)> drawLine;

drawLine = [&,this](Rsm::Mesh* mesh, int level)
drawLine = [&,this](IRsm::IMesh* mesh, int level)
{
if (mesh == selectedMesh)
{
Expand All @@ -311,7 +316,7 @@ void BromEdit::draw()
else
spriteBatch->draw(font, mesh->name, blib::math::easyMatrix(glm::vec2(5 + 16 * level, y + 40 + i * 13)), glm::vec4(0, 0, 0, 1));


#ifdef FIXME
for (auto frame : mesh->frames)
{
std::string symbol = "o";
Expand All @@ -325,7 +330,7 @@ void BromEdit::draw()
int tick = model->renderer->timer.millis() % mesh->frames[mesh->frames.size() - 1]->time;
spriteBatch->draw(font, "|", blib::math::easyMatrix(glm::vec2(100 + tick / 10, y + 40 + i * 13)), glm::vec4(0, 0, 0, 1));
}

#endif
i++;
for (auto &m : mesh->children)
drawLine(m, level + 1);
Expand All @@ -345,8 +350,15 @@ void BromEdit::draw()

void BromEdit::loadModel(const std::string &fileName)
{
model = new IRsm(fileName);
distance = glm::min(100.0f, glm::max(glm::max(model->realbbmax.x - model->realbbmin.x, model->realbbmax.y - model->realbbmin.y), model->realbbmax.z - model->realbbmin.z));
if (fileName.substr(fileName.size() - 4) == ".rsm")
{
model = new Rsm(fileName);
distance = glm::min(100.0f, glm::max(glm::max(model1->realbbmax.x - model1->realbbmin.x, model1->realbbmax.y - model1->realbbmin.y), model1->realbbmax.z - model1->realbbmin.z));
}
else if (fileName.substr(fileName.size() - 5) == ".rsm2")
{
model = new Rsm2(fileName);
}
mouseState.scrollPosition = 0;

renderInfo = new RsmModelRenderInfo();
Expand Down Expand Up @@ -376,7 +388,7 @@ void BromEdit::addKeyframe()
frame->time = (int)(timeSelect * 10);

frameProperties->selectFrame(frame);

#ifdef FIXME
for (auto it = selectedMesh->frames.begin(); it != selectedMesh->frames.end(); it++)
{
if ((*it)->time / 10 > timeSelect) {
Expand All @@ -400,12 +412,13 @@ void BromEdit::addKeyframe()
return b->time > a->time;
});
}

#endif

}

void BromEdit::delKeyframe()
{
#ifdef FIXME
for (auto it = selectedMesh->frames.begin(); it != selectedMesh->frames.end(); it++)
{
if (fabs((*it)->time / 10.0 - timeSelect) < 5)
Expand Down Expand Up @@ -436,11 +449,12 @@ void BromEdit::delKeyframe()
delete selectedMesh->frames[0];
selectedMesh->frames.clear();
}

#endif
}

void BromEdit::prevFrame()
{
#ifdef FIXME
for (std::size_t i = 0; i < selectedMesh->frames.size(); i++)
{
auto frame = selectedMesh->frames[i];
Expand All @@ -453,10 +467,12 @@ void BromEdit::prevFrame()
break;
}
}
#endif
}

void BromEdit::nextFrame()
{
#ifdef FIXME
for (std::size_t i = 0; i < selectedMesh->frames.size(); i++)
{
auto frame = selectedMesh->frames[i];
Expand All @@ -469,11 +485,13 @@ void BromEdit::nextFrame()
break;
}
}
#endif
}


void BromEdit::addMesh()
{
#ifdef FIXME
if (!selectedMesh)
return;

Expand All @@ -482,10 +500,12 @@ void BromEdit::addMesh()
mesh->parent = selectedMesh;
mesh->parentName = mesh->parent->name;
mesh->parent->children.push_back(mesh);
#endif
}

void BromEdit::delMesh()
{
#ifdef FIXME
if (!selectedMesh)
return;
// don't delete rootnode
Expand All @@ -497,7 +517,7 @@ void BromEdit::delMesh()

selectedMesh->children.erase(std::remove(selectedMesh->children.begin(), selectedMesh->children.end(), toDelete), selectedMesh->children.end());
delete toDelete;
#endif
}

void BromEdit::menuFileNew()
Expand Down Expand Up @@ -592,8 +612,10 @@ void BromEdit::replaceMesh()
mesh->faces.clear();
mesh->vertices.clear();
mesh->texCoords.clear();
#ifdef FIXME
mesh->textures.clear();
mesh->textures.push_back(0); //todo
#endif
delete mesh->renderer;
mesh->renderer = nullptr;

Expand Down Expand Up @@ -627,15 +649,15 @@ void BromEdit::replaceMesh()
Rsm::Mesh::Face* face = new Rsm::Mesh::Face();
const auto &f = m->mFaces[ii];

face->twoSide = false;
face->texIndex = 0;
face->twoSided = false;
face->texId = 0;
face->smoothGroup = 0;

assert(f.mNumIndices == 3);
for (int iii = 0; iii < f.mNumIndices; iii++)
{
face->vertices[iii] = f.mIndices[iii];
face->texvertices[iii] = f.mIndices[iii];
face->vertexIds[iii] = f.mIndices[iii];
face->texCoordIds[iii] = f.mIndices[iii];
}

mesh->faces.push_back(face);
Expand Down Expand Up @@ -719,7 +741,7 @@ void BromEdit::exportMesh()
{
for(int i = 0; i < 3; i++)
{
auto indices = std::pair<int, int>(f->vertices[i], f->texvertices[i]);
auto indices = std::pair<int, int>(f->vertexIds[i], f->texCoordIds[i]);
if (lookup.find(indices) == lookup.end())
{
lookup[indices] = vertices.size();
Expand Down Expand Up @@ -752,7 +774,7 @@ void BromEdit::exportMesh()

for (int ii = 0; ii < 3; ii++)
{
auto indices = std::pair<int, int>(f->vertices[ii], f->texvertices[ii]);
auto indices = std::pair<int, int>(f->vertexIds[ii], f->texCoordIds[ii]);
face.mIndices[ii] = lookup[indices];
}
}
Expand All @@ -765,6 +787,7 @@ void BromEdit::exportMesh()

void BromEdit::testStuff()
{
#ifdef FIXME
{
auto files = blib::util::FileSystem::getFileList([](const std::string &fileName)
{
Expand All @@ -782,4 +805,5 @@ void BromEdit::testStuff()
delete rsm;
}
}
#endif
}
14 changes: 12 additions & 2 deletions bromedit/BromEdit.h
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,8 @@
#include <blib/App.h>
#include <blib/MouseListener.h>
#include <BroLib/MapRenderer.h>
#include <BroLib/IRsm.h>
#include <BroLib/Rsm2.h>
#include <blib/json.hpp>

namespace blib {
Expand All @@ -28,7 +30,10 @@ class BromEdit : public blib::App, public blib::MouseListener
glm::vec2 rotation;
float distance = 0;

Rsm::Mesh* selectedMesh = nullptr;
union {
IRsm::IMesh* selectedMesh = nullptr;
Rsm::Mesh* selectedRsmMesh;
};
float timeSelect = 0;


Expand All @@ -49,7 +54,12 @@ class BromEdit : public blib::App, public blib::MouseListener

json config;

IRsm* model;
union
{
IRsm* model;
Rsm* model1;
Rsm2* model2;
};
RsmModelRenderInfo* renderInfo;

MapRenderer mapRenderer;
Expand Down
Loading

0 comments on commit df22bb2

Please sign in to comment.