Added bundle for visibility + color

This commit is contained in:
OmeWillem
2024-07-05 18:15:41 +02:00
parent 01985ec46b
commit 68d69756f4
2 changed files with 24 additions and 14 deletions

Binary file not shown.

View File

@@ -25,6 +25,7 @@ import org.joml.Vector3f;
import re.imc.geysermodelengine.GeyserModelEngine; import re.imc.geysermodelengine.GeyserModelEngine;
import re.imc.geysermodelengine.listener.ModelListener; import re.imc.geysermodelengine.listener.ModelListener;
import java.awt.*;
import java.util.*; import java.util.*;
import java.util.concurrent.atomic.AtomicInteger; import java.util.concurrent.atomic.AtomicInteger;
@@ -48,6 +49,7 @@ public class EntityTask {
boolean removed = false; boolean removed = false;
float lastScale = -1.0f; float lastScale = -1.0f;
Color lastColor = null;
Map<ModelBone, Boolean> lastSet = new HashMap<>(); Map<ModelBone, Boolean> lastSet = new HashMap<>();
@@ -185,7 +187,6 @@ public class EntityTask {
} }
} }
tick ++; tick ++;
if (tick > 400) { if (tick > 400) {
tick = 0; tick = 0;
@@ -213,9 +214,11 @@ public class EntityTask {
Optional<Player> player = viewers.stream().findAny(); Optional<Player> player = viewers.stream().findAny();
if (player.isEmpty()) return; if (player.isEmpty()) return;
// somehow the scale needs more to update, for now just scale each tick lol
updateVisibility(player.get(), false); updateVisibility(player.get(), false);
// do not actually use this, atleast bundle these up ;(
sendScale(player.get(), true); sendScale(player.get(), true);
sendColor(player.get(), true);
} }
public void sendEntityData(Player player, int delay) { public void sendEntityData(Player player, int delay) {
@@ -250,21 +253,35 @@ public class EntityTask {
lastScale = average; lastScale = average;
} }
public void sendColor(Player player, boolean ignore) {
if (player == null) return;
Color color = new Color(model.getActiveModel().getDefaultTint().asARGB());
if (color.equals(lastColor)) return;
PlayerUtils.sendCustomColor(player, model.getEntity(), color);
if (ignore) return;
lastColor = color;
}
public void updateVisibility(Player player, boolean ignore) { public void updateVisibility(Player player, boolean ignore) {
Entity entity = model.getEntity(); Entity entity = model.getEntity();
// pretty sure it gets set on the entity, so no need to send it for every single viewer (small pyramid btw) Map<String, Boolean> updates = new HashMap<>();
model.getActiveModel().getBones().forEach((s,bone) -> { model.getActiveModel().getBones().forEach((s,bone) -> {
if (!lastSet.containsKey(bone)) lastSet.put(bone, !bone.isVisible()); if (!lastSet.containsKey(bone)) lastSet.put(bone, !bone.isVisible());
if (!lastSet.get(bone).equals(bone.isVisible()) || ignore) { if (!lastSet.get(bone).equals(bone.isVisible()) || ignore) {
String name = unstripName(bone).toLowerCase(); String name = unstripName(bone).toLowerCase();
PlayerUtils.sendBoolProperty(player,entity, updates.put(model.getActiveModel().getBlueprint().getName() + ":" + name, bone.isVisible());
model.getActiveModel().getBlueprint().getName() + ":" + name, bone.isVisible());
lastSet.replace(bone, bone.isVisible()); lastSet.replace(bone, bone.isVisible());
} }
}); });
if (updates.isEmpty()) return;
PlayerUtils.sendBoolProperties(player, entity, updates);
} }
private String unstripName(ModelBone bone) { private String unstripName(ModelBone bone) {
@@ -355,14 +372,7 @@ public class EntityTask {
return animationCooldown.get(); return animationCooldown.get();
} }
/* public void playStopBedrockAnimation(String animationId) {
private void clearLoopAnimation() {
playStopBedrockAnimation(lastAnimation);
}
private void playStopBedrockAnimation(String animationId) {
Entity entity = model.getEntity(); Entity entity = model.getEntity();
Set<Player> viewers = model.getViewers(); Set<Player> viewers = model.getViewers();
@@ -383,7 +393,7 @@ public class EntityTask {
} }
*/
public void playBedrockAnimation(String animationId, Set<Player> viewers, boolean loop, float blendTime) { public void playBedrockAnimation(String animationId, Set<Player> viewers, boolean loop, float blendTime) {
// model.getViewers().forEach(viewer -> viewer.sendActionBar("CURRENT AN:" + animationId)); // model.getViewers().forEach(viewer -> viewer.sendActionBar("CURRENT AN:" + animationId));