summaryrefslogtreecommitdiffstats
path: root/crawl-ref/source
diff options
context:
space:
mode:
authorennewalker <ennewalker@c06c8d41-db1a-0410-9941-cceddc491573>2008-09-27 15:12:42 +0000
committerennewalker <ennewalker@c06c8d41-db1a-0410-9941-cceddc491573>2008-09-27 15:12:42 +0000
commitefde5f5a0ac8266096eaf03b82cfaf18db0d7c29 (patch)
tree25ed5bee6cafca50fca81b47de30ffc1a3e658d3 /crawl-ref/source
parent074c9aa085ffb0538baf9eb247d14454ca040540 (diff)
downloadcrawl-ref-efde5f5a0ac8266096eaf03b82cfaf18db0d7c29.tar.gz
crawl-ref-efde5f5a0ac8266096eaf03b82cfaf18db0d7c29.zip
[2021068] Projectiles, explosions, beams, etc. now drawn again in tiles version.
git-svn-id: https://crawl-ref.svn.sourceforge.net/svnroot/crawl-ref/trunk@7039 c06c8d41-db1a-0410-9941-cceddc491573
Diffstat (limited to 'crawl-ref/source')
-rw-r--r--crawl-ref/source/beam.cc10
-rw-r--r--crawl-ref/source/tile2.cc9
-rw-r--r--crawl-ref/source/tilereg.cc36
-rw-r--r--crawl-ref/source/tilereg.h10
-rw-r--r--crawl-ref/source/tiles.h1
-rw-r--r--crawl-ref/source/tilesdl.cc10
-rw-r--r--crawl-ref/source/tilesdl.h3
-rw-r--r--crawl-ref/source/view.cc1
8 files changed, 64 insertions, 16 deletions
diff --git a/crawl-ref/source/beam.cc b/crawl-ref/source/beam.cc
index 483e8cede8..cafdde92a4 100644
--- a/crawl-ref/source/beam.cc
+++ b/crawl-ref/source/beam.cc
@@ -175,8 +175,7 @@ void zap_animation(int colour, const monsters *mon, bool force)
if (in_los_bounds(drawp))
{
#ifdef USE_TILE
- // TODO enne - fixme!
- TileDrawBolt(drawp.x-1, drawp.y-1, tileidx_zap(colour));
+ tiles.add_overlay(p, tileidx_zap(colour));
#else
view_update();
cgotoxy(drawp.x, drawp.y, GOTO_DNGN);
@@ -1753,10 +1752,9 @@ void fire_beam(bolt &pbolt, item_def *item, bool drop_item)
if (tile_beam == -1)
tile_beam = tileidx_bolt(pbolt);
- if (tile_beam != -1 && in_los_bounds(drawpos)
- && (testpos != you.pos()))
+ if (tile_beam != -1 && in_los_bounds(drawpos))
{
- TileDrawBolt(drawpos.x-1, drawpos.y-1, tile_beam);
+ tiles.add_overlay(testpos, tile_beam);
delay(15);
}
else
@@ -5370,7 +5368,7 @@ static void _explosion_cell(bolt &beam, const coord_def& p, bool drawOnly,
{
#ifdef USE_TILE
if (in_los_bounds(drawpos))
- TileDrawBolt(drawpos.x-1, drawpos.y-1, tileidx_bolt(beam));
+ tiles.add_overlay(realpos, tileidx_bolt(beam));
#else
// bounds check
if (in_los_bounds(drawpos))
diff --git a/crawl-ref/source/tile2.cc b/crawl-ref/source/tile2.cc
index 3105716c2d..0923174656 100644
--- a/crawl-ref/source/tile2.cc
+++ b/crawl-ref/source/tile2.cc
@@ -65,15 +65,6 @@ int get_floor_special_tile_idx()
return special_tile_idx;
}
-void TileDrawBolt(int x, int y, int fg)
-{
- // TODO enne
-#if 0
- t1buf[x+1][y+1] = fg | TILE_FLAG_FLYING;
- _update_single_grid(x, y);
-#endif
-}
-
void WallIdx(int &wall, int &floor, int &special)
{
// Note: This function must be deterministic.
diff --git a/crawl-ref/source/tilereg.cc b/crawl-ref/source/tilereg.cc
index 75b9c1016c..6d241280c5 100644
--- a/crawl-ref/source/tilereg.cc
+++ b/crawl-ref/source/tilereg.cc
@@ -725,6 +725,29 @@ void DungeonRegion::render()
glDrawArrays(GL_QUADS, 0, m_verts.size());
}
+ m_verts.clear();
+ for (unsigned int i = 0; i < m_overlays.size(); i++)
+ {
+ // overlays must be from the main image and must be in LOS.
+ if (!crawl_view.in_grid_los(m_overlays[i].gc))
+ continue;
+
+ int idx = m_overlays[i].idx;
+ if (idx >= TILE_MAIN_MAX)
+ continue;
+
+ int x = m_overlays[i].gc.x - m_cx_to_gx;
+ int y = m_overlays[i].gc.y - m_cy_to_gy;
+ add_quad(TEX_DEFAULT, idx, x, y);
+ }
+ if (m_verts.size() > 0)
+ {
+ m_image->m_textures[TEX_DEFAULT].bind();
+ glVertexPointer(2, GL_FLOAT, sizeof(tile_vert), &m_verts[0].pos_x);
+ glTexCoordPointer(2, GL_FLOAT, sizeof(tile_vert), &m_verts[0].tex_x);
+ glDrawArrays(GL_QUADS, 0, m_verts.size());
+ }
+
// Draw text labels
// TODO enne - add an option for this
// TODO enne - be more intelligent about not covering stuff up
@@ -1019,6 +1042,19 @@ void DungeonRegion::add_text_tag(text_tag_type type, const std::string &tag,
m_tags[type].push_back(t);
}
+void DungeonRegion::add_overlay(const coord_def &gc, int idx)
+{
+ tile_overlay over;
+ over.gc = gc;
+ over.idx = idx;
+
+ m_overlays.push_back(over);
+}
+
+void DungeonRegion::clear_overlays()
+{
+ m_overlays.clear();
+}
InventoryTile::InventoryTile()
{
diff --git a/crawl-ref/source/tilereg.h b/crawl-ref/source/tilereg.h
index 4c1913b5a8..fbfe411318 100644
--- a/crawl-ref/source/tilereg.h
+++ b/crawl-ref/source/tilereg.h
@@ -247,6 +247,9 @@ public:
const coord_def &get_cursor() const { return m_cursor[CURSOR_MOUSE]; }
+ void add_overlay(const coord_def &gc, int idx);
+ void clear_overlays();
+
protected:
void draw_background(unsigned int bg, unsigned int x, unsigned int y);
void draw_mcache(mcache_entry *entry, unsigned int x, unsigned int y);
@@ -263,6 +266,13 @@ protected:
int m_cy_to_gy;
coord_def m_cursor[CURSOR_MAX];
std::vector<TextTag> m_tags[TAG_MAX];
+
+ struct tile_overlay
+ {
+ coord_def gc;
+ int idx;
+ };
+ std::vector<tile_overlay> m_overlays;
};
class InventoryTile
diff --git a/crawl-ref/source/tiles.h b/crawl-ref/source/tiles.h
index 8c297beb6a..f32c6ee1c5 100644
--- a/crawl-ref/source/tiles.h
+++ b/crawl-ref/source/tiles.h
@@ -114,7 +114,6 @@ void TileResizeScreen(int x, int y);
// display tile cursor, returns old cursor value there
int TileDrawCursor(int x, int y, int flag);
// display bolts
-void TileDrawBolt(int x, int y, int fg);
void TileNewLevel(bool first_time);
// edit player tile
diff --git a/crawl-ref/source/tilesdl.cc b/crawl-ref/source/tilesdl.cc
index 886d59f8f1..95d2321555 100644
--- a/crawl-ref/source/tilesdl.cc
+++ b/crawl-ref/source/tilesdl.cc
@@ -1199,3 +1199,13 @@ const coord_def &TilesFramework::get_cursor() const
{
return (m_region_tile->get_cursor());
}
+
+void TilesFramework::add_overlay(const coord_def &gc, int idx)
+{
+ m_region_tile->add_overlay(gc, idx);
+}
+
+void TilesFramework::clear_overlays()
+{
+ m_region_tile->clear_overlays();
+}
diff --git a/crawl-ref/source/tilesdl.h b/crawl-ref/source/tilesdl.h
index ff7cd37df8..13440bb605 100644
--- a/crawl-ref/source/tilesdl.h
+++ b/crawl-ref/source/tilesdl.h
@@ -118,6 +118,9 @@ public:
bool initialise_items();
const coord_def &get_cursor() const;
+
+ void add_overlay(const coord_def &gc, int idx);
+ void clear_overlays();
protected:
int load_font(const char *font_file, int font_size,
diff --git a/crawl-ref/source/view.cc b/crawl-ref/source/view.cc
index 63a2a0d5b3..0d4e9e5988 100644
--- a/crawl-ref/source/view.cc
+++ b/crawl-ref/source/view.cc
@@ -4846,6 +4846,7 @@ void viewwindow(bool draw_it, bool do_updates)
#ifdef USE_TILE
tile_draw_rays(true);
+ tiles.clear_overlays();
#endif
if (draw_it)