Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 4 additions & 2 deletions src/client/entity/EntityTracker.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -309,8 +309,10 @@ namespace perlin::entity {
PERLIN_ENTITY_SET(SetBoundingBox(uint64_t rid, float width, float height), e.boxWidth = width;
e.boxHeight = height)
PERLIN_ENTITY_SET(SetNameTag(uint64_t rid, const std::string& nameTag), e.nameTag = nameTag)
PERLIN_ENTITY_SET(SetVariant(uint64_t rid, int variant, int markVariant, int color), e.variant = variant;
e.markVariant = markVariant; e.color = color)
PERLIN_ENTITY_SET(SetVariant(uint64_t rid, std::optional<int> variant, std::optional<int> markVariant,
std::optional<int> color),
if (variant) e.variant = *variant;
if (markVariant) e.markVariant = *markVariant; if (color) e.color = *color)
PERLIN_ENTITY_SET(SetHealth(uint64_t rid, float health), e.health = health;
if (health <= 0.0f && !e.isItem) e.dying = true;
else if (health > 0.0f) e.dying = false)
Expand Down
5 changes: 4 additions & 1 deletion src/client/entity/EntityTracker.hpp
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
#pragma once
#include <optional>
#include <chrono>
#include <functional>
#include <glm/glm.hpp>
Expand Down Expand Up @@ -193,7 +194,9 @@ namespace perlin::entity {
void SetScale(uint64_t rid, float scale);
void SetBoundingBox(uint64_t rid, float width, float height);
void SetNameTag(uint64_t rid, const std::string& nameTag);
void SetVariant(uint64_t rid, int variant, int markVariant, int color);
// an update that leaves a field out keeps its value: servers resend only what changed
void SetVariant(uint64_t rid, std::optional<int> variant, std::optional<int> markVariant,
std::optional<int> color);
void SetHealth(uint64_t rid, float health);
void SetAttribute(uint64_t rid, const std::string& name, float min, float value, float max);
void SetOwner(uint64_t rid, int64_t ownerUid);
Expand Down
7 changes: 4 additions & 3 deletions src/client/multiplayer/BedrockHandlers.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -108,7 +108,7 @@ namespace perlin {

void ApplyMetadata(entity::EntityTracker& tracker, uint64_t rid,
const std::vector<MetadataDictionaryEntry>& metadata) {
int variant = -1, mark = -1, color = -1;
std::optional<int> variant, mark, color;
float boxWidth = 0.0f, boxHeight = 0.0f;
static const bool debugTags = std::getenv("PERLIN_DEBUG_NAMETAGS") != nullptr;
for (const MetadataDictionaryEntry& m : metadata) {
Expand Down Expand Up @@ -191,8 +191,9 @@ namespace perlin {
break;
}
}
if (variant >= 0 || mark >= 0 || color >= 0)
tracker.SetVariant(rid, std::max(variant, 0), std::max(mark, 0), std::max(color, 0));
const auto clamp = [](std::optional<int> v) { return v ? std::optional<int>(std::max(*v, 0)) : v; };
if (variant || mark || color)
tracker.SetVariant(rid, clamp(variant), clamp(mark), clamp(color));
if (boxWidth > 0.0f && boxHeight > 0.0f)
tracker.SetBoundingBox(rid, boxWidth, boxHeight);
}
Expand Down
Loading