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:
parent
049717c780
commit
fe6dcbc990
src/main/java/chylex/hee/game
@ -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()
|
||||
}
|
||||
|
@ -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
|
||||
},
|
||||
|
Loading…
Reference in New Issue
Block a user