1 #ifdef USE_TILE
2 #pragma once
3 
4 #include "map-cell.h"
5 #include "tag-version.h"
6 
7 enum halo_type
8 {
9     HALO_NONE = 0,
10     HALO_RANGE = 1,
11     HALO_UMBRA = 2,
12 };
13 
14 struct packed_cell
15 {
16     // For anything that requires multiple dungeon tiles (such as waves)
17     // These tiles will be placed directly on top of the bg tile.
18     enum { MAX_DNGN_OVERLAY = 20 };
19     int num_dngn_overlay;
20     FixedVector<int, MAX_DNGN_OVERLAY> dngn_overlay;
21 
22     tileidx_t fg;
23     tileidx_t bg;
24     tile_flavour flv;
25     tileidx_t cloud;
26 
27     // This is directly copied from env.map_knowledge by viewwindow()
28     map_cell map_knowledge;
29 
30     bool is_highlighted_summoner;
31     bool is_bloody;
32     bool is_silenced;
33     char halo;
34     bool is_sanctuary;
35     bool is_liquefied;
36     bool mangrove_water;
37     bool awakened_forest;
38     uint8_t orb_glow;
39     char blood_rotation;
40     bool old_blood;
41     uint8_t travel_trail;
42     bool quad_glow;
43     uint8_t disjunct;
44 #if TAG_MAJOR_VERSION == 34
45     uint8_t heat_aura;
46 #endif
47 
48     bool operator ==(const packed_cell &other) const;
49     bool operator !=(const packed_cell &other) const { return !(*this == other); }
50 
packed_cellpacked_cell51     packed_cell() : num_dngn_overlay(0), fg(0), bg(0), cloud(0),
52                     is_highlighted_summoner(false), is_bloody(false),
53                     is_silenced(false), halo(HALO_NONE), is_sanctuary(false),
54                     is_liquefied(false), mangrove_water(false),
55                     awakened_forest(false), orb_glow(0), blood_rotation(0),
56                     old_blood(false), travel_trail(0),
57                     quad_glow(false), disjunct(false)
58 #if TAG_MAJOR_VERSION == 34
59                     , heat_aura(false)
60 #endif
61                     {}
62 
packed_cellpacked_cell63     packed_cell(const packed_cell* c) : num_dngn_overlay(c->num_dngn_overlay),
64                                         fg(c->fg), bg(c->bg), flv(c->flv),
65                                         cloud(c->cloud),
66                                         map_knowledge(c->map_knowledge),
67                                         is_highlighted_summoner(c->is_highlighted_summoner),
68                                         is_bloody(c->is_bloody),
69                                         is_silenced(c->is_silenced),
70                                         halo(c->halo),
71                                         is_sanctuary(c->is_sanctuary),
72                                         is_liquefied(c->is_liquefied),
73                                         mangrove_water(c->mangrove_water),
74                                         awakened_forest(c->awakened_forest),
75                                         orb_glow(c->orb_glow),
76                                         blood_rotation(c->blood_rotation),
77                                         old_blood(c->old_blood),
78                                         travel_trail(c->travel_trail),
79                                         quad_glow(c->quad_glow),
80                                         disjunct(c->disjunct)
81 #if TAG_MAJOR_VERSION == 34
82                                         , heat_aura(c->heat_aura)
83 #endif
84                                         {}
85 
86     void clear();
87 };
88 
89 class crawl_view_buffer;
90 
91 // For a given location, pack any waves/ink/wall shadow tiles
92 // that require knowledge of the surrounding env cells.
93 void pack_cell_overlays(const coord_def &gc, crawl_view_buffer &vbuf);
94 
95 #endif // TILECELL_H
96