1
0
mirror of https://github.com/chylex/Hardcore-Ender-Expansion-2.git synced 2025-04-14 12:15:44 +02:00

Implement Energy Cluster health-based leaking & rebalance leak values

This commit is contained in:
chylex 2019-01-17 23:00:18 +01:00
parent 049717c780
commit fe6dcbc990
2 changed files with 10 additions and 5 deletions
src/main/java/chylex/hee/game

View File

@ -49,6 +49,7 @@ class TileEntityEnergyCluster : TileEntityBase(), ITickable{
}
enum class LeakType(val regenDelayTicks: Int, val corruptedEnergyDistance: Int){
HEALTH(regenDelayTicks = 25, corruptedEnergyDistance = 4),
PROXIMITY(regenDelayTicks = 15, corruptedEnergyDistance = 4),
INSTABILITY(regenDelayTicks = 200, corruptedEnergyDistance = 12),
}
@ -76,7 +77,7 @@ class TileEntityEnergyCluster : TileEntityBase(), ITickable{
get() = minOf(energyBaseCapacity * currentHealth.regenCapacityMp, MAX_REGEN_CAPACITY)
val baseLeakSize: IEnergyQuantity
get() = Floating(world.rand.nextFloat(0.5F, 1F) * ((1F + energyBaseCapacity.floating.value).pow(0.12F) + energyLevel.floating.value.pow(0.05F) - 2F))
get() = Floating(world.rand.nextFloat(0.4F, 0.8F) * ((1F + energyBaseCapacity.floating.value).pow(0.09F) + energyLevel.floating.value.pow(0.05F) - 2.1F))
val affectedByProximity: Boolean
get() = proximityHandler.affectedByProximity
@ -119,7 +120,7 @@ class TileEntityEnergyCluster : TileEntityBase(), ITickable{
fun leakEnergy(quantity: IEnergyQuantity, type: LeakType){
val finalQuantity = minOf(energyLevel, quantity)
if (finalQuantity <= Units(0)){
if (finalQuantity < Units(1)){
return
}
@ -218,6 +219,10 @@ class TileEntityEnergyCluster : TileEntityBase(), ITickable{
ticksToRegen = (20F / currentHealth.regenSpeedMp).ceilToInt()
}
if (currentHealth.getLeakChance(this).let { it > 0F && world.rand.nextFloat() < it }){
leakEnergy(baseLeakSize, LeakType.HEALTH)
}
if (currentHealth.affectedByProximity){
proximityHandler.tick()
}

View File

@ -26,8 +26,8 @@ interface IClusterHealth{
HEALTHY ("hee.energy.health.healthy", HCL(120.0, 80F, 74F).toInt(), regenAmountMp = 1.0F, regenSpeedMp = 1.5F, regenCapacityMp = 1.0F, canDeteriorate = true),
WEAKENED("hee.energy.health.weakened", HCL( 75.0, 80F, 74F).toInt(), regenAmountMp = 0.9F, regenSpeedMp = 1.2F, regenCapacityMp = 1.0F, canDeteriorate = true),
TIRED ("hee.energy.health.tired", HCL( 45.0, 85F, 70F).toInt(), regenAmountMp = 0.6F, regenSpeedMp = 0.8F, regenCapacityMp = 0.9F, canDeteriorate = true),
DAMAGED ("hee.energy.health.damaged", HCL( 18.0, 90F, 66F).toInt(), regenAmountMp = 0.4F, regenSpeedMp = 0.5F, regenCapacityMp = 0.75F, leakChance = 0.7F / 100F),
UNSTABLE("hee.energy.health.unstable", HCL( 0.0, 0F, 70F).toInt(), regenAmountMp = 0.15F, regenSpeedMp = 0.2F, regenCapacityMp = 0.6F, leakChance = 1.5F / 100F);
DAMAGED ("hee.energy.health.damaged", HCL( 18.0, 90F, 66F).toInt(), regenAmountMp = 0.4F, regenSpeedMp = 0.5F, regenCapacityMp = 0.75F, leakChance = 0.5F / 100F),
UNSTABLE("hee.energy.health.unstable", HCL( 0.0, 0F, 70F).toInt(), regenAmountMp = 0.15F, regenSpeedMp = 0.2F, regenCapacityMp = 0.6F, leakChance = 1.2F / 100F);
override val affectedByProximity: Boolean = canDeteriorate
@ -46,7 +46,7 @@ interface IClusterHealth{
POWERED("hee.energy.health.powered", HCL(210.0, 80F, 66F).toInt(), regenAmountMp = 1.0F, regenSpeedMp = 2.0F, regenCapacityMp = 1.25F){
override fun getLeakChance(cluster: TileEntityEnergyCluster): Float =
if (cluster.energyLevel > cluster.energyBaseCapacity)
(0.5F * (20F * ((cluster.energyLevel.floating.value / cluster.energyBaseCapacity.floating.value) - 1F)).pow(2)) / 100F
(0.1F * (10F * ((cluster.energyLevel.floating.value / cluster.energyBaseCapacity.floating.value) - 1F)).pow(2)) / 100F
else
0F
},