Barely progress on tilesets

This commit is contained in:
2022-12-04 21:25:13 -08:00
parent b5d7c927c5
commit bcdb0742f3
23 changed files with 330 additions and 23 deletions

View File

@ -35,6 +35,11 @@ void SceneItem::init() {
bool_t waiting = false;
auto it2 = deps.begin();
while(it2 != deps.end()) {
if(*it2 == nullptr) {
continue;
++it2;
}
// Has the dep not yet inited?
if(!(*it2)->hasInitialized) {
waiting = true;

View File

@ -5,7 +5,9 @@
#pragma once
#include "scene/components/display/Camera.hpp"
#include "scene/components/display/MeshHost.hpp"
#include "scene/components/display/MeshRenderer.hpp"
#include "scene/components/display/Material.hpp"
#include "scene/components/display/TiledSprite.hpp"
#include "scene/components/ui/UICanvas.hpp"

View File

@ -8,5 +8,7 @@ target_sources(${DAWN_TARGET_NAME}
PRIVATE
Camera.cpp
Material.cpp
MeshHost.cpp
MeshRenderer.cpp
TiledSprite.cpp
)

View File

@ -0,0 +1,16 @@
// Copyright (c) 2022 Dominic Masters
//
// This software is released under the MIT License.
// https://opensource.org/licenses/MIT
#include "MeshHost.hpp"
using namespace Dawn;
MeshHost::MeshHost(SceneItem *item) :
mesh(),
SceneItemComponent(item)
{
}

View File

@ -0,0 +1,17 @@
// Copyright (c) 2022 Dominic Masters
//
// This software is released under the MIT License.
// https://opensource.org/licenses/MIT
#pragma once
#include "scene/SceneItemComponent.hpp"
#include "display/mesh/Mesh.hpp"
namespace Dawn {
class MeshHost : public SceneItemComponent {
public:
Mesh mesh;
MeshHost(SceneItem *item);
};
}

View File

@ -4,8 +4,25 @@
// https://opensource.org/licenses/MIT
#include "MeshRenderer.hpp"
#include "MeshHost.hpp"
#include "scene/SceneItem.hpp"
using namespace Dawn;
MeshRenderer::MeshRenderer(SceneItem *item) : SceneItemComponent(item) {
}
std::vector<SceneItemComponent*> MeshRenderer::getDependencies() {
return std::vector<SceneItemComponent*>{
this->item->getComponent<MeshHost>()
};
}
void MeshRenderer::onStart() {
SceneItemComponent::onStart();
if(mesh == nullptr) {
auto host = this->item->getComponent<MeshHost>();
if(host != nullptr) this->mesh = &host->mesh;
}
}

View File

@ -18,5 +18,8 @@ namespace Dawn {
* @param item Scene Item this mesh renderer belongs to.
*/
MeshRenderer(SceneItem *item);
std::vector<SceneItemComponent*> getDependencies() override;
void onStart() override;
};
}

View File

@ -0,0 +1,35 @@
// Copyright (c) 2022 Dominic Masters
//
// This software is released under the MIT License.
// https://opensource.org/licenses/MIT
#include "TiledSprite.hpp"
#include "scene/SceneItem.hpp"
using namespace Dawn;
TiledSprite::TiledSprite(SceneItem *item) : SceneItemComponent(item) {
}
std::vector<SceneItemComponent*> TiledSprite::getDependencies() {
this->renderer = this->item->getComponent<MeshRenderer>();
this->host = this->item->getComponent<MeshHost>();
return std::vector<SceneItemComponent*>{
this->renderer,
this->host
};
}
void TiledSprite::onStart() {
SceneItemComponent::onStart();
assertNotNull(this->host);
QuadMesh::initQuadMesh(&this->host->mesh,
glm::vec2(0, 0), glm::vec2(0, 0),
glm::vec2(1, 1), glm::vec2(0.125f, 0.125f),
0
);
}

View File

@ -0,0 +1,25 @@
// Copyright (c) 2022 Dominic Masters
//
// This software is released under the MIT License.
// https://opensource.org/licenses/MIT
#pragma once
#include "scene/SceneItemComponent.hpp"
#include "scene/components/display/MeshRenderer.hpp"
#include "scene/components/display/MeshHost.hpp"
#include "display/mesh/QuadMesh.hpp"
#include "display/Tileset.hpp"
namespace Dawn {
class TiledSprite : public SceneItemComponent {
protected:
MeshRenderer *renderer;
MeshHost *host;
public:
TiledSprite(SceneItem *item);
std::vector<SceneItemComponent*> getDependencies() override;
void onStart() override;
};
}