mirror of
https://github.com/antopilo/Nuake.git
synced 2026-09-21 20:08:40 +03:00
Added sprite mesh
This commit is contained in:
@@ -258,27 +258,30 @@ namespace Nuake
|
||||
{
|
||||
auto [transform, sprite, visibility] = spriteView.get<TransformComponent, SpriteComponent, VisibilityComponent>(e);
|
||||
|
||||
if (!visibility.Visible)
|
||||
if (!visibility.Visible || !sprite.SpriteMesh)
|
||||
continue;
|
||||
|
||||
auto finalQuadTransform = transform.GetGlobalTransform();
|
||||
auto& finalQuadTransform = transform.GetGlobalTransform();
|
||||
if (sprite.Billboard)
|
||||
{
|
||||
Matrix4 finalMatrix;
|
||||
finalQuadTransform = glm::inverse(mView);
|
||||
|
||||
if (sprite.LockYRotation)
|
||||
{
|
||||
// This locks the pitch rotation on the billboard, useful for trees, lamps, etc.
|
||||
finalQuadTransform[1] = Vector4(0, 1, 0, 0);
|
||||
finalQuadTransform[2] = Vector4(finalQuadTransform[2][0], 0, finalQuadTransform[2][2], 0);
|
||||
finalQuadTransform = finalQuadTransform;
|
||||
//finalQuadTransform[1] = Vector4(0, 1, 0, 1);
|
||||
}
|
||||
|
||||
// Translation
|
||||
finalQuadTransform[3] = Vector4(transform.GetGlobalPosition(), 1.0f);
|
||||
|
||||
// Scale
|
||||
finalQuadTransform = glm::scale(finalQuadTransform, transform.GetGlobalScale());
|
||||
}
|
||||
|
||||
Renderer::SubmitMesh(Renderer::QuadMesh, finalQuadTransform, (uint32_t)e);
|
||||
Renderer::SubmitMesh(sprite.SpriteMesh, finalQuadTransform, (uint32_t)e);
|
||||
}
|
||||
Renderer::Flush(gBufferShader, false);
|
||||
}
|
||||
|
||||
@@ -1,6 +1,9 @@
|
||||
#include "SpriteComponent.h"
|
||||
|
||||
#include "src/Core/FileSystem.h"
|
||||
#include "src/Rendering/Textures/TextureManager.h"
|
||||
#include "src/Rendering/Textures/MaterialManager.h"
|
||||
#include "src/Rendering/Vertex.h"
|
||||
|
||||
namespace Nuake
|
||||
{
|
||||
@@ -14,8 +17,22 @@ namespace Nuake
|
||||
|
||||
bool SpriteComponent::LoadSprite()
|
||||
{
|
||||
const auto texture = TextureManager::Get()->GetTexture(SpritePath);
|
||||
Sprite = texture;
|
||||
std::vector<Vertex> quadVertices =
|
||||
{
|
||||
{ Vector3(-1.0f, -1.0f, 0.0f), Vector2(0, 0), Vector3(0, 0, -1) },
|
||||
{ Vector3(1.0f, 1.0f, 0.0f), Vector2(1.0f, 1.0f), Vector3(0, 0, -1) },
|
||||
{ Vector3(-1.0f, 1.0f, 0.0f), Vector2(0.0f, 1.0f), Vector3(0, 0, -1) },
|
||||
{ Vector3(1.0f, -1.0f, 0.0f), Vector2(1.0f, 0.0f), Vector3(0, 0, -1) },
|
||||
{ Vector3(-1.0f, -1.0f, 0.0f), Vector2(0.0f, 0.0f), Vector3(0, 0, -1) },
|
||||
{ Vector3(1.0f, 1.0f, 0.0f), Vector2(1.0f, 1.0f), Vector3(0, 0, -1) }
|
||||
};
|
||||
|
||||
SpriteMesh = CreateRef<Mesh>();
|
||||
SpriteMesh->AddSurface(quadVertices, { 0, 1, 2, 3, 4, 5 });
|
||||
|
||||
auto& material = MaterialManager::Get()->GetMaterial(FileSystem::Root + SpritePath);
|
||||
SpriteMesh->SetMaterial(material);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
#include "src/Core/Core.h"
|
||||
#include "src/Resource/Serializable.h"
|
||||
#include "src/Rendering/Textures/Texture.h"
|
||||
#include "src/Rendering/Mesh/Mesh.h"
|
||||
|
||||
namespace Nuake
|
||||
{
|
||||
@@ -11,7 +12,7 @@ namespace Nuake
|
||||
bool Billboard;
|
||||
bool LockYRotation;
|
||||
std::string SpritePath;
|
||||
Ref<Texture> Sprite;
|
||||
Ref<Mesh> SpriteMesh;
|
||||
|
||||
SpriteComponent();
|
||||
|
||||
|
||||
Reference in New Issue
Block a user