92 lines
2.4 KiB
C++
92 lines
2.4 KiB
C++
/*
|
|
* UIText.cpp
|
|
*
|
|
* Created on: May 21, 2020
|
|
* Author: ayoungblood
|
|
*/
|
|
|
|
#include "UIText.h"
|
|
#include "../game/Game.hpp"
|
|
#include "../ecs/ECS.h"
|
|
#include "../ecs/Components.h"
|
|
#include "string.h"
|
|
#include <iostream>
|
|
#include <stdio.h>
|
|
#include <vector>
|
|
|
|
extern Manager manager;
|
|
|
|
UIText::UIText(std::string text, std::string texId, int x, int y, int letterW, int letterH, int lScale, std::string tag, Game::groupLabels group)
|
|
{
|
|
inputText = text;
|
|
textureID = texId;
|
|
posX = x;
|
|
posY = y;
|
|
letterWidth = letterW;
|
|
letterHeight = letterH;
|
|
scale = lScale;
|
|
// gameGroup = Game::groupLabels::groupUI_Layer3;
|
|
auto& uiLetters(manager.addEntity());
|
|
uiLetters.setTag(tag);
|
|
uiLetters.addGroup(group);
|
|
}
|
|
|
|
UIText::~UIText()
|
|
{
|
|
}
|
|
|
|
void UIText::ParseString(std::string inputText, int x, int y, int letterScale, std::string tag, Game::groupLabels group)
|
|
{
|
|
// gameGroup = group;
|
|
//Parse input text into an array of char
|
|
int posX = x;
|
|
int posY = y;
|
|
int i = 0;
|
|
char current = inputText[i];
|
|
int charsNumber = inputText.length();
|
|
// printf("Counting string \'%s\': \n",inputText.c_str());
|
|
// printf("%d\n",charsNumber);
|
|
|
|
do
|
|
{
|
|
++i;
|
|
if (strcmp(¤t,"\n")!=0)
|
|
{
|
|
posX += letterWidth;
|
|
}
|
|
else
|
|
{
|
|
posX = x;
|
|
posY += letterHeight;
|
|
}
|
|
UIText::AddLetter(posX, posY, current, tag, letterScale, group);
|
|
current = inputText[i];
|
|
} while ((strcmp(¤t,"\0"))!=0);
|
|
}
|
|
|
|
|
|
void UIText::AddLetter(int xpos, int ypos, char crnt, std::string tag, int lttrScale, Game::groupLabels groupLabel)
|
|
{
|
|
// =======THIS NEEDS TO BE REFACTORED TO NOT USE INDIVIDUAL ENTITIES FOR EACH LETTER============
|
|
// auto& letter(manager.addEntity());
|
|
// letter.addComponent<TransformComponent>(xpos*lttrScale, ypos*lttrScale, letterWidth, letterHeight, 1);
|
|
// letter.addComponent<SpriteComponent>("font", SpriteComponent::spriteText, crnt, letterWidth, letterHeight, lttrScale);
|
|
// letter.setTag(tag);
|
|
// letter.addGroup(groupLabel);
|
|
SDL_Texture* letterTexture;
|
|
letterTexture = Game::assets->GetTexture(textureID);
|
|
SDL_Rect srcRect,destRect;
|
|
srcRect.x = ((crnt-ASCII_START_IDX) % ASCII_ROW_COUNT)*letterWidth;
|
|
srcRect.y = ((crnt-ASCII_START_IDX)/ASCII_ROW_COUNT)*letterHeight;
|
|
srcRect.w = letterWidth;
|
|
srcRect.h = letterHeight;
|
|
destRect.x = xpos;
|
|
destRect.y = ypos;
|
|
destRect.w = letterWidth*scale;
|
|
destRect.h = letterHeight*scale;
|
|
|
|
TextureManager::Draw(letterTexture,srcRect,destRect,SDL_FLIP_NONE);
|
|
}
|
|
|
|
|