diff options
Diffstat (limited to 'scene/2d/tile_map.h')
-rw-r--r-- | scene/2d/tile_map.h | 114 |
1 files changed, 62 insertions, 52 deletions
diff --git a/scene/2d/tile_map.h b/scene/2d/tile_map.h index c581aa8056..f52adcd510 100644 --- a/scene/2d/tile_map.h +++ b/scene/2d/tile_map.h @@ -29,17 +29,17 @@ #ifndef TILE_MAP_H #define TILE_MAP_H -#include "scene/2d/node_2d.h" #include "scene/2d/navigation2d.h" +#include "scene/2d/node_2d.h" #include "scene/resources/tile_set.h" #include "self_list.h" #include "vset.h" class TileMap : public Node2D { - GDCLASS( TileMap, Node2D ); -public: + GDCLASS(TileMap, Node2D); +public: enum Mode { MODE_SQUARE, MODE_ISOMETRIC, @@ -58,20 +58,17 @@ public: TILE_ORIGIN_BOTTOM_LEFT }; - private: - Ref<TileSet> tile_set; Size2i cell_size; int quadrant_size; - bool center_x,center_y; + bool center_x, center_y; Mode mode; Transform2D custom_transform; HalfOffset half_offset; bool use_kinematic; Navigation2D *navigation; - union PosKey { struct { @@ -81,29 +78,32 @@ private: uint32_t key; //using a more precise comparison so the regions can be sorted later - bool operator<(const PosKey& p_k) const { return (y==p_k.y) ? x < p_k.x : y < p_k.y; } - - PosKey(int16_t p_x, int16_t p_y) { x=p_x; y=p_y; } - PosKey() { x=0; y=0; } - + bool operator<(const PosKey &p_k) const { return (y == p_k.y) ? x < p_k.x : y < p_k.y; } + + PosKey(int16_t p_x, int16_t p_y) { + x = p_x; + y = p_y; + } + PosKey() { + x = 0; + y = 0; + } }; - union Cell { struct { - int32_t id:24; - bool flip_h:1; - bool flip_v:1; - bool transpose:1; + int32_t id : 24; + bool flip_h : 1; + bool flip_v : 1; + bool transpose : 1; }; uint32_t _u32t; - Cell() { _u32t=0; } + Cell() { _u32t = 0; } }; - - Map<PosKey,Cell> tile_map; + Map<PosKey, Cell> tile_map; struct Quadrant { Vector2 pos; @@ -122,18 +122,33 @@ private: Transform2D xform; }; - - Map<PosKey,NavPoly> navpoly_ids; - Map<PosKey,Occluder> occluder_instances; + Map<PosKey, NavPoly> navpoly_ids; + Map<PosKey, Occluder> occluder_instances; VSet<PosKey> cells; - void operator=(const Quadrant& q) { pos=q.pos; canvas_items=q.canvas_items; body=q.body; cells=q.cells; navpoly_ids=q.navpoly_ids; occluder_instances=q.occluder_instances; } - Quadrant(const Quadrant& q) : dirty_list(this) { pos=q.pos; canvas_items=q.canvas_items; body=q.body; cells=q.cells; occluder_instances=q.occluder_instances; navpoly_ids=q.navpoly_ids;} - Quadrant() : dirty_list(this) {} + void operator=(const Quadrant &q) { + pos = q.pos; + canvas_items = q.canvas_items; + body = q.body; + cells = q.cells; + navpoly_ids = q.navpoly_ids; + occluder_instances = q.occluder_instances; + } + Quadrant(const Quadrant &q) + : dirty_list(this) { + pos = q.pos; + canvas_items = q.canvas_items; + body = q.body; + cells = q.cells; + occluder_instances = q.occluder_instances; + navpoly_ids = q.navpoly_ids; + } + Quadrant() + : dirty_list(this) {} }; - Map<PosKey,Quadrant> quadrant_map; + Map<PosKey, Quadrant> quadrant_map; SelfList<Quadrant>::List dirty_quadrant_list; @@ -155,43 +170,38 @@ private: int occluder_light_mask; - void _fix_cell_transform(Transform2D& xform, const Cell& p_cell, const Vector2 &p_offset, const Size2 &p_sc); + void _fix_cell_transform(Transform2D &xform, const Cell &p_cell, const Vector2 &p_offset, const Size2 &p_sc); - Map<PosKey,Quadrant>::Element *_create_quadrant(const PosKey& p_qk); - void _erase_quadrant(Map<PosKey,Quadrant>::Element *Q); - void _make_quadrant_dirty(Map<PosKey,Quadrant>::Element *Q); + Map<PosKey, Quadrant>::Element *_create_quadrant(const PosKey &p_qk); + void _erase_quadrant(Map<PosKey, Quadrant>::Element *Q); + void _make_quadrant_dirty(Map<PosKey, Quadrant>::Element *Q); void _recreate_quadrants(); void _clear_quadrants(); void _update_dirty_quadrants(); - void _update_quadrant_space(const RID& p_space); + void _update_quadrant_space(const RID &p_space); void _update_quadrant_transform(); void _recompute_rect_cache(); _FORCE_INLINE_ int _get_quadrant_size() const; - - void _set_tile_data(const PoolVector<int>& p_data); + void _set_tile_data(const PoolVector<int> &p_data); PoolVector<int> _get_tile_data() const; - void _set_old_cell_size(int p_size) { set_cell_size(Size2(p_size,p_size)); } + void _set_old_cell_size(int p_size) { set_cell_size(Size2(p_size, p_size)); } int _get_old_cell_size() const { return cell_size.x; } - _FORCE_INLINE_ Vector2 _map_to_world(int p_x,int p_y,bool p_ignore_ofs=false) const; + _FORCE_INLINE_ Vector2 _map_to_world(int p_x, int p_y, bool p_ignore_ofs = false) const; protected: - - void _notification(int p_what); static void _bind_methods(); public: - enum { - INVALID_CELL=-1 + INVALID_CELL = -1 }; - - void set_tileset(const Ref<TileSet>& p_tileset); + void set_tileset(const Ref<TileSet> &p_tileset); Ref<TileSet> get_tileset() const; void set_cell_size(Size2 p_size); @@ -205,14 +215,14 @@ public: void set_center_y(bool p_enable); bool get_center_y() const; - void set_cell(int p_x,int p_y,int p_tile,bool p_flip_x=false,bool p_flip_y=false,bool p_transpose=false); - int get_cell(int p_x,int p_y) const; - bool is_cell_x_flipped(int p_x,int p_y) const; - bool is_cell_y_flipped(int p_x,int p_y) const; - bool is_cell_transposed(int p_x,int p_y) const; + void set_cell(int p_x, int p_y, int p_tile, bool p_flip_x = false, bool p_flip_y = false, bool p_transpose = false); + int get_cell(int p_x, int p_y) const; + bool is_cell_x_flipped(int p_x, int p_y) const; + bool is_cell_y_flipped(int p_x, int p_y) const; + bool is_cell_transposed(int p_x, int p_y) const; - void set_cellv(const Vector2& p_pos,int p_tile,bool p_flip_x=false,bool p_flip_y=false,bool p_transpose=false); - int get_cellv(const Vector2& p_pos) const; + void set_cellv(const Vector2 &p_pos, int p_tile, bool p_flip_x = false, bool p_flip_y = false, bool p_transpose = false); + int get_cellv(const Vector2 &p_pos) const; Rect2 get_item_rect() const; @@ -240,14 +250,14 @@ public: void set_tile_origin(TileOrigin p_tile_origin); TileOrigin get_tile_origin() const; - void set_custom_transform(const Transform2D& p_xform); + void set_custom_transform(const Transform2D &p_xform); Transform2D get_custom_transform() const; Transform2D get_cell_transform() const; Vector2 get_cell_draw_offset() const; - Vector2 map_to_world(const Vector2& p_pos, bool p_ignore_ofs=false) const; - Vector2 world_to_map(const Vector2& p_pos) const; + Vector2 map_to_world(const Vector2 &p_pos, bool p_ignore_ofs = false) const; + Vector2 world_to_map(const Vector2 &p_pos) const; void set_y_sort_mode(bool p_enable); bool is_y_sort_mode_enabled() const; |