summaryrefslogtreecommitdiffstats
path: root/crawl-ref/source/viewgeom.cc
diff options
context:
space:
mode:
authorEnne Walker <enne.walker@gmail.com>2010-05-29 11:09:17 -0400
committerEnne Walker <enne.walker@gmail.com>2010-05-30 08:50:37 -0400
commit575cfb8db1e87084ae13b9799f74a3b6be75c0c8 (patch)
tree1274dea0786f6d943de3a7ec360fc6ec1193e25f /crawl-ref/source/viewgeom.cc
parent7e9196891f4283c40a8db3947f6db8a853724c44 (diff)
downloadcrawl-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.cc43
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);
}