summaryrefslogtreecommitdiff
path: root/scene/2d/tile_map.h
diff options
context:
space:
mode:
Diffstat (limited to 'scene/2d/tile_map.h')
-rw-r--r--scene/2d/tile_map.h114
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;