Refactor farm building speed to builder unit action_speeds and enable infinite charges

This commit is contained in:
bart
2026-11-08 17:01:26 +01:00
parent 55e4276025
commit 17901ce25c
10 changed files with 847 additions and 121 deletions
+27
View File
@@ -2,6 +2,7 @@
#include "matrix2d.h"
#include <math.h>
#include "qscenerenderer.h"
#include "gamemanager.h"
#include <QVector3D>
QImage * Tile::m_image_grass = NULL;
QOpenGLTexture * Tile::m_texture_grass = NULL;
@@ -27,6 +28,8 @@ QOpenGLTexture * Tile::m_texture_redrock = NULL;
QImage * Tile::m_image_redrock = NULL;
QOpenGLTexture * Tile::m_texture_forest = NULL;
QImage * Tile::m_image_forest = NULL;
QOpenGLTexture * Tile::m_texture_farm = NULL;
QImage * Tile::m_image_farm = NULL;
Vertex * Tile::m_vertices= NULL;
int Tile::m_numVertex;
@@ -147,6 +150,8 @@ void Tile::init(QSceneRenderer* s, int x, int y)
Tile::m_image_redrock = new QImage("/home/bart/project/tiletest/images/Texturelabs_RedRock_seamless.jpg");
if (Tile::m_image_forest == NULL)
Tile::m_image_forest = new QImage("/home/bart/project/tiletest/images/Texturelabs_Forest_seamless.jpg");
if (Tile::m_image_farm == NULL)
Tile::m_image_farm = new QImage("/home/bart/project/tiletest/images/farm.jpeg");
if (Tile::m_texture_grass == NULL) {
m_texture_grass = new QOpenGLTexture(*m_image_grass);
@@ -232,6 +237,13 @@ void Tile::init(QSceneRenderer* s, int x, int y)
m_texture_forest->setMagnificationFilter(QOpenGLTexture::Linear);
m_texture_forest->generateMipMaps();
}
if (Tile::m_texture_farm == NULL && Tile::m_image_farm != NULL) {
m_texture_farm = new QOpenGLTexture(*m_image_farm);
m_texture_farm->setWrapMode(QOpenGLTexture::Repeat);
m_texture_farm->setMinificationFilter(QOpenGLTexture::LinearMipMapLinear);
m_texture_farm->setMagnificationFilter(QOpenGLTexture::Linear);
m_texture_farm->generateMipMaps();
}
if (first){
m_program = new QOpenGLShaderProgram();
@@ -302,6 +314,9 @@ void Tile::paint(QMatrix4x4 p, QVector3D& cameraPosition,QVector3D& cameraUpDire
m_texture_redsand->bind(9);
m_texture_redrock->bind(10);
m_texture_forest->bind(11);
if (m_texture_farm) {
m_texture_farm->bind(12);
}
// Render using our shader
m_program->bind();
@@ -334,6 +349,18 @@ void Tile::paint(QMatrix4x4 p, QVector3D& cameraPosition,QVector3D& cameraUpDire
m_program->setUniformValue("texRedSand", 9);
m_program->setUniformValue("texRedRock", 10);
m_program->setUniformValue("texForest", 11);
m_program->setUniformValue("texFarm", 12);
const TileImprovement *imp = GameManager::instance().getImprovementAt(m_x, m_y);
bool isFarm = (imp != nullptr && imp->improvementId == "farm");
m_program->setUniformValue("isFarm", isFarm ? 1 : 0);
const ImprovementConfig *farmCfg = TerrainYieldManager::instance().getImprovementConfig("farm");
float fScale = farmCfg ? farmCfg->textureScale : 0.6f;
int mappingMode = (farmCfg && farmCfg->textureMapping == "hex") ? 1 : 0;
m_program->setUniformValue("farmTextureScale", fScale);
m_program->setUniformValue("farmMappingMode", mappingMode);
m_program->setUniformValue("time", time);
m_program->setUniformValue("riverMask", (int)m_riverMask);
m_object.bind();