Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .github/workflows/test_check.yml
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ on:
push:
branches: [master]
pull_request:
branches: [master]
types: [opened, ready_for_review, reopened]

jobs:
build-test:
Expand Down
4 changes: 3 additions & 1 deletion CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ add_executable(${CMAKE_PROJECT_NAME} ${SRC_FILES})
target_include_directories(${CMAKE_PROJECT_NAME} PRIVATE "${CMAKE_SOURCE_DIR}/include")
target_include_directories(${CMAKE_PROJECT_NAME} PRIVATE "${CMAKE_SOURCE_DIR}/include/dataStructures")
target_include_directories(${CMAKE_PROJECT_NAME} PRIVATE "${CMAKE_SOURCE_DIR}/include/characters")
target_include_directories(${CMAKE_PROJECT_NAME} PRIVATE "${CMAKE_SOURCE_DIR}/include/engine")

# Copia todos los archivos de la carpeta assets al directorio de ejecución
add_custom_command(TARGET ${CMAKE_PROJECT_NAME} POST_BUILD
Expand All @@ -45,7 +46,8 @@ if (ENABLE_TESTS)

target_include_directories(unit_tests PRIVATE "${CMAKE_SOURCE_DIR}/include")
target_include_directories(unit_tests PRIVATE "${CMAKE_SOURCE_DIR}/include/dataStructures")
target_include_directories(unit_tests PRIVATE "${CMAKE_SOURCE_DIR}/include/characters")
target_include_directories(unit_tests PRIVATE "${CMAKE_SOURCE_DIR}/include/characters")
target_include_directories(unit_tests PRIVATE "${CMAKE_SOURCE_DIR}/include/engine")

enable_testing()

Expand Down
17 changes: 13 additions & 4 deletions assets/system.conf
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,9 @@ enemyHealthMultiplier=1.3 ; Multiplicador de salud enemigo
enemyLootMultiplier=1.5 ; Multiplicador de botín enemigo
enemyExperienceMultiplier=1.5 ; Multiplicador de experiencia enemigo
luckyFactor=1.2 ; Factor de suerte para el jugador
minEnemy=1 ; Cantidad minima de enemigos
maxEnemy=4 ; Cantidad maxima de enemigos
surrenderChance=0.10 ; Chances de que se rinda un grupo de asaltantes

[resources]
successRate=0.50 ; Probabilidad de éxito al recolectar recursos (0.0 - 1.0)
Expand All @@ -24,9 +27,15 @@ badLuckChance=0.20 ; Probabilidad de mala suerte al recolectar
durationFactor=1.5 ; Factor de duración de la recolección

[shelter]
defenseFactor=1.5; Factor de defensa del refugio
attackFactor=1.2; Factor de ataque del refugio
visitantsRate=0.10; Tasa de visitantes al refugio
defenseFactor=1; Factor de defensa del refugio
attackFactor=1; Factor de ataque del refugio

# === FIN DEL ARCHIVO ===
[events]
eventsPerSecond=1; Cantidad de eventor por segundo
rateRefugee=0.10; Tasa de visitantes del tipo refugiado
rateBrother=0.05; Tasa de visitantes del tipo hermanos
rateEnemy=0.50; Tasa de visitantes del tipo enemigo
rateCommerce=0.70; Tasa de visitantes del tipo comerciantes
rateCaravane=0.02; Tasa de visitantes del tipo caravana

# === FIN DEL ARCHIVO ===
35 changes: 8 additions & 27 deletions include/characters/artefactoUnico.hpp
Original file line number Diff line number Diff line change
@@ -1,11 +1,13 @@
#ifndef ARTEFACTOUNICO_HPP
#define ARTEFACTOUNICO_HPP

#include "engineData.hpp"
#include "entidadGenerica.hpp"
#include <algorithm>
#include <iostream>
#include <string>

#include "engine/engineData.hpp"
#include "entidadGenerica.hpp"

/**
* @class ArtefactoUnico
* @brief Representa un artefacto único dentro del universo de Refugio 33.
Expand All @@ -16,7 +18,6 @@
class ArtefactoUnico : public EntidadGenerica
{
private:
std::string m_rarity; ///< Rareza del artefacto (por ejemplo: "Legendario", "Prototipo", "Desconocido")
EngineData::UniqueArtifactType
m_type; ///< Tipo de artefacto (por ejemplo: "Tecnología", "Arma", "Medicina", "Módulo de defensa")
double m_durability; ///< Nivel de durabilidad restante del artefacto (de 0.0 a 100.0)
Expand All @@ -25,16 +26,11 @@ class ArtefactoUnico : public EntidadGenerica
/**
* @brief Constructor del artefacto único
* @param name Nombre del artefacto
* @param rarity Rareza del artefacto
* @param type Tipo del artefacto
* @param durability Durabilidad inicial
*/
ArtefactoUnico(const std::string& name,
const std::string& rarity,
const EngineData::UniqueArtifactType type,
double durability)
explicit ArtefactoUnico(const std::string& name, const EngineData::UniqueArtifactType type, double durability)
: EntidadGenerica(name)
, m_rarity(rarity)
, m_type(type)
, m_durability(durability)
{
Expand All @@ -46,22 +42,8 @@ class ArtefactoUnico : public EntidadGenerica
void showInfo() const override
{
std::cout << "🧪 Artefacto: " << m_name << "\n"
<< " - Tipo : " << typeToString(m_type) << "\n"
<< " - Rareza : " << m_rarity << "\n"
<< " - Durabilidad: " << m_durability << "%" << std::endl;
}

std::string_view typeToString(EngineData::UniqueArtifactType type) const
{
switch (type)
{
case EngineData::UniqueArtifactType::WEAPON: return "Arma";
case EngineData::UniqueArtifactType::ARMOR: return "Armadura";
case EngineData::UniqueArtifactType::VEHICLE: return "Vehículo";
case EngineData::UniqueArtifactType::RELIC: return "Reliquia";
case EngineData::UniqueArtifactType::TECHNOLOGY: return "Tecnología";
default: return "Desconocido";
}
<< " - Tipo : " << EngineData::valueToString(m_type) << "\n"
<< " - Durabilidad: " << m_durability << "%" << '\n';
}

/**
Expand All @@ -71,8 +53,7 @@ class ArtefactoUnico : public EntidadGenerica
void use(double amount)
{
m_durability -= amount;
if (m_durability < 0.0)
m_durability = 0.0;
m_durability = std::max(m_durability, 0.0);
}

/**
Expand Down
61 changes: 25 additions & 36 deletions include/characters/asaltante.hpp
Original file line number Diff line number Diff line change
@@ -1,9 +1,10 @@
#ifndef RAIDER_HPP
#define RAIDER_HPP

#include "entidadGenerica.hpp"
#include <iostream>
#include <random>

#include "entidadGenerica.hpp"
#include "randomEventGenerator.hpp"

/**
* @class Raider
Expand All @@ -15,22 +16,28 @@
class Raider : public EntidadGenerica
{
private:
int m_integrantes; ///< Cantidad de miembros en la banda
int m_poderFuego; ///< Nivel de ataque general
bool m_rendidos; ///< Indica si se han rendido
bool m_seUnieron; ///< Indica si fueron aceptados en el refugio
int m_integrantes; ///< Cantidad de miembros en la banda
double m_fireFactor; ///< Nivel de ataque general
bool m_rendidos {false}; ///< Indica si se han rendido
bool m_seUnieron {false}; ///< Indica si fueron aceptados en el refugio
double m_rendicionChance; ///< Probabilidad de rendición
RandomEventGenerator* m_randomgenerator {nullptr}; ///< Generador de eventos aleatorios

public:
/**
* @brief Constructor
* @param nombre Nombre del grupo raider
*/
explicit Raider(const std::string& nombre)
explicit Raider(const std::string& nombre,
int integrantes,
RandomEventGenerator* randomGenerator,
double poderFuego,
double rendicionChance)
: EntidadGenerica(nombre)
, m_integrantes(generarCantidad())
, m_poderFuego(generarPoder())
, m_rendidos(false)
, m_seUnieron(false)
, m_integrantes(integrantes)
, m_fireFactor(poderFuego)
, m_rendicionChance(rendicionChance)
, m_randomgenerator(randomGenerator) // 30% de posibilidad de rendirse
{
}

Expand All @@ -41,7 +48,7 @@ class Raider : public EntidadGenerica
{
std::cout << "🔫 RAIDERS: " << m_name << "\n"
<< " - Miembros: " << m_integrantes << "\n"
<< " - Poder de fuego: " << m_poderFuego << "\n"
<< " - Factor de fuego: " << m_fireFactor << "\n"
<< " - ¿Rendidos?: " << (m_rendidos ? "Sí" : "No") << "\n"
<< " - ¿Se unieron al refugio?: " << (m_seUnieron ? "Sí" : "No") << "\n";
}
Expand All @@ -51,17 +58,14 @@ class Raider : public EntidadGenerica
*/
void intentarRendicion()
{
static std::mt19937 rng(std::random_device {}());
std::bernoulli_distribution chance(0.3); // 30% de posibilidad de rendirse

if (chance(rng))
if (m_randomgenerator->chance(m_rendicionChance))
{
m_rendidos = true;
std::cout << "💬 " << m_name << " >>> ¡Nos rendimos! ¡Déjennos vivir!" << std::endl;
std::cout << "💬 " << m_name << " >>> ¡Nos rendimos! ¡Déjennos vivir!" << '\n';
}
else
{
std::cout << "💬 " << m_name << " >>> ¡Nunca nos rendiremos!" << std::endl;
std::cout << "💬 " << m_name << " >>> ¡Nunca nos rendiremos!" << '\n';
}
}

Expand All @@ -73,11 +77,11 @@ class Raider : public EntidadGenerica
if (m_rendidos)
{
m_seUnieron = true;
std::cout << "✅ Los raiders se han unido al refugio. Serán vigilados de cerca..." << std::endl;
std::cout << "✅ Los raiders se han unido al refugio. Serán vigilados de cerca..." << '\n';
return true;
}

std::cout << "❌ No se puede aceptar a un grupo hostil sin rendirse." << std::endl;
std::cout << "❌ No se puede aceptar a un grupo hostil sin rendirse." << '\n';
return false;
}

Expand All @@ -86,7 +90,7 @@ class Raider : public EntidadGenerica
*/
int poderTotal() const
{
return m_integrantes * m_poderFuego;
return static_cast<int>(m_integrantes * m_fireFactor);
}

bool estanRendidos() const
Expand All @@ -97,21 +101,6 @@ class Raider : public EntidadGenerica
{
return m_seUnieron;
}

private:
int generarCantidad() const
{
static std::mt19937 rng(std::random_device {}());
std::uniform_int_distribution<int> dist(10, 15);
return dist(rng);
}

int generarPoder() const
{
static std::mt19937 rng(std::random_device {}());
std::uniform_int_distribution<int> dist(15, 30);
return dist(rng);
}
};

#endif // RAIDER_HPP
95 changes: 0 additions & 95 deletions include/characters/caravan.hpp

This file was deleted.

Loading