Веб-сайт самохостера Lotigara

summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--source/frontend/StarNameplatePainter.cpp4
-rw-r--r--source/game/StarMonster.cpp4
-rw-r--r--source/game/StarMonster.hpp1
-rw-r--r--source/game/StarNpc.cpp4
-rw-r--r--source/game/StarNpc.hpp1
-rw-r--r--source/game/StarPlayer.cpp11
-rw-r--r--source/game/StarPlayer.hpp2
-rw-r--r--source/game/interfaces/StarNametagEntity.hpp2
-rwxr-xr-xsource/game/scripting/StarPlayerLuaBindings.cpp3
-rw-r--r--source/game/scripting/StarWorldLuaBindings.cpp16
-rw-r--r--source/game/scripting/StarWorldLuaBindings.hpp1
11 files changed, 46 insertions, 3 deletions
diff --git a/source/frontend/StarNameplatePainter.cpp b/source/frontend/StarNameplatePainter.cpp
index 0666af0..7dce6a5 100644
--- a/source/frontend/StarNameplatePainter.cpp
+++ b/source/frontend/StarNameplatePainter.cpp
@@ -39,7 +39,7 @@ void NameplatePainter::update(float dt, WorldClientPtr const& world, WorldCamera
foundEntities.insert(entity->entityId());
if (!m_entitiesWithNametags.contains(entity->entityId())) {
- Nametag nametag = {entity->name(), entity->statusText(), entity->nametagColor(), 1.0f, entity->entityId()};
+ Nametag nametag = {entity->nametag(), entity->statusText(), entity->nametagColor(), 1.0f, entity->entityId()};
RectF boundBox = determineBoundBox(Vec2F(), nametag);
m_nametags.addBubble(Vec2F(), boundBox, std::move(nametag));
}
@@ -54,7 +54,7 @@ void NameplatePainter::update(float dt, WorldClientPtr const& world, WorldCamera
bubbleState.boundBox = determineBoundBox(bubbleState.idealDestination, nametag);
nametag.statusText = entity->statusText();
- nametag.name = entity->name();
+ nametag.name = entity->nametag();
nametag.color = entity->nametagColor();
bool fullyOnScreen = world->geometry().rectContains(camera.worldScreenRect(), entity->position());
if (inspectionMode)
diff --git a/source/game/StarMonster.cpp b/source/game/StarMonster.cpp
index 98f4642..7e73b8b 100644
--- a/source/game/StarMonster.cpp
+++ b/source/game/StarMonster.cpp
@@ -818,6 +818,10 @@ Vec2F Monster::nametagOrigin() const {
return mouthPosition(false);
}
+String Monster::nametag() const {
+ return name();
+}
+
bool Monster::aggressive() const {
return m_aggressive;
}
diff --git a/source/game/StarMonster.hpp b/source/game/StarMonster.hpp
index 5c964e3..1fab73f 100644
--- a/source/game/StarMonster.hpp
+++ b/source/game/StarMonster.hpp
@@ -113,6 +113,7 @@ public:
bool displayNametag() const override;
Vec3B nametagColor() const override;
Vec2F nametagOrigin() const override;
+ String nametag() const override;
bool aggressive() const override;
diff --git a/source/game/StarNpc.cpp b/source/game/StarNpc.cpp
index 7c1cf63..6c3a9cf 100644
--- a/source/game/StarNpc.cpp
+++ b/source/game/StarNpc.cpp
@@ -559,6 +559,10 @@ Vec2F Npc::nametagOrigin() const {
return mouthPosition(false);
}
+String Npc::nametag() const {
+ return name();
+}
+
bool Npc::aggressive() const {
return m_aggressive.get();
}
diff --git a/source/game/StarNpc.hpp b/source/game/StarNpc.hpp
index 21c562c..381b943 100644
--- a/source/game/StarNpc.hpp
+++ b/source/game/StarNpc.hpp
@@ -110,6 +110,7 @@ public:
bool displayNametag() const override;
Vec3B nametagColor() const override;
Vec2F nametagOrigin() const override;
+ String nametag() const override;
bool aggressive() const;
diff --git a/source/game/StarPlayer.cpp b/source/game/StarPlayer.cpp
index 151163f..6184a0a 100644
--- a/source/game/StarPlayer.cpp
+++ b/source/game/StarPlayer.cpp
@@ -2114,6 +2114,17 @@ Vec2F Player::nametagOrigin() const {
return mouthPosition(false);
}
+String Player::nametag() const {
+ if (auto jNametag = getSecretProperty("nametag"); jNametag.isType(Json::Type::String))
+ return jNametag.toString();
+ else
+ return name();
+}
+
+void Player::setNametag(Maybe<String> nametag) {
+ setSecretProperty("nametag", nametag ? Json(*nametag) : Json());
+}
+
void Player::updateIdentity()
{ m_identityUpdated = true; m_humanoid->setIdentity(m_identity); }
diff --git a/source/game/StarPlayer.hpp b/source/game/StarPlayer.hpp
index 5cc6f8f..f371766 100644
--- a/source/game/StarPlayer.hpp
+++ b/source/game/StarPlayer.hpp
@@ -315,6 +315,8 @@ public:
bool displayNametag() const override;
Vec3B nametagColor() const override;
Vec2F nametagOrigin() const override;
+ String nametag() const override;
+ void setNametag(Maybe<String> nametag);
void updateIdentity();
diff --git a/source/game/interfaces/StarNametagEntity.hpp b/source/game/interfaces/StarNametagEntity.hpp
index 0e42618..b236609 100644
--- a/source/game/interfaces/StarNametagEntity.hpp
+++ b/source/game/interfaces/StarNametagEntity.hpp
@@ -8,7 +8,7 @@ STAR_CLASS(NametagEntity);
class NametagEntity : public virtual Entity {
public:
- virtual String name() const = 0;
+ virtual String nametag() const = 0;
virtual Maybe<String> statusText() const = 0;
virtual bool displayNametag() const = 0;
virtual Vec3B nametagColor() const = 0;
diff --git a/source/game/scripting/StarPlayerLuaBindings.cpp b/source/game/scripting/StarPlayerLuaBindings.cpp
index ff0b877..f8032d2 100755
--- a/source/game/scripting/StarPlayerLuaBindings.cpp
+++ b/source/game/scripting/StarPlayerLuaBindings.cpp
@@ -118,6 +118,9 @@ LuaCallbacks LuaBindings::makePlayerCallbacks(Player* player) {
callbacks.registerCallback( "name", [player]() { return player->name(); });
callbacks.registerCallback("setName", [player](String const& name) { player->setName(name); });
+ callbacks.registerCallback( "nametag", [player]() { return player->nametag(); });
+ callbacks.registerCallback("setNametag", [player](Maybe<String> const& nametag) { player->setNametag(nametag); });
+
callbacks.registerCallback( "species", [player]() { return player->species(); });
callbacks.registerCallback("setSpecies", [player](String const& species) { player->setSpecies(species); });
diff --git a/source/game/scripting/StarWorldLuaBindings.cpp b/source/game/scripting/StarWorldLuaBindings.cpp
index 2d952ea..64d1f30 100644
--- a/source/game/scripting/StarWorldLuaBindings.cpp
+++ b/source/game/scripting/StarWorldLuaBindings.cpp
@@ -512,6 +512,7 @@ namespace LuaBindings {
callbacks.registerCallbackWithSignature<Maybe<String>, EntityId>("entitySpecies", bind(WorldEntityCallbacks::entitySpecies, world, _1));
callbacks.registerCallbackWithSignature<Maybe<String>, EntityId>("entityGender", bind(WorldEntityCallbacks::entityGender, world, _1));
callbacks.registerCallbackWithSignature<Maybe<String>, EntityId>("entityName", bind(WorldEntityCallbacks::entityName, world, _1));
+ callbacks.registerCallbackWithSignature<Maybe<Json>, EntityId>("entityNametag", bind(WorldEntityCallbacks::entityNametag, world, _1));
callbacks.registerCallbackWithSignature<Maybe<String>, EntityId, Maybe<String>>("entityDescription", bind(WorldEntityCallbacks::entityDescription, world, _1, _2));
callbacks.registerCallbackWithSignature<LuaNullTermWrapper<Maybe<List<Drawable>>>, EntityId, String>("entityPortrait", bind(WorldEntityCallbacks::entityPortrait, world, _1, _2));
callbacks.registerCallbackWithSignature<Maybe<String>, EntityId, String>("entityHandItem", bind(WorldEntityCallbacks::entityHandItem, world, _1, _2));
@@ -1451,6 +1452,21 @@ namespace LuaBindings {
return {};
}
+ Maybe<Json> WorldEntityCallbacks::entityNametag(World* world, EntityId entityId) {
+ auto entity = world->entity(entityId);
+
+ if (auto nametagEntity = as<NametagEntity>(entity)) {
+ return JsonObject{
+ {"nametag", nametagEntity->nametag()},
+ {"displayed", nametagEntity->displayNametag()},
+ {"color", jsonFromColor(Color::rgb(nametagEntity->nametagColor()))},
+ {"origin", jsonFromVec2F(nametagEntity->nametagOrigin())},
+ };
+ }
+
+ return {};
+ }
+
Maybe<String> WorldEntityCallbacks::entityDescription(World* world, EntityId entityId, Maybe<String> const& species) {
if (auto entity = world->entity(entityId)) {
if (auto inspectableEntity = as<InspectableEntity>(entity)) {
diff --git a/source/game/scripting/StarWorldLuaBindings.hpp b/source/game/scripting/StarWorldLuaBindings.hpp
index 3f08a77..9d24d49 100644
--- a/source/game/scripting/StarWorldLuaBindings.hpp
+++ b/source/game/scripting/StarWorldLuaBindings.hpp
@@ -123,6 +123,7 @@ namespace LuaBindings {
Maybe<String> entitySpecies(World* world, EntityId entityId);
Maybe<String> entityGender(World* world, EntityId entityId);
Maybe<String> entityName(World* world, EntityId entityId);
+ Maybe<Json> entityNametag(World* world, EntityId entityId);
Maybe<String> entityDescription(World* world, EntityId entityId, Maybe<String> const& species);
LuaNullTermWrapper<Maybe<List<Drawable>>> entityPortrait(World* world, EntityId entityId, String const& portraitMode);
Maybe<String> entityHandItem(World* world, EntityId entityId, String const& handName);