the whole game

This commit is contained in:
Kolyah35
2026-03-02 22:04:18 +03:00
parent 816e9060b4
commit f0617a5d22
2069 changed files with 581500 additions and 0 deletions

156
src/client/gui/GuiComponent.cpp Executable file
View File

@@ -0,0 +1,156 @@
#include "GuiComponent.h"
#include "../renderer/Tesselator.h"
#include "../renderer/gles.h"
#include "Font.h"
GuiComponent::GuiComponent()
: blitOffset(0)
{
}
GuiComponent::~GuiComponent()
{
}
void GuiComponent::drawCenteredString( Font* font, const std::string& str, int x, int y, int color )
{
font->drawShadow(str, (float)(x - font->width(str) / 2), (float)(y - font->height(str) / 2), color);
}
void GuiComponent::drawString( Font* font, const std::string& str, int x, int y, int color )
{
font->drawShadow(str, (float)x, (float)y /*- font->height(str)/2*/, color);
}
void GuiComponent::blit( int x, int y, int sx, int sy, int w, int h, int sw/*=0*/, int sh/*=0*/ )
{
if (!sw) sw = w;
if (!sh) sh = h;
float us = 1 / 256.0f;
float vs = 1 / 256.0f;
Tesselator& t = Tesselator::instance;
t.begin();
t.vertexUV((float)(x) , (float)(y + h), blitOffset, (float)(sx ) * us, (float)(sy + sh) * vs);
t.vertexUV((float)(x + w), (float)(y + h), blitOffset, (float)(sx + sw) * us, (float)(sy + sh) * vs);
t.vertexUV((float)(x + w), (float)(y) , blitOffset, (float)(sx + sw) * us, (float)(sy ) * vs);
t.vertexUV((float)(x) , (float)(y) , blitOffset, (float)(sx ) * us, (float)(sy ) * vs);
t.draw();
}
void GuiComponent::blit( float x, float y, int sx, int sy, float w, float h, int sw/*=0*/, int sh/*=0*/ )
{
if (!sw) sw = (int)w;
if (!sh) sh = (int)h;
float us = 1 / 256.0f;
float vs = 1 / 256.0f;
Tesselator& t = Tesselator::instance;
t.begin();
t.vertexUV(x , y + h, blitOffset, (float)(sx ) * us, (float)(sy + sh) * vs);
t.vertexUV(x + w, y + h, blitOffset, (float)(sx + sw) * us, (float)(sy + sh) * vs);
t.vertexUV(x + w, y , blitOffset, (float)(sx + sw) * us, (float)(sy ) * vs);
t.vertexUV(x , y , blitOffset, (float)(sx ) * us, (float)(sy ) * vs);
t.draw();
}
void GuiComponent::fill( int x0, int y0, int x1, int y1, int col ) {
fill((float)x0, (float)y0, (float)x1, (float)y1, col);
}
void GuiComponent::fill( float x0, float y0, float x1, float y1, int col )
{
//float a = ((col >> 24) & 0xff) / 255.0f;
//float r = ((col >> 16) & 0xff) / 255.0f;
//float g = ((col >> 8) & 0xff) / 255.0f;
//float b = ((col) & 0xff) / 255.0f;
//glColor4f2(r, g, b, a);
Tesselator& t = Tesselator::instance;
glEnable2(GL_BLEND);
glDisable2(GL_TEXTURE_2D);
glBlendFunc2(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
//LOGI("col: %f, %f, %f, %f\n", r, g, b, a);
t.begin();
const int color = (col&0xff00ff00) | ((col&0xff0000) >> 16) | ((col&0xff) << 16);
t.colorABGR(color);
t.vertex(x0, y1, 0);
t.vertex(x1, y1, 0);
t.vertex(x1, y0, 0);
t.vertex(x0, y0, 0);
t.draw();
glEnable2(GL_TEXTURE_2D);
glDisable2(GL_BLEND);
}
void GuiComponent::fillGradient( int x0, int y0, int x1, int y1, int col1, int col2 ) {
fillGradient((float)x0, (float)y0, (float)x1, (float)y1, col1, col2);
}
void GuiComponent::fillGradient( float x0, float y0, float x1, float y1, int col1, int col2 )
{
float a1 = ((col1 >> 24) & 0xff) / 255.0f;
float r1 = ((col1 >> 16) & 0xff) / 255.0f;
float g1 = ((col1 >> 8) & 0xff) / 255.0f;
float b1 = ((col1) & 0xff) / 255.0f;
float a2 = ((col2 >> 24) & 0xff) / 255.0f;
float r2 = ((col2 >> 16) & 0xff) / 255.0f;
float g2 = ((col2 >> 8) & 0xff) / 255.0f;
float b2 = ((col2) & 0xff) / 255.0f;
glDisable2(GL_TEXTURE_2D);
glEnable2(GL_BLEND);
glDisable2(GL_ALPHA_TEST);
glBlendFunc2(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
glShadeModel2(GL_SMOOTH);
Tesselator& t = Tesselator::instance;
t.begin();
t.color(r1, g1, b1, a1);
t.vertex(x1, y0, 0);
t.vertex(x0, y0, 0);
t.color(r2, g2, b2, a2);
t.vertex(x0, y1, 0);
t.vertex(x1, y1, 0);
t.draw();
glShadeModel2(GL_FLAT);
glDisable2(GL_BLEND);
glEnable2(GL_ALPHA_TEST);
glEnable2(GL_TEXTURE_2D);
}
void GuiComponent::fillHorizontalGradient( int x0, int y0, int x1, int y1, int col1, int col2 ) {
fillHorizontalGradient((float)x0, (float)y0, (float)x1, (float)y1, col1, col2);
}
void GuiComponent::fillHorizontalGradient( float x0, float y0, float x1, float y1, int col1, int col2 )
{
float a1 = ((col1 >> 24) & 0xff) / 255.0f;
float r1 = ((col1 >> 16) & 0xff) / 255.0f;
float g1 = ((col1 >> 8) & 0xff) / 255.0f;
float b1 = ((col1) & 0xff) / 255.0f;
float a2 = ((col2 >> 24) & 0xff) / 255.0f;
float r2 = ((col2 >> 16) & 0xff) / 255.0f;
float g2 = ((col2 >> 8) & 0xff) / 255.0f;
float b2 = ((col2) & 0xff) / 255.0f;
glDisable2(GL_TEXTURE_2D);
glEnable2(GL_BLEND);
glDisable2(GL_ALPHA_TEST);
glBlendFunc2(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
glShadeModel2(GL_SMOOTH);
Tesselator& t = Tesselator::instance;
t.begin();
t.color(r2, g2, b2, a2);
t.vertex(x1, y0, 0);
t.color(r1, g1, b1, a1);
t.vertex(x0, y0, 0);
t.color(r1, g1, b1, a1);
t.vertex(x0, y1, 0);
t.color(r2, g2, b2, a2);
t.vertex(x1, y1, 0);
t.draw();
glShadeModel2(GL_FLAT);
glDisable2(GL_BLEND);
glEnable2(GL_ALPHA_TEST);
glEnable2(GL_TEXTURE_2D);
}