Skip to content

Commit f73ce31

Browse files
authored
Add option to set fade animation timing for Tracer (#388)
* Add option to set fade animation timing for Tracer was unnecessary complicated lol * Better slider segment size * Allowing insta fade
1 parent 1a667b1 commit f73ce31

File tree

1 file changed

+34
-16
lines changed
  • src/main/kotlin/com/lambda/client/module/modules/render

1 file changed

+34
-16
lines changed

src/main/kotlin/com/lambda/client/module/modules/render/Tracers.kt

Lines changed: 34 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@ import net.minecraft.entity.Entity
1717
import net.minecraft.entity.player.EntityPlayer
1818
import net.minecraftforge.fml.common.gameevent.TickEvent
1919
import java.util.concurrent.ConcurrentHashMap
20-
import kotlin.math.min
2120

2221
object Tracers : Module(
2322
name = "Tracers",
@@ -49,6 +48,7 @@ object Tracers : Module(
4948
private val alpha by setting("Alpha", 255, 0..255, 1, { page == Page.RENDERING })
5049
private val yOffset by setting("Y Offset Percentage", 0, 0..100, 5, { page == Page.RENDERING })
5150
private val thickness by setting("Line Thickness", 2.0f, 0.25f..5.0f, 0.25f, { page == Page.RENDERING })
51+
private val fadeSpeed by setting("Fade Speed", 150, 0..500, 25, { page == Page.RENDERING }, unit = "ms")
5252

5353
/* Range color settings */
5454
private val rangedColor by setting("Ranged Color", true, { page == Page.RANGE_COLOR })
@@ -60,7 +60,7 @@ object Tracers : Module(
6060
ENTITY_TYPE, COLOR, RENDERING, RANGE_COLOR
6161
}
6262

63-
private var renderList = ConcurrentHashMap<Entity, Pair<ColorHolder, Float>>() /* <Entity, <RGBAColor, AlphaMultiplier>> */
63+
private var renderList = ConcurrentHashMap<Entity, TracerData>()
6464
private var cycler = HueCycler(600)
6565
private val renderer = ESPRenderer()
6666

@@ -70,9 +70,19 @@ object Tracers : Module(
7070
renderer.thickness = thickness
7171
renderer.tracerOffset = yOffset
7272

73-
for ((entity, pair) in renderList) {
74-
val rgba = pair.first.clone()
75-
rgba.a = (rgba.a * pair.second).toInt()
73+
for ((entity, tracerData) in renderList) {
74+
val rgba = tracerData.color.clone()
75+
76+
if (fadeSpeed > 0) {
77+
val animationCoefficient = tracerData.age * tracerData.color.a / fadeSpeed
78+
79+
rgba.a = if (tracerData.isEntityPresent) {
80+
animationCoefficient.toInt().coerceAtMost(tracerData.color.a)
81+
} else {
82+
(-animationCoefficient + tracerData.color.a).toInt().coerceAtLeast(0)
83+
}
84+
}
85+
7686
renderer.add(entity, rgba)
7787
}
7888

@@ -91,22 +101,26 @@ object Tracers : Module(
91101
ArrayList()
92102
}
93103

94-
val cacheMap = HashMap<Entity, Pair<ColorHolder, Float>>()
95-
for (entity in entityList) {
96-
cacheMap[entity] = Pair(getColor(entity), 0f)
104+
entityList.forEach { entity ->
105+
renderList.computeIfAbsent(entity) {
106+
TracerData(getColor(entity), System.currentTimeMillis(), true)
107+
}
97108
}
98109

99-
for ((entity, pair) in renderList) {
100-
cacheMap.computeIfPresent(entity) { _, cachePair -> Pair(cachePair.first, min(pair.second + 0.075f, 1f)) }
101-
cacheMap.computeIfAbsent(entity) { Pair(getColor(entity), pair.second - 0.05f) }
110+
renderList.forEach { (entity, tracerData) ->
111+
if (entityList.contains(entity)) {
112+
tracerData.color = getColor(entity)
113+
return@forEach
114+
}
102115

103-
if (pair.second < 0f) {
104-
cacheMap.remove(entity)
116+
if (tracerData.isEntityPresent) {
117+
tracerData.isEntityPresent = false
118+
tracerData.timeStamp = System.currentTimeMillis()
119+
return@forEach
105120
}
106-
}
107121

108-
renderList.clear()
109-
renderList.putAll(cacheMap)
122+
if (tracerData.age > fadeSpeed || fadeSpeed == 0) renderList.remove(entity)
123+
}
110124
}
111125
}
112126

@@ -132,4 +146,8 @@ object Tracers : Module(
132146
val a = convertRange(distance, 0f, colorChangeRange.toFloat(), alpha.toFloat(), alphaFar.toFloat()).toInt()
133147
return ColorHolder(r, g, b, a)
134148
}
149+
150+
private data class TracerData(var color: ColorHolder, var timeStamp: Long, var isEntityPresent: Boolean) {
151+
val age get() = System.currentTimeMillis() - timeStamp
152+
}
135153
}

0 commit comments

Comments
 (0)