Files @ r25754:d19207ab5c69
Branch filter:

Location: cpp/openttd-patchpack/source/src/transparency.h - annotation

Patric Stout
Cleanup: remove SLE_NULL and friends

We no longer need them. If you want to remove a field .. just
remove it! Because of the headers in the savegame, on loading,
it will do the right thing and skip the field.

Do remember to bump the savegame version, as otherwise older
clients can still load the game, but will reset the field you
have removed .. that might be unintentially.
r12768:980ae0491352
r12768:980ae0491352
r12768:980ae0491352
r12768:980ae0491352
r12768:980ae0491352
r12768:980ae0491352
r12768:980ae0491352
r9111:983de9c5a848
r7849:cfd99cb69695
r7849:cfd99cb69695
r7849:cfd99cb69695
r7849:cfd99cb69695
r8123:dde0a9a84019
r14201:353d41c4bde7
r14241:a73bb6773a2c
r8123:dde0a9a84019
r7849:cfd99cb69695
r7849:cfd99cb69695
r7849:cfd99cb69695
r7849:cfd99cb69695
r7849:cfd99cb69695
r7849:cfd99cb69695
r7849:cfd99cb69695
r7849:cfd99cb69695
r7849:cfd99cb69695
r7849:cfd99cb69695
r10207:a1fc2f2a33db
r7849:cfd99cb69695
r15734:ae8e2e185874
r8528:2bfd692a054f
r7849:cfd99cb69695
r7849:cfd99cb69695
r17716:f8666779ca30
r7849:cfd99cb69695
r7849:cfd99cb69695
r8528:2bfd692a054f
r7849:cfd99cb69695
r8527:747e853197d7
r8806:1fc0d9e1c2bf
r17624:f2c5f47dceaa
r7849:cfd99cb69695
r7849:cfd99cb69695
r7849:cfd99cb69695
r7849:cfd99cb69695
r7849:cfd99cb69695
r7849:cfd99cb69695
r7849:cfd99cb69695
r7849:cfd99cb69695
r7849:cfd99cb69695
r7928:a80e7e05d6c5
r7849:cfd99cb69695
r7849:cfd99cb69695
r7849:cfd99cb69695
r8806:1fc0d9e1c2bf
r8806:1fc0d9e1c2bf
r8806:1fc0d9e1c2bf
r8806:1fc0d9e1c2bf
r8806:1fc0d9e1c2bf
r8806:1fc0d9e1c2bf
r8806:1fc0d9e1c2bf
r8806:1fc0d9e1c2bf
r8806:1fc0d9e1c2bf
r8806:1fc0d9e1c2bf
r8806:1fc0d9e1c2bf
r7849:cfd99cb69695
r7849:cfd99cb69695
r8527:747e853197d7
r7849:cfd99cb69695
r7849:cfd99cb69695
r7849:cfd99cb69695
r7932:6b853bdb39ea
r7849:cfd99cb69695
r7849:cfd99cb69695
r8527:747e853197d7
r8806:1fc0d9e1c2bf
r8806:1fc0d9e1c2bf
r8806:1fc0d9e1c2bf
r8806:1fc0d9e1c2bf
r8806:1fc0d9e1c2bf
r8806:1fc0d9e1c2bf
r8806:1fc0d9e1c2bf
r8806:1fc0d9e1c2bf
r8806:1fc0d9e1c2bf
r8806:1fc0d9e1c2bf
r8806:1fc0d9e1c2bf
r8806:1fc0d9e1c2bf
r8806:1fc0d9e1c2bf
r8806:1fc0d9e1c2bf
r8806:1fc0d9e1c2bf
r8806:1fc0d9e1c2bf
r8806:1fc0d9e1c2bf
r8806:1fc0d9e1c2bf
r8806:1fc0d9e1c2bf
r8806:1fc0d9e1c2bf
r8806:1fc0d9e1c2bf
r8806:1fc0d9e1c2bf
r8806:1fc0d9e1c2bf
r8806:1fc0d9e1c2bf
r8806:1fc0d9e1c2bf
r8806:1fc0d9e1c2bf
r8806:1fc0d9e1c2bf
r8806:1fc0d9e1c2bf
r8527:747e853197d7
r8527:747e853197d7
r8527:747e853197d7
r8527:747e853197d7
r8527:747e853197d7
r8527:747e853197d7
r8527:747e853197d7
r8527:747e853197d7
r8527:747e853197d7
r8527:747e853197d7
r7849:cfd99cb69695
r7849:cfd99cb69695
r8527:747e853197d7
r8527:747e853197d7
r8527:747e853197d7
r8658:a4238b2050b2
r7849:cfd99cb69695
r8527:747e853197d7
r8527:747e853197d7
r7849:cfd99cb69695
r7849:cfd99cb69695
r7849:cfd99cb69695
r7849:cfd99cb69695
r7849:cfd99cb69695
r7849:cfd99cb69695
/*
 * This file is part of OpenTTD.
 * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2.
 * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
 * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see <http://www.gnu.org/licenses/>.
 */

/** @file transparency.h Functions related to transparency. */

#ifndef TRANSPARENCY_H
#define TRANSPARENCY_H

#include "gfx_func.h"
#include "openttd.h"
#include "core/bitmath_func.hpp"

/**
 * Transparency option bits: which position in _transparency_opt stands for which transparency.
 * If you change the order, change the order of the ShowTransparencyToolbar() stuff in transparency_gui.cpp too.
 * If you add or remove an option don't forget to change the transparency 'hot keys' in main_gui.cpp.
 */
enum TransparencyOption {
	TO_SIGNS = 0,  ///< signs
	TO_TREES,      ///< trees
	TO_HOUSES,     ///< town buildings
	TO_INDUSTRIES, ///< industries
	TO_BUILDINGS,  ///< company buildings - depots, stations, HQ, ...
	TO_BRIDGES,    ///< bridges
	TO_STRUCTURES, ///< other objects such as transmitters and lighthouses
	TO_CATENARY,   ///< catenary
	TO_LOADING,    ///< loading indicators
	TO_END,
	TO_INVALID,    ///< Invalid transparency option
};

typedef uint TransparencyOptionBits; ///< transparency option bits
extern TransparencyOptionBits _transparency_opt;
extern TransparencyOptionBits _transparency_lock;
extern TransparencyOptionBits _invisibility_opt;
extern byte _display_opt;

/**
 * Check if the transparency option bit is set
 * and if we aren't in the game menu (there's never transparency)
 *
 * @param to the structure which transparency option is ask for
 */
static inline bool IsTransparencySet(TransparencyOption to)
{
	return (HasBit(_transparency_opt, to) && _game_mode != GM_MENU);
}

/**
 * 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
 */
static inline void ToggleTransparency(TransparencyOption to)
{
	ToggleBit(_transparency_opt, to);
}

/**
 * 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
 */
static inline void ToggleTransparencyLock(TransparencyOption to)
{
	ToggleBit(_transparency_lock, to);
}

/** Set or clear all non-locked transparency options */
static inline void ResetRestoreAllTransparency()
{
	/* if none of the non-locked options are set */
	if ((_transparency_opt & ~_transparency_lock) == 0) {
		/* set all non-locked options */
		_transparency_opt |= GB(~_transparency_lock, 0, TO_END);
	} else {
		/* clear all non-locked options */
		_transparency_opt &= _transparency_lock;
	}

	MarkWholeScreenDirty();
}

#endif /* TRANSPARENCY_H */