diff options
-rw-r--r-- | src/client.cpp | 8 | ||||
-rw-r--r-- | src/client.h | 4 | ||||
-rw-r--r-- | src/game.cpp | 1 | ||||
-rw-r--r-- | src/player.cpp | 6 | ||||
-rw-r--r-- | src/player.h | 10 |
5 files changed, 28 insertions, 1 deletions
diff --git a/src/client.cpp b/src/client.cpp index 30bd10198..2687d01e0 100644 --- a/src/client.cpp +++ b/src/client.cpp @@ -1953,6 +1953,14 @@ void Client::setPlayerControl(PlayerControl &control) player->control = control; } +void Client::selectPlayerItem(u16 item) +{ + LocalPlayer *player = m_env.getLocalPlayer(); + assert(player != NULL); + + player->wieldItem(item); +} + // Returns true if the inventory of the local player has been // updated from the server. If it is true, it is set to false. bool Client::getLocalInventoryUpdated() diff --git a/src/client.h b/src/client.h index 1c71b2c2c..d21764f75 100644 --- a/src/client.h +++ b/src/client.h @@ -211,7 +211,9 @@ public: v3f getPlayerPosition(v3f *eye_position=NULL); void setPlayerControl(PlayerControl &control); - + + void selectPlayerItem(u16 item); + // Returns true if the inventory of the local player has been // updated from the server. If it is true, it is set to false. bool getLocalInventoryUpdated(); diff --git a/src/game.cpp b/src/game.cpp index 65f160f7b..147a1fa07 100644 --- a/src/game.cpp +++ b/src/game.cpp @@ -2200,6 +2200,7 @@ void the_game( if(client.getLocalInventoryUpdated() || g_selected_item != old_selected_item) { + client.selectPlayerItem(g_selected_item); old_selected_item = g_selected_item; //std::cout<<"Updating local inventory"<<std::endl; client.getLocalInventory(local_inventory); diff --git a/src/player.cpp b/src/player.cpp index be478e869..d59ae7049 100644 --- a/src/player.cpp +++ b/src/player.cpp @@ -33,6 +33,7 @@ Player::Player(): craftresult_is_preview(true), hp(20), peer_id(PEER_ID_INEXISTENT), + m_selected_item(0), m_pitch(0), m_yaw(0), m_speed(0,0,0), @@ -47,6 +48,11 @@ Player::~Player() delete inventory_backup; } +void Player::wieldItem(u16 item) +{ + m_selected_item = item; +} + void Player::resetInventory() { inventory.clear(); diff --git a/src/player.h b/src/player.h index 45454e9e1..9a6ad93bf 100644 --- a/src/player.h +++ b/src/player.h @@ -105,6 +105,15 @@ public: snprintf(m_name, PLAYERNAME_SIZE, "%s", name); } + virtual void wieldItem(u16 item); + virtual const InventoryItem *getWieldItem() const + { + const InventoryList *list = inventory.getList("main"); + if (list) + return list->getItem(m_selected_item); + return NULL; + } + const char * getName() { return m_name; @@ -146,6 +155,7 @@ public: protected: char m_name[PLAYERNAME_SIZE]; + u16 m_selected_item; f32 m_pitch; f32 m_yaw; v3f m_speed; |