diff options
author | Kae <80987908+Novaenia@users.noreply.github.com> | 2023-07-21 00:58:49 +1000 |
---|---|---|
committer | Kae <80987908+Novaenia@users.noreply.github.com> | 2023-07-21 00:58:49 +1000 |
commit | 4b0bc220e4da1173f742a4973939b139bef562db (patch) | |
tree | 0ff66d5957575fa814fc10b8cd93e3dd378f45dc /source/game/StarMonster.cpp | |
parent | 607be749451aa40e3619e7ceab0927d1fcec8233 (diff) |
Support for changing the game's timescale
Context-specific (like per-world) timescales can also be added later
Diffstat (limited to 'source/game/StarMonster.cpp')
-rw-r--r-- | source/game/StarMonster.cpp | 28 |
1 files changed, 15 insertions, 13 deletions
diff --git a/source/game/StarMonster.cpp b/source/game/StarMonster.cpp index 59084dd..9d5bc7a 100644 --- a/source/game/StarMonster.cpp +++ b/source/game/StarMonster.cpp @@ -441,41 +441,43 @@ void Monster::damagedOther(DamageNotification const& damage) { m_statusController->damagedOther(damage); } -void Monster::update(uint64_t) { +void Monster::update(float dt, uint64_t) { if (!inWorld()) return; + m_movementController->setTimestep(dt); + if (isMaster()) { m_networkedAnimator.setFlipped((m_movementController->facingDirection() == Direction::Left) != m_monsterVariant.reversed); if (m_knockedOut) { - m_knockoutTimer -= WorldTimestep; + m_knockoutTimer -= dt; } else { if (m_scriptComponent.updateReady()) m_physicsForces.set({}); - m_scriptComponent.update(m_scriptComponent.updateDt()); + m_scriptComponent.update(m_scriptComponent.updateDt(dt)); if (shouldDie()) knockout(); } - m_movementController->tickMaster(); + m_movementController->tickMaster(dt); - m_statusController->tickMaster(); - updateStatus(); + m_statusController->tickMaster(dt); + updateStatus(dt); } else { m_netGroup.tickNetInterpolation(WorldTimestep); - m_statusController->tickSlave(); - updateStatus(); + m_statusController->tickSlave(dt); + updateStatus(dt); - m_movementController->tickSlave(); + m_movementController->tickSlave(dt); } if (world()->isServer()) { - m_networkedAnimator.update(WorldTimestep, nullptr); + m_networkedAnimator.update(dt, nullptr); } else { - m_networkedAnimator.update(WorldTimestep, &m_networkedAnimatorDynamicTarget); + m_networkedAnimator.update(dt, &m_networkedAnimatorDynamicTarget); m_networkedAnimatorDynamicTarget.updatePosition(position()); m_scriptedAnimator.update(); @@ -543,12 +545,12 @@ Vec2F Monster::getAbsolutePosition(Vec2F relativePosition) const { return m_movementController->position() + relativePosition; } -void Monster::updateStatus() { +void Monster::updateStatus(float dt) { m_effectEmitter.setSourcePosition("normal", position()); m_effectEmitter.setSourcePosition("mouth", position() + mouthOffset()); m_effectEmitter.setSourcePosition("feet", position() + feetOffset()); m_effectEmitter.setDirection(m_movementController->facingDirection()); - m_effectEmitter.tick(*entityMode()); + m_effectEmitter.tick(dt, *entityMode()); } LuaCallbacks Monster::makeMonsterCallbacks() { |