change weapon for ranged skills

Signed-off-by: Pavel Okhlopkov <pavel.okhlopkov@flant.com>
This commit is contained in:
Pavel Okhlopkov 2026-04-10 23:01:16 +03:00
parent fe1dc5e02b
commit 6ba0edc2fb
6 changed files with 176 additions and 4 deletions

View file

@ -74,6 +74,10 @@ public:
bool isWeaponsSheathed() const { return weaponsSheathed_; }
void toggleWeaponsSheathed() { weaponsSheathed_ = !weaponsSheathed_; }
// Ranged weapon swap: temporarily show ranged weapon in right hand
void showRangedWeapon(bool show);
bool isShowingRanged() const { return showingRanged_; }
// Saved skin state accessors (used by game_screen.cpp for equipment re-compositing)
const std::string& getBodySkinPath() const { return bodySkinPath_; }
const std::vector<std::string>& getUnderwearPaths() const { return underwearPaths_; }
@ -96,6 +100,7 @@ private:
uint32_t cloakTextureSlotIndex_ = 0;
bool weaponsSheathed_ = false;
bool showingRanged_ = false;
};
} // namespace core

View file

@ -943,6 +943,10 @@ public:
using MeleeSwingCallback = std::function<void(uint32_t spellId)>;
void setMeleeSwingCallback(MeleeSwingCallback cb) { meleeSwingCallback_ = std::move(cb); }
// Ranged weapon swap callback — show=true: swap to ranged weapon, false: back to melee
using RangedWeaponSwapCallback = std::function<void(bool show)>;
void setRangedWeaponSwapCallback(RangedWeaponSwapCallback cb) { rangedWeaponSwapCallback_ = std::move(cb); }
// Spell cast animation callbacks — true=start cast/channel, false=finish/cancel
// guid: caster (may be player or another unit), isChannel: channel vs regular cast
// castType: DIRECTED (unit target), OMNI (self/no target), AREA (ground AoE)
@ -2399,6 +2403,13 @@ public:
auto& knockBackCallbackRef() { return knockBackCallback_; }
auto& lootWindowCallbackRef() { return lootWindowCallback_; }
auto& meleeSwingCallbackRef() { return meleeSwingCallback_; }
auto& rangedWeaponSwapCallbackRef() { return rangedWeaponSwapCallback_; }
void suppressNextMeleeSwingAnim() { suppressMeleeSwingAnim_ = true; }
bool consumeSuppressMeleeSwingAnim() {
bool v = suppressMeleeSwingAnim_;
suppressMeleeSwingAnim_ = false;
return v;
}
auto& mountCallbackRef() { return mountCallback_; }
auto& npcAggroCallbackRef() { return npcAggroCallback_; }
auto& npcDeathCallbackRef() { return npcDeathCallback_; }
@ -3436,6 +3447,8 @@ private:
AppearanceChangedCallback appearanceChangedCallback_;
GhostStateCallback ghostStateCallback_;
MeleeSwingCallback meleeSwingCallback_;
RangedWeaponSwapCallback rangedWeaponSwapCallback_;
bool suppressMeleeSwingAnim_ = false;
// lastMeleeSwingMs_ moved to CombatHandler
SpellCastAnimCallback spellCastAnimCallback_;
SpellCastFailedCallback spellCastFailedCallback_;