diff --git a/src/transparency.h b/src/transparency.h --- a/src/transparency.h +++ b/src/transparency.h @@ -28,6 +28,7 @@ enum TransparencyOption { typedef uint TransparencyOptionBits; ///< transparency option bits extern TransparencyOptionBits _transparency_opt; extern TransparencyOptionBits _transparency_lock; +extern TransparencyOptionBits _invisibility_opt; /** * Check if the transparency option bit is set @@ -41,6 +42,17 @@ static inline bool IsTransparencySet(Tra } /** + * Check if the invisibility option bit is set + * and if we aren't in the game menu (there's never transparency) + * + * @param to the structure which invisibility option is ask for + */ +static inline bool IsInvisibilitySet(TransparencyOption to) +{ + return (HasBit(_transparency_opt & _invisibility_opt, to) && _game_mode != GM_MENU); +} + +/** * Toggle the transparency option bit * * @param to the transparency option to be toggled @@ -51,6 +63,34 @@ static inline void ToggleTransparency(Tr } /** + * Toggle the invisibility option bit + * + * @param to the structure which invisibility option is toggle + */ +static inline void ToggleInvisibility(TransparencyOption to) +{ + ToggleBit(_invisibility_opt, to); +} + +/** + * Toggles between invisible and solid state. + * If object is transparent, then it is made invisible. + * Used by the keyboard shortcuts. + * + * @param to the object type which invisibility option to toggle + */ +static inline void ToggleInvisibilityWithTransparency(TransparencyOption to) +{ + if (IsInvisibilitySet(to)) { + ClrBit(_invisibility_opt, to); + ClrBit(_transparency_opt, to); + } else { + SetBit(_invisibility_opt, to); + SetBit(_transparency_opt, to); + } +} + +/** * Toggle the transparency lock bit * * @param to the transparency option to be locked or unlocked