Веб-сайт самохостера Lotigara

summaryrefslogtreecommitdiff
path: root/source/game/StarPlayer.cpp
diff options
context:
space:
mode:
authorKae <80987908+Novaenia@users.noreply.github.com>2025-05-31 15:31:38 +1000
committerKae <80987908+Novaenia@users.noreply.github.com>2025-05-31 15:31:38 +1000
commit8e381cb362f8d40dffc3dca610bb70c9b3e7b94d (patch)
tree96b35cff1631aa2b120b33fb3fa657d26907fd41 /source/game/StarPlayer.cpp
parent50a64f949a12f5e6db94724afa18b08b755eb5e7 (diff)
armor: support for flipDirectives, fix activeItem arm frames with directives breaking on custom armor
Diffstat (limited to 'source/game/StarPlayer.cpp')
-rw-r--r--source/game/StarPlayer.cpp22
1 files changed, 13 insertions, 9 deletions
diff --git a/source/game/StarPlayer.cpp b/source/game/StarPlayer.cpp
index facde2e..151163f 100644
--- a/source/game/StarPlayer.cpp
+++ b/source/game/StarPlayer.cpp
@@ -1025,14 +1025,21 @@ void Player::update(float dt, uint64_t) {
m_humanoid->setDance({});
bool isClient = world()->isClient();
- if (isClient)
- m_armor->setupHumanoidClothingDrawables(*m_humanoid, forceNude());
m_tools->suppressItems(suppressedItems);
m_tools->tick(dt, m_shifting, m_pendingMoves);
- if (auto overrideFacingDirection = m_tools->setupHumanoidHandItems(*m_humanoid, position(), aimPosition()))
- m_movementController->controlFace(*overrideFacingDirection);
+ Direction facingDirection = m_movementController->facingDirection();
+
+ auto overrideFacingDirection = m_tools->setupHumanoidHandItems(*m_humanoid, position(), aimPosition());
+ if (overrideFacingDirection)
+ m_movementController->controlFace(facingDirection = *overrideFacingDirection);
+
+ m_humanoid->setFacingDirection(facingDirection);
+ m_humanoid->setMovingBackwards(facingDirection != m_movementController->movingDirection());
+
+ if (isClient)
+ m_armor->setupHumanoidClothingDrawables(*m_humanoid, forceNude());
m_effectsAnimator->resetTransformationGroup("flip");
if (m_movementController->facingDirection() == Direction::Left)
@@ -1074,7 +1081,7 @@ void Player::update(float dt, uint64_t) {
m_effectEmitter->setSourcePosition("primary", handPosition(ToolHand::Primary) + position());
m_effectEmitter->setSourcePosition("alt", handPosition(ToolHand::Alt) + position());
- m_effectEmitter->setDirection(facingDirection());
+ m_effectEmitter->setDirection(facingDirection);
m_effectEmitter->tick(dt, *entityMode());
@@ -1089,7 +1096,7 @@ void Player::update(float dt, uint64_t) {
}
if (calculateHeadRotation) { // master or not an OpenStarbound player
float headRotation = 0.f;
- if (Humanoid::globalHeadRotation() && (m_humanoid->primaryHandHoldingItem() || m_humanoid->altHandHoldingItem() || m_humanoid->dance())) {
+ if (Humanoid::globalHeadRotation() && (m_humanoid->handHoldingItem(ToolHand::Primary) || m_humanoid->handHoldingItem(ToolHand::Alt) || m_humanoid->dance())) {
auto primary = m_tools->primaryHandItem();
auto alt = m_tools->altHandItem();
String const disableFlag = "disableHeadRotation";
@@ -1108,9 +1115,6 @@ void Player::update(float dt, uint64_t) {
}
}
- m_humanoid->setFacingDirection(m_movementController->facingDirection());
- m_humanoid->setMovingBackwards(m_movementController->facingDirection() != m_movementController->movingDirection());
-
m_pendingMoves.clear();
if (isClient)