rubidium@6871: /* $Id$ */ rubidium@6871: richk@10724: /** @file transparency.h Functions related to transparency. */ rubidium@6871: rubidium@6871: #ifndef TRANSPARENCY_H rubidium@6871: #define TRANSPARENCY_H rubidium@6871: rubidium@6872: #include "gfx_func.h" rubidium@6872: rubidium@6871: /** rubidium@6871: * Transparency option bits: which position in _transparency_opt stands for which transparency. rubidium@6871: * If you change the order, change the order of the ShowTransparencyToolbar() stuff in transparency_gui.cpp too. rubidium@6871: * If you add or remove an option don't forget to change the transparency 'hot keys' in main_gui.cpp. rubidium@6871: */ rubidium@6871: enum TransparencyOption { rubidium@6871: TO_SIGNS = 0, ///< signs rubidium@6871: TO_TREES, ///< trees rubidium@6871: TO_HOUSES, ///< town buildings rubidium@6871: TO_INDUSTRIES, ///< industries rubidium@6871: TO_BUILDINGS, ///< player buildings - depots, stations, HQ, ... rubidium@6871: TO_BRIDGES, ///< bridges rubidium@6871: TO_STRUCTURES, ///< unmovable structures richk@6878: TO_CATENARY, ///< catenary rubidium@6871: TO_LOADING, ///< loading indicators rubidium@6871: TO_END, rubidium@6871: }; rubidium@6871: richk@6878: typedef uint TransparencyOptionBits; ///< transparency option bits rubidium@6871: extern TransparencyOptionBits _transparency_opt; richk@6878: extern TransparencyOptionBits _transparency_lock; richk@10184: extern TransparencyOptionBits _invisibility_opt; rubidium@6871: rubidium@6871: /** rubidium@6871: * Check if the transparency option bit is set rubidium@6871: * and if we aren't in the game menu (there's never transparency) rubidium@6871: * rubidium@6871: * @param to the structure which transparency option is ask for rubidium@6871: */ rubidium@6871: static inline bool IsTransparencySet(TransparencyOption to) rubidium@6871: { rubidium@6871: return (HasBit(_transparency_opt, to) && _game_mode != GM_MENU); rubidium@6871: } rubidium@6871: rubidium@6871: /** richk@10184: * Check if the invisibility option bit is set richk@10184: * and if we aren't in the game menu (there's never transparency) richk@10184: * richk@10184: * @param to the structure which invisibility option is ask for richk@10184: */ richk@10184: static inline bool IsInvisibilitySet(TransparencyOption to) richk@10184: { richk@10184: return (HasBit(_transparency_opt & _invisibility_opt, to) && _game_mode != GM_MENU); richk@10184: } richk@10184: richk@10184: /** rubidium@6871: * Toggle the transparency option bit rubidium@6871: * richk@6878: * @param to the transparency option to be toggled rubidium@6871: */ rubidium@6871: static inline void ToggleTransparency(TransparencyOption to) rubidium@6871: { rubidium@6871: ToggleBit(_transparency_opt, to); rubidium@6871: } rubidium@6871: richk@6878: /** richk@10184: * Toggle the invisibility option bit richk@10184: * richk@10184: * @param to the structure which invisibility option is toggle richk@10184: */ richk@10184: static inline void ToggleInvisibility(TransparencyOption to) richk@10184: { richk@10184: ToggleBit(_invisibility_opt, to); richk@10184: } richk@10184: richk@10184: /** richk@10184: * Toggles between invisible and solid state. richk@10184: * If object is transparent, then it is made invisible. richk@10184: * Used by the keyboard shortcuts. richk@10184: * richk@10184: * @param to the object type which invisibility option to toggle richk@10184: */ richk@10184: static inline void ToggleInvisibilityWithTransparency(TransparencyOption to) richk@10184: { richk@10184: if (IsInvisibilitySet(to)) { richk@10184: ClrBit(_invisibility_opt, to); richk@10184: ClrBit(_transparency_opt, to); richk@10184: } else { richk@10184: SetBit(_invisibility_opt, to); richk@10184: SetBit(_transparency_opt, to); richk@10184: } richk@10184: } richk@10184: richk@10184: /** richk@6878: * Toggle the transparency lock bit richk@6878: * richk@6878: * @param to the transparency option to be locked or unlocked richk@6878: */ richk@6878: static inline void ToggleTransparencyLock(TransparencyOption to) richk@6878: { richk@6878: ToggleBit(_transparency_lock, to); richk@6878: } richk@6878: richk@6878: /** Set or clear all non-locked transparency options */ rubidium@6871: static inline void ResetRestoreAllTransparency() rubidium@6871: { richk@6878: /* if none of the non-locked options are set */ richk@6878: if ((_transparency_opt & ~_transparency_lock) == 0) { richk@6878: /* set all non-locked options */ richk@6878: _transparency_opt |= GB(~_transparency_lock, 0, TO_END); rubidium@6871: } else { richk@6878: /* clear all non-locked options */ richk@6878: _transparency_opt &= _transparency_lock; rubidium@6871: } rubidium@6871: rubidium@6871: MarkWholeScreenDirty(); rubidium@6871: } rubidium@6871: rubidium@6871: #endif /* TRANSPARENCY_H */