diff --git a/source/Base/Resources.h b/source/Base/Resources.h index b13e4f14d..a56ed1635 100644 --- a/source/Base/Resources.h +++ b/source/Base/Resources.h @@ -2,7 +2,7 @@ namespace Const { - std::string const ProgramVersion = "4.0.0.beta.17"; + std::string const ProgramVersion = "4.0.0.beta.18"; std::string const BasePath = "resources/"; diff --git a/source/EngineGpuKernels/AttackerProcessor.cuh b/source/EngineGpuKernels/AttackerProcessor.cuh index f487c3630..4878103a3 100644 --- a/source/EngineGpuKernels/AttackerProcessor.cuh +++ b/source/EngineGpuKernels/AttackerProcessor.cuh @@ -64,9 +64,10 @@ __device__ __inline__ void AttackerProcessor::processCell(SimulationData& data, if (energyToTransfer < 0) { return; } - //if (otherCell->genomeSize > cell->genomeSize) { - // return; - //} + if (otherCell->genomeSize > cell->genomeSize) { + auto genomeSizeBonus = cudaSimulationParameters.cellFunctionAttackerGenomeSizeBonus[cell->color]; + energyToTransfer /= (1.0f + genomeSizeBonus) * static_cast(otherCell->genomeSize - cell->genomeSize); + } auto velocityPenalty = Math::length(cell->vel) * 20 * cudaSimulationParameters.cellFunctionAttackerVelocityPenalty[cell->color] + 1.0f; energyToTransfer /= velocityPenalty; diff --git a/source/EngineInterface/AuxiliaryDataParser.cpp b/source/EngineInterface/AuxiliaryDataParser.cpp index 7b0165243..280894147 100644 --- a/source/EngineInterface/AuxiliaryDataParser.cpp +++ b/source/EngineInterface/AuxiliaryDataParser.cpp @@ -466,6 +466,12 @@ namespace defaultParameters.baseValues.cellFunctionAttackerConnectionsMismatchPenalty, "simulation parameters.cell.function.attacker.connections mismatch penalty", parserTask); + encodeDecodeProperty( + tree, + parameters.cellFunctionAttackerGenomeSizeBonus, + defaultParameters.cellFunctionAttackerGenomeSizeBonus, + "simulation parameters.cell.function.attacker.genome size bonus", + parserTask); encodeDecodeProperty( tree, diff --git a/source/EngineInterface/SimulationParameters.h b/source/EngineInterface/SimulationParameters.h index baaed9da3..0ef828eeb 100644 --- a/source/EngineInterface/SimulationParameters.h +++ b/source/EngineInterface/SimulationParameters.h @@ -88,6 +88,7 @@ struct SimulationParameters ColorVector cellFunctionAttackerEnergyDistributionValue = {10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f}; ColorVector cellFunctionAttackerColorInhomogeneityFactor = {1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f}; ColorVector cellFunctionAttackerVelocityPenalty = {0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f}; + ColorVector cellFunctionAttackerGenomeSizeBonus = {0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f}; float cellFunctionAttackerActivityThreshold = 0.1f; ColorVector cellFunctionDefenderAgainstAttackerStrength = {1.5f, 1.5f, 1.5f, 1.5f, 1.5f, 1.5f, 1.5f}; @@ -133,6 +134,9 @@ struct SimulationParameters } for (int i = 0; i < MAX_COLORS; ++i) { + if (cellFunctionAttackerGenomeSizeBonus[i] != other.cellFunctionAttackerGenomeSizeBonus[i]) { + return false; + } if (cellFunctionConstructorPumpEnergyFactor[i] != other.cellFunctionConstructorPumpEnergyFactor[i]) { return false; } diff --git a/source/Gui/SimulationParametersWindow.cpp b/source/Gui/SimulationParametersWindow.cpp index 1ae32020d..2fd1989c3 100644 --- a/source/Gui/SimulationParametersWindow.cpp +++ b/source/Gui/SimulationParametersWindow.cpp @@ -780,6 +780,27 @@ void _SimulationParametersWindow::processBase( .max(0.1f) .defaultValue(origSimParameters.cellFunctionAttackerStrength), simParameters.cellFunctionAttackerStrength); + AlienImGui::SliderFloat( + AlienImGui::SliderFloatParameters() + .name("Attack radius") + .textWidth(RightColumnWidth) + .colorDependence(true) + .min(0) + .max(2.5f) + .defaultValue(origSimParameters.cellFunctionAttackerRadius) + .tooltip("The maximum distance over which an attacker cell can attack another cell."), + simParameters.cellFunctionAttackerRadius); + AlienImGui::SliderFloat( + AlienImGui::SliderFloatParameters() + .name("Genome size bonus") + .textWidth(RightColumnWidth) + .colorDependence(true) + .min(0) + .max(20.0f) + .infinity(true) + .defaultValue(origSimParameters.cellFunctionAttackerGenomeSizeBonus) + .tooltip("The larger this parameter is, the less energy can be gained by attacking creatures with larger genomes."), + simParameters.cellFunctionAttackerGenomeSizeBonus); AlienImGui::SliderFloat( AlienImGui::SliderFloatParameters() .name("Velocity penalty") @@ -812,16 +833,6 @@ void _SimulationParametersWindow::processBase( .defaultValue(origSimParameters.baseValues.cellFunctionAttackerConnectionsMismatchPenalty) .tooltip("The larger this parameter is, the more difficult it is to attack cells that contain more connections."), simParameters.baseValues.cellFunctionAttackerConnectionsMismatchPenalty); - AlienImGui::SliderFloat( - AlienImGui::SliderFloatParameters() - .name("Attack radius") - .textWidth(RightColumnWidth) - .colorDependence(true) - .min(0) - .max(2.5f) - .defaultValue(origSimParameters.cellFunctionAttackerRadius) - .tooltip("The maximum distance over which an attacker cell can attack another cell."), - simParameters.cellFunctionAttackerRadius); AlienImGui::SliderFloat( AlienImGui::SliderFloatParameters() .name("Energy distribution radius")