Browse Source

Fix issues with light offset calculation

pull/6480/head
staphen 3 years ago committed by Anders Jenbo
parent
commit
ab1af87bc9
  1. 14
      Source/engine/actor_position.cpp
  2. 6
      Source/engine/actor_position.hpp
  3. 2
      Source/engine/animationinfo.cpp
  4. 6
      Source/player.cpp

14
Source/engine/actor_position.cpp

@ -105,19 +105,17 @@ constexpr std::array<const WalkParameter, 8> WalkParameters { {
} // namespace
DisplacementOf<int8_t> ActorPosition::CalculateWalkingOffset(Direction dir, const AnimationInfo &animInfo, bool pendingProcessAnimation /*= false*/) const
DisplacementOf<int8_t> ActorPosition::CalculateWalkingOffset(Direction dir, const AnimationInfo &animInfo) const
{
DisplacementOf<int16_t> offset = CalculateWalkingOffsetShifted4(dir, animInfo, pendingProcessAnimation);
DisplacementOf<int16_t> offset = CalculateWalkingOffsetShifted4(dir, animInfo);
offset.deltaX >>= 4;
offset.deltaY >>= 4;
return offset;
}
DisplacementOf<int16_t> ActorPosition::CalculateWalkingOffsetShifted4(Direction dir, const AnimationInfo &animInfo, bool pendingProcessAnimation /*= false*/) const
DisplacementOf<int16_t> ActorPosition::CalculateWalkingOffsetShifted4(Direction dir, const AnimationInfo &animInfo) const
{
int8_t velocityProgress = animInfo.currentFrame + 1;
if (pendingProcessAnimation)
velocityProgress += 1;
int16_t velocityProgress = static_cast<int16_t>(animInfo.getAnimationProgress()) * animInfo.numberOfFrames / AnimationInfo::baseValueFraction;
const WalkParameter &walkParameter = WalkParameters[static_cast<size_t>(dir)];
DisplacementOf<int16_t> offset = walkParameter.startingOffset;
DisplacementOf<int16_t> velocity = walkParameter.getVelocity(animInfo.numberOfFrames);
@ -125,9 +123,9 @@ DisplacementOf<int16_t> ActorPosition::CalculateWalkingOffsetShifted4(Direction
return offset;
}
DisplacementOf<int16_t> ActorPosition::CalculateWalkingOffsetShifted8(Direction dir, const AnimationInfo &animInfo, bool pendingProcessAnimation /*= false*/) const
DisplacementOf<int16_t> ActorPosition::CalculateWalkingOffsetShifted8(Direction dir, const AnimationInfo &animInfo) const
{
DisplacementOf<int16_t> offset = CalculateWalkingOffsetShifted4(dir, animInfo, pendingProcessAnimation);
DisplacementOf<int16_t> offset = CalculateWalkingOffsetShifted4(dir, animInfo);
offset.deltaX <<= 4;
offset.deltaY <<= 4;
return offset;

6
Source/engine/actor_position.hpp

@ -20,11 +20,11 @@ struct ActorPosition {
WorldTilePosition temp;
/** @brief Calculates the offset for the walking animation. */
DisplacementOf<int8_t> CalculateWalkingOffset(Direction dir, const AnimationInfo &animInfo, bool pendingProcessAnimation = false) const;
DisplacementOf<int8_t> CalculateWalkingOffset(Direction dir, const AnimationInfo &animInfo) const;
/** @brief Calculates the offset for the walking animation. */
DisplacementOf<int16_t> CalculateWalkingOffsetShifted4(Direction dir, const AnimationInfo &animInfo, bool pendingProcessAnimation = false) const;
DisplacementOf<int16_t> CalculateWalkingOffsetShifted4(Direction dir, const AnimationInfo &animInfo) const;
/** @brief Calculates the offset for the walking animation. */
DisplacementOf<int16_t> CalculateWalkingOffsetShifted8(Direction dir, const AnimationInfo &animInfo, bool pendingProcessAnimation = false) const;
DisplacementOf<int16_t> CalculateWalkingOffsetShifted8(Direction dir, const AnimationInfo &animInfo) const;
/** @brief Returns Pixel velocity while walking. */
DisplacementOf<int16_t> GetWalkingVelocityShifted4(Direction dir, const AnimationInfo &animInfo) const;
/** @brief Returns Pixel velocity while walking. */

2
Source/engine/animationinfo.cpp

@ -61,7 +61,7 @@ int8_t AnimationInfo::getFrameToUseForRendering() const
uint8_t AnimationInfo::getAnimationProgress() const
{
int16_t ticksSinceSequenceStarted = ticksSinceSequenceStarted_;
int16_t ticksSinceSequenceStarted = std::max<int16_t>(0, ticksSinceSequenceStarted_);
int32_t tickModifier = tickModifier_;
if (relevantFramesForDistributing_ <= 0) {

6
Source/player.cpp

@ -149,6 +149,8 @@ void HandleWalkMode(Player &player, Direction dir)
return;
}
player._pdir = dir;
// The player's tile position after finishing this movement action
player.position.future = player.position.tile + dirModeParams.tileAdd;
@ -156,8 +158,6 @@ void HandleWalkMode(Player &player, Direction dir)
player.tempDirection = dirModeParams.dir;
player._pmode = dirModeParams.walkMode;
player._pdir = dir;
}
void StartWalkAnimation(Player &player, Direction dir, bool pmWillBeCalled)
@ -180,8 +180,8 @@ void StartWalk(Player &player, Direction dir, bool pmWillBeCalled)
return;
}
HandleWalkMode(player, dir);
StartWalkAnimation(player, dir, pmWillBeCalled);
HandleWalkMode(player, dir);
}
void ClearStateVariables(Player &player)

Loading…
Cancel
Save