Refactor Missile direction/frame group handling #7878
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
PR Description: Clarify and Encapsulate Missile Frame Group Handling
Problem
The
Missile
struct contains a member_mimfnum
, originally defined as anint
, which is used inconsistently across the codebase in three distinct ways:int
(e.g., for animation frame group selection)Direction
(8-directional enum)Direction16
(16-directional enum, used for finer visual rotation)This loose usage made the intent behind
_mimfnum
ambiguous and error-prone, requiring frequent manual casting and encouraging magic numbers.Solution
This PR improves encapsulation and usability of
_mimfnum
by:_mimfnum
a private member ofMissile
setDirection(Direction)
setDirection(Direction16)
getDirection()
,getDirection16()
setFrameGroupRaw(int)
getFrameGroupRaw()
setFrameGroup<Enum>()
andgetFrameGroup<Enum>()
setDefaultFrameGroup()
(shorthand forsetFrameGroupRaw(0)
)Benefits
missile.setDirection(Direction::SouthEast)
static_cast
s at call sites_mimfnum
Example Usage
Before:
After:
Or for custom frame groups:
This refactor lays a strong foundation for extending missile behavior safely and clearly while preserving compatibility with save/load systems that still require reading and writing
_mimfnum
as anint
.