重写消失动画

This commit is contained in:
Light_Quanta 2024-05-21 19:59:44 +08:00
parent b32aeabbf6
commit 3bf428dc26
No known key found for this signature in database
GPG key ID: 11A39A1B8C890959
3 changed files with 34 additions and 10 deletions

View file

@ -54,10 +54,29 @@ public class KillMessageOverlay {
}
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) {
@ -101,7 +120,8 @@ public class KillMessageOverlay {
// 4s后开始消失
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.setColor(1, 1, 1, 1 - rate);
baseTop += 10 * (1 - rate);

View file

@ -17,14 +17,16 @@ public class KillMessageHandler {
@SubscribeEvent
public static void onClientTick(TickEvent.ClientTickEvent event) {
if (event.phase == TickEvent.Phase.END) {
if (event.phase != TickEvent.Phase.END) return;
for (PlayerKillRecord record : QUEUE) {
if (record.freeze && record.tick >= 3) {
continue;
}
record.tick++;
if (record.tick >= 100) {
if (record.fastRemove && record.tick >= 82 || record.tick >= 100) {
QUEUE.poll();
}
}
}
}
}

View file

@ -12,6 +12,8 @@ public class PlayerKillRecord {
public ItemStack stack;
public boolean headshot;
public int tick;
public boolean freeze;
public boolean fastRemove;
public ResourceKey<DamageType> damageType;
public PlayerKillRecord(Player attacker, Entity target, ItemStack stack, boolean headshot, ResourceKey<DamageType> damageType) {