summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/client.cpp8
-rw-r--r--src/client.h4
-rw-r--r--src/game.cpp1
-rw-r--r--src/player.cpp6
-rw-r--r--src/player.h10
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;