Show infotext with description for item entities
authorRealBadAngel <maciej.kasatkin@o2.pl>
Fri, 8 Jan 2016 14:59:36 +0000 (15:59 +0100)
committerparamat <mat.gregory@virginmedia.com>
Mon, 18 Jan 2016 17:21:41 +0000 (17:21 +0000)
builtin/game/item_entity.lua
doc/lua_api.txt
src/content_cao.h
src/game.cpp
src/object_properties.cpp
src/object_properties.h
src/script/common/c_content.cpp

index be158c119b24ccdf5df6e27fc4fefaf412fb7e5a..a66bf33d0e3935b58f70296bf7ea25f9556c5610 100644 (file)
@@ -31,6 +31,7 @@ core.register_entity(":__builtin:item", {
                spritediv = {x = 1, y = 1},
                initial_sprite_basepos = {x = 0, y = 0},
                is_visible = false,
+               infotext = "",
        },
 
        itemstring = '',
@@ -50,6 +51,7 @@ core.register_entity(":__builtin:item", {
                local c = s
                local itemtable = stack:to_table()
                local itemname = nil
+               local description = ""
                if itemtable then
                        itemname = stack:to_table().name
                end
@@ -58,6 +60,7 @@ core.register_entity(":__builtin:item", {
                if core.registered_items[itemname] then
                        item_texture = core.registered_items[itemname].inventory_image
                        item_type = core.registered_items[itemname].type
+                       description = core.registered_items[itemname].description
                end
                local prop = {
                        is_visible = true,
@@ -66,6 +69,7 @@ core.register_entity(":__builtin:item", {
                        visual_size = {x = s, y = s},
                        collisionbox = {-c, -c, -c, c, c, c},
                        automatic_rotate = math.pi * 0.5,
+                       infotext = description,
                }
                self.object:set_properties(prop)
        end,
index 0ff8f031d977fc8d43eef6b6f8a99c36dd148894..c2d5183d7421110e53ea3879ef50d6bbaeb5e14a 100644 (file)
@@ -3241,6 +3241,7 @@ Definition tables
         backface_culling = true, -- false to disable backface_culling for model
         nametag = "", -- by default empty, for players their name is shown if empty
         nametag_color = <color>, -- sets color of nametag as ColorSpec
+        infotext = "", -- by default empty, text to be shown when pointed at object
     }
 
 ### Entity definition (`register_entity`)
index d9145c5f12bc6042e022a5bff6dc1aa49dd7c16b..abb242aa4d5906e3a6654f3b189cd1d47bc1085d 100644 (file)
@@ -201,6 +201,11 @@ public:
                        float time_from_last_punch=1000000);
 
        std::string debugInfoText();
+       
+       std::string infoText()
+       {
+               return m_prop.infotext;
+       }
 };
 
 
index 92d919931fd3346fce62b905cb36b431ee742e74..3902c50bba3d4e863c5e025f428a5968c5cdfaee 100644 (file)
@@ -3732,8 +3732,11 @@ void Game::handlePointingAtObject(GameRunData *runData,
 {
        infotext = utf8_to_wide(runData->selected_object->infoText());
 
-       if (infotext == L"" && show_debug) {
-               infotext = utf8_to_wide(runData->selected_object->debugInfoText());
+       if (show_debug) {
+               if (infotext != L"") {
+                       infotext += L"\n";
+               }
+               infotext += utf8_to_wide(runData->selected_object->debugInfoText());
        }
 
        if (input->getLeftState()) {
index abd1bbd0929361619ff264ee4ca90aaecd5a017f..89ca26274a805b239e20431e0b45442dd92f7572 100644 (file)
@@ -118,6 +118,7 @@ void ObjectProperties::serialize(std::ostream &os) const
        os << serializeString(nametag);
        writeARGB8(os, nametag_color);
        writeF1000(os, automatic_face_movement_max_rotation_per_sec);
+       os << serializeString(infotext);
 
        // Add stuff only at the bottom.
        // Never remove anything, because we don't want new versions of this
@@ -159,6 +160,7 @@ void ObjectProperties::deSerialize(std::istream &is)
                        nametag = deSerializeString(is);
                        nametag_color = readARGB8(is);
                        automatic_face_movement_max_rotation_per_sec = readF1000(is);
+                       infotext = deSerializeString(is);
                }catch(SerializationError &e){}
        }
        else
index 47698cff7620eb53cb70c55358ef08b36976a503..02ec9d1f79b741fa972d32ee5c8f835d5b7f3540 100644 (file)
@@ -51,6 +51,7 @@ struct ObjectProperties
        std::string nametag;
        video::SColor nametag_color;
        f32 automatic_face_movement_max_rotation_per_sec;
+       std::string infotext;
 
        ObjectProperties();
        std::string dump();
index 62de2c968147e10f9169a78ca71a5121c4d9700b..275b22bb8eff802612bce8b6ec24ef32d5c3db42 100644 (file)
@@ -216,6 +216,7 @@ void read_object_properties(lua_State *L, int index,
                prop->automatic_face_movement_max_rotation_per_sec = luaL_checknumber(L, -1);
        }
        lua_pop(L, 1);
+       getstringfield(L, -1, "infotext", prop->infotext);
 }
 
 /******************************************************************************/
@@ -282,6 +283,8 @@ void push_object_properties(lua_State *L, ObjectProperties *prop)
        lua_setfield(L, -2, "nametag_color");
        lua_pushnumber(L, prop->automatic_face_movement_max_rotation_per_sec);
        lua_setfield(L, -2, "automatic_face_movement_max_rotation_per_sec");
+       lua_pushlstring(L, prop->infotext.c_str(), prop->infotext.size());
+       lua_setfield(L, -2, "infotext");
 }
 
 /******************************************************************************/