重写消失动画
This commit is contained in:
parent
b32aeabbf6
commit
3bf428dc26
3 changed files with 34 additions and 10 deletions
|
@ -54,10 +54,29 @@ public class KillMessageOverlay {
|
||||||
}
|
}
|
||||||
|
|
||||||
float totalTop = 5;
|
float totalTop = 5;
|
||||||
for (PlayerKillRecord record : KillMessageHandler.QUEUE) {
|
|
||||||
totalTop = renderKillMessages(record, event, totalTop);
|
var arr = KillMessageHandler.QUEUE.toArray(new PlayerKillRecord[0]);
|
||||||
|
var record = arr[0];
|
||||||
|
|
||||||
|
if (record.freeze) {
|
||||||
|
for (var playerKillRecord : arr) {
|
||||||
|
playerKillRecord.freeze = false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (record.tick >= 80) {
|
||||||
|
if (arr.length > 1 && record.tick - arr[1].tick < (record.fastRemove ? 2 : 20)) {
|
||||||
|
arr[1].fastRemove = true;
|
||||||
|
record.fastRemove = true;
|
||||||
|
for (int j = 1; j < arr.length; j++) {
|
||||||
|
arr[j].freeze = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
for (PlayerKillRecord r : KillMessageHandler.QUEUE) {
|
||||||
|
totalTop = renderKillMessages(r, event, totalTop);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private static float renderKillMessages(PlayerKillRecord record, RenderGuiEvent.Pre event, float baseTop) {
|
private static float renderKillMessages(PlayerKillRecord record, RenderGuiEvent.Pre event, float baseTop) {
|
||||||
|
@ -101,7 +120,8 @@ public class KillMessageOverlay {
|
||||||
|
|
||||||
// 4s后开始消失
|
// 4s后开始消失
|
||||||
if (record.tick >= 80) {
|
if (record.tick >= 80) {
|
||||||
float rate = (float) Math.pow((record.tick + event.getPartialTick() - 80) / 20, 5);
|
int animationTickCount = record.fastRemove ? 2 : 20;
|
||||||
|
float rate = (float) Math.pow((record.tick + event.getPartialTick() - 80) / animationTickCount, 5);
|
||||||
gui.pose().translate(rate * 100, 0, 0);
|
gui.pose().translate(rate * 100, 0, 0);
|
||||||
gui.setColor(1, 1, 1, 1 - rate);
|
gui.setColor(1, 1, 1, 1 - rate);
|
||||||
baseTop += 10 * (1 - rate);
|
baseTop += 10 * (1 - rate);
|
||||||
|
|
|
@ -17,14 +17,16 @@ public class KillMessageHandler {
|
||||||
|
|
||||||
@SubscribeEvent
|
@SubscribeEvent
|
||||||
public static void onClientTick(TickEvent.ClientTickEvent event) {
|
public static void onClientTick(TickEvent.ClientTickEvent event) {
|
||||||
if (event.phase == TickEvent.Phase.END) {
|
if (event.phase != TickEvent.Phase.END) return;
|
||||||
for (PlayerKillRecord record : QUEUE) {
|
|
||||||
record.tick++;
|
for (PlayerKillRecord record : QUEUE) {
|
||||||
if (record.tick >= 100) {
|
if (record.freeze && record.tick >= 3) {
|
||||||
QUEUE.poll();
|
continue;
|
||||||
}
|
}
|
||||||
|
record.tick++;
|
||||||
|
if (record.fastRemove && record.tick >= 82 || record.tick >= 100) {
|
||||||
|
QUEUE.poll();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -12,6 +12,8 @@ public class PlayerKillRecord {
|
||||||
public ItemStack stack;
|
public ItemStack stack;
|
||||||
public boolean headshot;
|
public boolean headshot;
|
||||||
public int tick;
|
public int tick;
|
||||||
|
public boolean freeze;
|
||||||
|
public boolean fastRemove;
|
||||||
public ResourceKey<DamageType> damageType;
|
public ResourceKey<DamageType> damageType;
|
||||||
|
|
||||||
public PlayerKillRecord(Player attacker, Entity target, ItemStack stack, boolean headshot, ResourceKey<DamageType> damageType) {
|
public PlayerKillRecord(Player attacker, Entity target, ItemStack stack, boolean headshot, ResourceKey<DamageType> damageType) {
|
||||||
|
|
Loading…
Add table
Reference in a new issue