X-Git-Url: https://git.lizzy.rs/?a=blobdiff_plain;f=src%2Fplayer.cpp;h=d3ba5c2c20e9944e531f14506e289d81fd0f7dde;hb=d77ea764768f5cde9e8f0781356a67d723aa7609;hp=c7036663a63af13e35e19686989574a35ffc47a8;hpb=3eac24946418d787697077cc1806856e514ba5f4;p=dragonfireclient.git diff --git a/src/player.cpp b/src/player.cpp index c7036663a..d3ba5c2c2 100644 --- a/src/player.cpp +++ b/src/player.cpp @@ -36,7 +36,6 @@ Player::Player(const char *name, IItemDefManager *idef): inventory.clear(); inventory.addList("main", PLAYER_INVENTORY_SIZE); - inventory.addList("hand", 1); InventoryList *craft = inventory.addList("craft", 9); craft->setWidth(3); inventory.addList("craftpreview", 1); @@ -76,25 +75,44 @@ Player::Player(const char *name, IItemDefManager *idef): hud_hotbar_itemcount = HUD_HOTBAR_ITEMCOUNT_DEFAULT; m_player_settings.readGlobalSettings(); - g_settings->registerChangedCallback("free_move", &Player::settingsChangedCallback, - &m_player_settings); - g_settings->registerChangedCallback("fast_move", &Player::settingsChangedCallback, - &m_player_settings); - g_settings->registerChangedCallback("continuous_forward", + // Register player setting callbacks + for (const std::string &name : m_player_settings.setting_names) + g_settings->registerChangedCallback(name, &Player::settingsChangedCallback, &m_player_settings); - g_settings->registerChangedCallback("always_fly_fast", - &Player::settingsChangedCallback, &m_player_settings); - g_settings->registerChangedCallback("aux1_descends", - &Player::settingsChangedCallback, &m_player_settings); - g_settings->registerChangedCallback( - "noclip", &Player::settingsChangedCallback, &m_player_settings); } Player::~Player() { + // m_player_settings becomes invalid, remove callbacks + for (const std::string &name : m_player_settings.setting_names) + g_settings->deregisterChangedCallback(name, + &Player::settingsChangedCallback, &m_player_settings); clearHud(); } +void Player::setWieldIndex(u16 index) +{ + const InventoryList *mlist = inventory.getList("main"); + m_wield_index = MYMIN(index, mlist ? mlist->getSize() : 0); +} + +ItemStack &Player::getWieldedItem(ItemStack *selected, ItemStack *hand) const +{ + assert(selected); + + const InventoryList *mlist = inventory.getList("main"); // TODO: Make this generic + const InventoryList *hlist = inventory.getList("hand"); + + if (mlist && m_wield_index < mlist->getSize()) + *selected = mlist->getItem(m_wield_index); + + if (hand && hlist) + *hand = hlist->getItem(0); + + // Return effective tool item + return (hand && selected->name.empty()) ? *hand : *selected; +} + u32 Player::addHud(HudElement *toadd) { MutexAutoLock lock(m_mutex); @@ -144,11 +162,13 @@ void Player::clearHud() void PlayerSettings::readGlobalSettings() { free_move = g_settings->getBool("free_move"); + pitch_move = g_settings->getBool("pitch_move"); fast_move = g_settings->getBool("fast_move"); continuous_forward = g_settings->getBool("continuous_forward"); always_fly_fast = g_settings->getBool("always_fly_fast"); aux1_descends = g_settings->getBool("aux1_descends"); noclip = g_settings->getBool("noclip"); + autojump = g_settings->getBool("autojump"); } void Player::settingsChangedCallback(const std::string &name, void *data)