diff options
author | Kae <80987908+Novaenia@users.noreply.github.com> | 2025-06-03 09:32:41 +1000 |
---|---|---|
committer | Kae <80987908+Novaenia@users.noreply.github.com> | 2025-06-03 09:32:41 +1000 |
commit | 72d55371d2d5bc2a14567c20a7c391a24c9f1837 (patch) | |
tree | ba4214a8f15b70596f45d02dfe899d9e09b51e67 /source/game | |
parent | d575ca382bc9803f4d8711a11043897449cf3146 (diff) |
add player.nametag, player.setNametag, world.entityNametag
Diffstat (limited to 'source/game')
-rw-r--r-- | source/game/StarMonster.cpp | 4 | ||||
-rw-r--r-- | source/game/StarMonster.hpp | 1 | ||||
-rw-r--r-- | source/game/StarNpc.cpp | 4 | ||||
-rw-r--r-- | source/game/StarNpc.hpp | 1 | ||||
-rw-r--r-- | source/game/StarPlayer.cpp | 11 | ||||
-rw-r--r-- | source/game/StarPlayer.hpp | 2 | ||||
-rw-r--r-- | source/game/interfaces/StarNametagEntity.hpp | 2 | ||||
-rwxr-xr-x | source/game/scripting/StarPlayerLuaBindings.cpp | 3 | ||||
-rw-r--r-- | source/game/scripting/StarWorldLuaBindings.cpp | 16 | ||||
-rw-r--r-- | source/game/scripting/StarWorldLuaBindings.hpp | 1 |
10 files changed, 44 insertions, 1 deletions
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); |