35#ifndef TCOD_CONSOLE_TYPES_HPP_
36#define TCOD_CONSOLE_TYPES_HPP_
54typedef std::unique_ptr<struct TCOD_Console, ConsoleDeleter>
ConsolePtr;
78 TCODLIB_BEGIN_IGNORE_DEPRECATIONS
82 Console() : Console{0, 0} {}
89 explicit Console(
int width,
int height) : console_(
TCOD_console_new(width, height)) {
97 explicit Console(
const std::array<int, 2>& size) : Console{size[0], size[1]} {}
101 explicit Console(
const Console& other) : Console{other.console_->w, other.console_->h} {
102 std::copy(other.console_->begin(), other.console_->end(), console_->begin());
109 explicit Console(
ConsolePtr ptr) : console_{std::move(ptr)} {
110 if (!console_)
throw std::invalid_argument(
"Pointer must not be nullptr.");
118 if (!console_)
throw std::invalid_argument(
"TCOD_Console pointer must not be nullptr.");
123 Console& operator=(
const Console& rhs) {
124 if (console_->w != rhs.console_->w || console_->h != rhs.console_->h) {
125 *
this = Console{{rhs.console_->w, rhs.console_->h}};
127 std::copy(rhs.console_->begin(), rhs.console_->end(), console_->begin());
133 Console(Console&&)
noexcept =
default;
137 Console& operator=(Console&& rhs)
noexcept {
144 ~Console()
noexcept =
default;
148 friend void swap(Console& lhs, Console& rhs)
noexcept {
150 swap(lhs.console_, rhs.console_);
155 [[nodiscard]]
operator TCOD_Console&() {
return *console_; }
159 [[nodiscard]]
operator const TCOD_Console&()
const {
return *console_; }
163 [[nodiscard]]
auto get()
noexcept ->
TCOD_Console* {
return console_.get(); }
167 [[nodiscard]]
auto get()
const noexcept ->
const TCOD_Console* {
return console_.get(); }
173 auto release()
noexcept ->
TCOD_Console* {
return console_.release(); }
177 [[nodiscard]]
auto begin()
noexcept ->
TCOD_ConsoleTile* {
return console_->tiles; }
181 [[nodiscard]]
auto begin()
const noexcept ->
const TCOD_ConsoleTile* {
return console_->tiles; }
185 [[nodiscard]]
auto end()
noexcept ->
TCOD_ConsoleTile* {
return console_->tiles + console_->elements; }
189 [[nodiscard]]
auto end()
const noexcept ->
const TCOD_ConsoleTile* {
return console_->tiles + console_->elements; }
193 [[nodiscard]]
auto get_width()
const noexcept ->
int {
return console_->w; }
197 [[nodiscard]]
auto get_height()
const noexcept ->
int {
return console_->h; }
207 [[nodiscard]]
auto get_shape()
const noexcept -> std::array<int, 2> {
return {console_->w, console_->h}; }
222 void clear(
const TCOD_ConsoleTile& tile = {0x20, {255, 255, 255, 255}, {0, 0, 0, 255}})
noexcept {
223 for (
auto& it : *
this) it = tile;
228 [[nodiscard]]
auto operator[](
const std::array<int, 2>& xy)
noexcept ->
TCOD_ConsoleTile& {
229 return console_->tiles[get_index(xy)];
234 [[nodiscard]]
auto operator[](
const std::array<int, 2>& xy)
const noexcept ->
const TCOD_ConsoleTile& {
235 return console_->tiles[get_index(xy)];
242 [[nodiscard]]
auto at(
const std::array<int, 2>& xy) ->
TCOD_ConsoleTile& {
return console_->tiles[bounds_check(xy)]; }
248 [[nodiscard]]
auto at(
const std::array<int, 2>& xy)
const ->
const TCOD_ConsoleTile& {
249 return console_->tiles[bounds_check(xy)];
256 [[nodiscard]]
auto at(
int x,
int y) ->
TCOD_ConsoleTile& {
return at({x, y}); }
262 [[nodiscard]]
auto at(
int x,
int y)
const ->
const TCOD_ConsoleTile& {
return at({x, y}); }
266 [[nodiscard]]
bool in_bounds(
const std::array<int, 2>& xy)
const noexcept {
return console_->in_bounds(xy); }
267 TCODLIB_END_IGNORE_DEPRECATIONS
275 auto bounds_check(
const std::array<int, 2>& xy)
const ->
int {
276 if (!in_bounds(xy)) {
277 throw std::out_of_range(
278 std::string(
"Out of bounds lookup {") + std::to_string(xy[0]) +
", " + std::to_string(xy[1]) +
279 "} on console of shape {" + std::to_string(console_->w) +
", " + std::to_string(console_->h) +
"}.");
281 return get_index(xy);
288 [[nodiscard]]
auto get_index(
const std::array<int, 2>& xy)
const noexcept ->
int {
289 return console_->w * xy[1] + xy[0];
Various console functions.
const char * TCOD_get_error(void)
Return the last error message.
void TCOD_console_delete(TCOD_Console *console)
Delete a console.
TCOD_Console * TCOD_console_new(int w, int h)
Return a new console with a specific number of columns and rows.
The libtcod namespace.
Definition color.hpp:45
std::unique_ptr< struct TCOD_Console, ConsoleDeleter > ConsolePtr
A unique pointer to a TCOD_Console.
Definition console_types.hpp:54
A libtcod console containing a grid of tiles with {ch, fg, bg} information.
Definition console.h:121
The raw data for a single TCOD_Console tile.
Definition console.h:87
Definition console_types.hpp:46