diff options
Diffstat (limited to 'crawl-ref')
-rw-r--r-- | crawl-ref/source/beam.cc | 10 | ||||
-rw-r--r-- | crawl-ref/source/tile2.cc | 9 | ||||
-rw-r--r-- | crawl-ref/source/tilereg.cc | 36 | ||||
-rw-r--r-- | crawl-ref/source/tilereg.h | 10 | ||||
-rw-r--r-- | crawl-ref/source/tiles.h | 1 | ||||
-rw-r--r-- | crawl-ref/source/tilesdl.cc | 10 | ||||
-rw-r--r-- | crawl-ref/source/tilesdl.h | 3 | ||||
-rw-r--r-- | crawl-ref/source/view.cc | 1 |
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) |