Generalize core.get/set_nametag_color into core.get/set_nametag_attributes

This commit is contained in:
TeTpaAka 2015-05-15 21:46:56 +02:00 committed by kwolekr
parent 5d1d7c17ea
commit 18c2f16c13
7 changed files with 36 additions and 26 deletions

@ -2491,12 +2491,17 @@ This is basically a reference to a C++ `ServerActiveObject`
* `set_eye_offset({x=0,y=0,z=0},{x=0,y=0,z=0})`: defines offset value for camera per player * `set_eye_offset({x=0,y=0,z=0},{x=0,y=0,z=0})`: defines offset value for camera per player
* in first person view * in first person view
* in third person view (max. values `{x=-10/10,y=-10,15,z=-5/5}`) * in third person view (max. values `{x=-10/10,y=-10,15,z=-5/5}`)
* `get_nametag_color()` * `get_nametag_attributes()`
* returns the color of the nametag as table * returns a table with the attributes of the nametag of the player
* { a = 0...255, r = 0...255, g = 0...255, b = 0...255 } * {
* `set_nametag_color(color)` color = { a = 0...255, r = 0...255, g = 0...255, b = 0...255 }
* sets the color of the nametag }
* `color`: { a = 0...255, r = 0...255, g = 0...255, b = 0...255 } * `set_nametag_attributes(attributes)`
* sets the attributes of the nametag of the player
* `attributes`:
{
color = { a = 0...255, r = 0...255, g = 0...255, b = 0...255 }
}
### `InvRef` ### `InvRef`
An `InvRef` is a reference to an inventory. An `InvRef` is a reference to an inventory.

@ -1715,7 +1715,8 @@ void GenericCAO::processMessage(const std::string &data)
int rating = readS16(is); int rating = readS16(is);
m_armor_groups[name] = rating; m_armor_groups[name] = rating;
} }
} else if (cmd == GENERIC_CMD_SET_NAMETAG_COLOR) { } else if (cmd == GENERIC_CMD_UPDATE_NAMETAG_ATTRIBUTES) {
u8 version = readU8(is); // forward compatibility
m_nametag_color = readARGB8(is); m_nametag_color = readARGB8(is);
if (m_textnode != NULL) { if (m_textnode != NULL) {
m_textnode->setTextColor(m_nametag_color); m_textnode->setTextColor(m_nametag_color);

@ -814,7 +814,7 @@ std::string PlayerSAO::getClientInitializationData(u16 protocol_version)
os<<serializeLongString(gob_cmd_update_physics_override(m_physics_override_speed, os<<serializeLongString(gob_cmd_update_physics_override(m_physics_override_speed,
m_physics_override_jump, m_physics_override_gravity, m_physics_override_sneak, m_physics_override_jump, m_physics_override_gravity, m_physics_override_sneak,
m_physics_override_sneak_glitch)); // 5 m_physics_override_sneak_glitch)); // 5
os << serializeLongString(gob_cmd_set_nametag_color(m_nametag_color)); // 6 os << serializeLongString(gob_cmd_update_nametag_attributes(m_nametag_color)); // 6
} }
else else
{ {
@ -971,7 +971,7 @@ void PlayerSAO::step(float dtime, bool send_recommended)
if (m_nametag_sent == false) { if (m_nametag_sent == false) {
m_nametag_sent = true; m_nametag_sent = true;
std::string str = gob_cmd_set_nametag_color(m_nametag_color); std::string str = gob_cmd_update_nametag_attributes(m_nametag_color);
// create message and add to list // create message and add to list
ActiveObjectMessage aom(getId(), true, str); ActiveObjectMessage aom(getId(), true, str);
m_messages_out.push(aom); m_messages_out.push(aom);

@ -170,12 +170,13 @@ std::string gob_cmd_update_attachment(int parent_id, std::string bone, v3f posit
return os.str(); return os.str();
} }
std::string gob_cmd_set_nametag_color(video::SColor color) std::string gob_cmd_update_nametag_attributes(video::SColor color)
{ {
std::ostringstream os(std::ios::binary); std::ostringstream os(std::ios::binary);
// command // command
writeU8(os, GENERIC_CMD_SET_NAMETAG_COLOR); writeU8(os, GENERIC_CMD_UPDATE_NAMETAG_ATTRIBUTES);
// parameters // parameters
writeU8(os, 1); // version for forward compatibility
writeARGB8(os, color); writeARGB8(os, color);
return os.str(); return os.str();
} }

@ -34,7 +34,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#define GENERIC_CMD_SET_BONE_POSITION 7 #define GENERIC_CMD_SET_BONE_POSITION 7
#define GENERIC_CMD_SET_ATTACHMENT 8 #define GENERIC_CMD_SET_ATTACHMENT 8
#define GENERIC_CMD_SET_PHYSICS_OVERRIDE 9 #define GENERIC_CMD_SET_PHYSICS_OVERRIDE 9
#define GENERIC_CMD_SET_NAMETAG_COLOR 10 #define GENERIC_CMD_UPDATE_NAMETAG_ATTRIBUTES 10
#include "object_properties.h" #include "object_properties.h"
std::string gob_cmd_set_properties(const ObjectProperties &prop); std::string gob_cmd_set_properties(const ObjectProperties &prop);
@ -73,7 +73,7 @@ std::string gob_cmd_update_bone_position(std::string bone, v3f position, v3f rot
std::string gob_cmd_update_attachment(int parent_id, std::string bone, v3f position, v3f rotation); std::string gob_cmd_update_attachment(int parent_id, std::string bone, v3f position, v3f rotation);
std::string gob_cmd_set_nametag_color(video::SColor color); std::string gob_cmd_update_nametag_attributes(video::SColor color);
#endif #endif

@ -1274,8 +1274,8 @@ int ObjectRef::l_override_day_night_ratio(lua_State *L)
return 1; return 1;
} }
// set_nametag_color(self, color) // set_nametag_attributes(self, attributes)
int ObjectRef::l_set_nametag_color(lua_State *L) int ObjectRef::l_set_nametag_attributes(lua_State *L)
{ {
NO_MAP_LOCK_REQUIRED; NO_MAP_LOCK_REQUIRED;
ObjectRef *ref = checkobject(L, 1); ObjectRef *ref = checkobject(L, 1);
@ -1283,17 +1283,18 @@ int ObjectRef::l_set_nametag_color(lua_State *L)
if (playersao == NULL) if (playersao == NULL)
return 0; return 0;
video::SColor color(255,255,255,255); video::SColor color = playersao->getNametagColor();
if (!lua_isnil(L, 2)) lua_getfield(L, 2, "color");
color = readARGB8(L, 2); if (!lua_isnil(L, -1))
color = readARGB8(L, -1);
playersao->setNametagColor(color); playersao->setNametagColor(color);
lua_pushboolean(L, true); lua_pushboolean(L, true);
return 1; return 1;
} }
// get_nametag_color(self) // get_nametag_attributes(self)
int ObjectRef::l_get_nametag_color(lua_State *L) int ObjectRef::l_get_nametag_attributes(lua_State *L)
{ {
NO_MAP_LOCK_REQUIRED; NO_MAP_LOCK_REQUIRED;
ObjectRef *ref = checkobject(L, 1); ObjectRef *ref = checkobject(L, 1);
@ -1303,6 +1304,7 @@ int ObjectRef::l_get_nametag_color(lua_State *L)
video::SColor color = playersao->getNametagColor(); video::SColor color = playersao->getNametagColor();
lua_newtable(L);
lua_newtable(L); lua_newtable(L);
lua_pushnumber(L, color.getAlpha()); lua_pushnumber(L, color.getAlpha());
lua_setfield(L, -2, "a"); lua_setfield(L, -2, "a");
@ -1312,6 +1314,7 @@ int ObjectRef::l_get_nametag_color(lua_State *L)
lua_setfield(L, -2, "g"); lua_setfield(L, -2, "g");
lua_pushnumber(L, color.getBlue()); lua_pushnumber(L, color.getBlue());
lua_setfield(L, -2, "b"); lua_setfield(L, -2, "b");
lua_setfield(L, -2, "color");
return 1; return 1;
} }
@ -1438,7 +1441,7 @@ const luaL_reg ObjectRef::methods[] = {
luamethod(ObjectRef, override_day_night_ratio), luamethod(ObjectRef, override_day_night_ratio),
luamethod(ObjectRef, set_local_animation), luamethod(ObjectRef, set_local_animation),
luamethod(ObjectRef, set_eye_offset), luamethod(ObjectRef, set_eye_offset),
luamethod(ObjectRef, set_nametag_color), luamethod(ObjectRef, set_nametag_attributes),
luamethod(ObjectRef, get_nametag_color), luamethod(ObjectRef, get_nametag_attributes),
{0,0} {0,0}
}; };

@ -240,11 +240,11 @@ private:
// set_eye_offset(self, v3f first pv, v3f third pv) // set_eye_offset(self, v3f first pv, v3f third pv)
static int l_set_eye_offset(lua_State *L); static int l_set_eye_offset(lua_State *L);
// set_nametag_color(self, color) // set_nametag_attributes(self, attributes)
static int l_set_nametag_color(lua_State *L); static int l_set_nametag_attributes(lua_State *L);
// get_nametag_color(self) // get_nametag_attributes(self)
static int l_get_nametag_color(lua_State *L); static int l_get_nametag_attributes(lua_State *L);
public: public:
ObjectRef(ServerActiveObject *object); ObjectRef(ServerActiveObject *object);