SDL_Rect Ptrs and reference fixes.
This commit is contained in:
@@ -8,7 +8,7 @@
|
||||
#include <nlohmann/json.hpp>
|
||||
using json = nlohmann::ordered_json;
|
||||
|
||||
SDL_Rect UE::Texture::GetTextureRect(int i)
|
||||
SDL_Rect& UE::Texture::GetTextureRect(int i)
|
||||
{
|
||||
try
|
||||
{
|
||||
@@ -64,6 +64,7 @@ void UE::Texture::InitTexture()
|
||||
|
||||
//Cargamos los Rects.
|
||||
json textureRects = jread["TextureRects"];
|
||||
_txRects.reserve(textureRects.size() + 1);
|
||||
|
||||
//Por defecto, el Rect 0 es la textura completa.
|
||||
AddRect(SDL_Rect{ 0, 0, txSizeX, txSizeY });
|
||||
@@ -117,7 +118,7 @@ int UE::Texture::CreateTexture()
|
||||
return 0;
|
||||
}
|
||||
|
||||
void UE::Texture::AddRect(SDL_Rect& newRect)
|
||||
void UE::Texture::AddRect(const SDL_Rect& newRect)
|
||||
{
|
||||
_txRects.push_back(newRect);
|
||||
}
|
||||
|
||||
@@ -71,7 +71,7 @@ namespace UE
|
||||
* @param i : index del rect. (El index 0 es la textura completa).
|
||||
* @return El SDL_Rect solicitado (o el por defecto si no está disponible).
|
||||
*/
|
||||
SDL_Rect GetTextureRect(int i);
|
||||
SDL_Rect& GetTextureRect(int i);
|
||||
|
||||
|
||||
////////////////////////////////////////////////////////
|
||||
@@ -92,7 +92,7 @@ namespace UE
|
||||
*
|
||||
* @param newRect: New Rect to add. Lo enviamos como referencia para ahorrar copias. IDK if is better...
|
||||
*/
|
||||
void AddRect(SDL_Rect& newRect);
|
||||
void AddRect(const SDL_Rect& newRect);
|
||||
|
||||
|
||||
////////////////////////////////////////////////////////
|
||||
|
||||
@@ -37,13 +37,15 @@ namespace UE
|
||||
|
||||
void Sprite::Draw(Renderer* renderer)
|
||||
{
|
||||
//Comprobar si es visible.
|
||||
if (!renderer->IsObjectVisible(&GetTransformRect()))
|
||||
SDL_Rect transformRect = GetTransformRect();
|
||||
|
||||
//Comprobar si es visible. Esta comprobación ya la realiza el renderer, no la hagamos dos veces.
|
||||
/*if (!renderer->IsObjectVisible(transformRect))
|
||||
{
|
||||
return;
|
||||
}
|
||||
}*/
|
||||
|
||||
renderer->DrawTextureOnWorld(_tx, _txRectID, GetTransformRect());
|
||||
renderer->DrawTextureOnWorld(_tx, _txRectID, transformRect);
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -49,7 +49,8 @@ void UE::TextBox::Draw(Renderer* renderer)
|
||||
//SDL_Texture* tx = _textTexture.GetTexture();
|
||||
|
||||
//renderer->QueueDrawCall(_renderLayer, dest, _textTexture);
|
||||
renderer->DrawTextureOnScreen(_tx, 0, GetTransformRect());
|
||||
SDL_Rect transformRect = GetTransformRect();
|
||||
renderer->DrawTextureOnScreen(_tx, 0, transformRect);
|
||||
|
||||
//Actualizamos en cada frame el ptr a la textura que tiene que usar el drawable.
|
||||
//no vaya a ser que se invalide por algo.
|
||||
|
||||
@@ -57,6 +57,8 @@ namespace UE
|
||||
worldLayers.push_back(std::vector<Drawable*>());
|
||||
}
|
||||
|
||||
//All right!
|
||||
return 0;
|
||||
}
|
||||
|
||||
void Renderer::CleanRenderer()
|
||||
@@ -185,12 +187,12 @@ namespace UE
|
||||
}
|
||||
|
||||
|
||||
void Renderer::DrawTextureOnWorld(UE::Texture* tx, int txRectID, SDL_Rect worldRect)
|
||||
void Renderer::DrawTextureOnWorld(UE::Texture* tx, int txRectID, SDL_Rect& worldRect)
|
||||
{
|
||||
//TODO: Añadir seguridad.
|
||||
|
||||
//Si el objeto no es visible, no lo renderizamos.
|
||||
if (!IsObjectVisible(&worldRect))
|
||||
if (!IsObjectVisible(worldRect))
|
||||
{
|
||||
return;
|
||||
}
|
||||
@@ -204,7 +206,7 @@ namespace UE
|
||||
}
|
||||
|
||||
|
||||
void Renderer::DrawTextureOnScreen(UE::Texture* tx, int txRectID, SDL_Rect screenRect)
|
||||
void Renderer::DrawTextureOnScreen(UE::Texture* tx, int txRectID, SDL_Rect& screenRect)
|
||||
{
|
||||
SDL_RenderCopy(main_Renderer, tx->GetTexture(), &tx->GetTextureRect(txRectID), &screenRect);
|
||||
}
|
||||
@@ -241,9 +243,9 @@ namespace UE
|
||||
SetCamera(&defaultCam);
|
||||
}
|
||||
|
||||
bool Renderer::IsObjectVisible(SDL_Rect* objectRect)
|
||||
bool Renderer::IsObjectVisible(SDL_Rect& objectRect)
|
||||
{
|
||||
return SDL_HasIntersection(objectRect, &activeCamRect);
|
||||
return SDL_HasIntersection(&objectRect, &activeCamRect);
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -96,10 +96,10 @@ namespace UE
|
||||
* Renderizar una textura dado su rect en WorldCoords.
|
||||
* Se ha de utilizar en las implementaciones del método Draw de la clase Drawable.
|
||||
*/
|
||||
void DrawTextureOnWorld(UE::Texture* tx, int txRectID, SDL_Rect worldRect);
|
||||
void DrawTextureOnWorld(UE::Texture* tx, int txRectID, SDL_Rect& worldRect);
|
||||
|
||||
|
||||
void DrawTextureOnScreen(UE::Texture* tx, int txRectID, SDL_Rect screenRect);
|
||||
void DrawTextureOnScreen(UE::Texture* tx, int txRectID, SDL_Rect& screenRect);
|
||||
|
||||
|
||||
///////////////////////////////////////////////////////
|
||||
@@ -155,7 +155,7 @@ namespace UE
|
||||
/*
|
||||
* Check if an object is currently visible on Screen.
|
||||
*/
|
||||
bool IsObjectVisible(SDL_Rect* objectRect);
|
||||
bool IsObjectVisible(SDL_Rect& objectRect);
|
||||
|
||||
|
||||
////////////////////////////////////////////////////////
|
||||
|
||||
Reference in New Issue
Block a user