diff options
author | Enne Walker <enne.walker@gmail.com> | 2010-05-29 11:09:17 -0400 |
---|---|---|
committer | Enne Walker <enne.walker@gmail.com> | 2010-05-30 08:50:37 -0400 |
commit | 575cfb8db1e87084ae13b9799f74a3b6be75c0c8 (patch) | |
tree | 1274dea0786f6d943de3a7ec360fc6ec1193e25f /crawl-ref/source/viewgeom.cc | |
parent | 7e9196891f4283c40a8db3947f6db8a853724c44 (diff) | |
download | crawl-ref-575cfb8db1e87084ae13b9799f74a3b6be75c0c8.tar.gz crawl-ref-575cfb8db1e87084ae13b9799f74a3b6be75c0c8.zip |
Refactor crawl view buffer.
Rather than using explicit offsets (e.g. buffy[0] and buffy[1]), store
colour, glyph, and tiles for each cell in the view buffer in a struct
with named members. This refactoring will also theoretically allow for
the tiles version to display glyphs instead of tiles.
Diffstat (limited to 'crawl-ref/source/viewgeom.cc')
-rw-r--r-- | crawl-ref/source/viewgeom.cc | 43 |
1 files changed, 37 insertions, 6 deletions
diff --git a/crawl-ref/source/viewgeom.cc b/crawl-ref/source/viewgeom.cc index 0c94687e41..7e4f61c50d 100644 --- a/crawl-ref/source/viewgeom.cc +++ b/crawl-ref/source/viewgeom.cc @@ -228,19 +228,50 @@ class _mlist_col_layout : public _layout // crawl_view_buffer crawl_view_buffer::crawl_view_buffer() - : buffer(NULL) + : m_size(0, 0) + , m_buffer(NULL) { } +crawl_view_buffer::crawl_view_buffer(const coord_def &sz) + : m_size(0, 0) + , m_buffer(NULL) +{ + resize(sz); +} crawl_view_buffer::~crawl_view_buffer() { - delete [] buffer; + delete [] m_buffer; +} + +void crawl_view_buffer::resize(const coord_def &sz) +{ + delete [] m_buffer; + m_size = sz; + m_buffer = new screen_cell_t [ sz.x * sz.y ]; +} + +bool crawl_view_buffer::empty() const +{ + return (m_size.x * m_size.y <= 0); +} + +const crawl_view_buffer &crawl_view_buffer::operator = (const crawl_view_buffer &rhs) +{ + resize(rhs.m_size); + if (rhs.m_buffer) + { + size_t count = sizeof(m_buffer[0]) * m_size.x * m_size.y; + memcpy(m_buffer, rhs.m_buffer, count); + } + return (*this); } -void crawl_view_buffer::size(const coord_def &sz) +void crawl_view_buffer::clear() { - delete [] buffer; - buffer = new screen_buffer_t [ sz.x * sz.y * 2 ]; + delete [] m_buffer; + m_buffer = NULL; + m_size = coord_def(0,0); } // ---------------------------------------------------------------------- @@ -262,7 +293,7 @@ crawl_view_geometry::crawl_view_geometry() void crawl_view_geometry::init_view() { viewhalfsz = viewsz / 2; - vbuf.size(viewsz); + vbuf.resize(viewsz); set_player_at(you.pos(), true); } |