summaryrefslogtreecommitdiffstats
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.h43
1 files changed, 31 insertions, 12 deletions
diff --git a/scene/2d/tile_map.h b/scene/2d/tile_map.h
index edea90fa95..45604bfb8a 100644
--- a/scene/2d/tile_map.h
+++ b/scene/2d/tile_map.h
@@ -31,7 +31,8 @@
#ifndef TILE_MAP_H
#define TILE_MAP_H
-#include "scene/2d/tile_map_layer_group.h"
+#include "scene/2d/tile_map_layer.h"
+#include "scene/property_list_helper.h"
#include "scene/resources/2d/tile_set.h"
class Control;
@@ -39,14 +40,14 @@ class TileMapLayer;
class TerrainConstraint;
enum TileMapDataFormat {
- FORMAT_1 = 0,
- FORMAT_2,
- FORMAT_3,
- FORMAT_MAX,
+ TILE_MAP_DATA_FORMAT_1 = 0,
+ TILE_MAP_DATA_FORMAT_2,
+ TILE_MAP_DATA_FORMAT_3,
+ TILE_MAP_DATA_FORMAT_MAX,
};
-class TileMap : public TileMapLayerGroup {
- GDCLASS(TileMap, TileMapLayerGroup)
+class TileMap : public Node2D {
+ GDCLASS(TileMap, Node2D)
public:
// Kept for compatibility, but should use TileMapLayer::VisibilityMode instead.
@@ -60,11 +61,12 @@ private:
friend class TileSetPlugin;
// A compatibility enum to specify how is the data if formatted.
- mutable TileMapDataFormat format = TileMapDataFormat::FORMAT_3;
+ mutable TileMapDataFormat format = TileMapDataFormat::TILE_MAP_DATA_FORMAT_3;
static constexpr float FP_ADJUST = 0.00001;
// Properties.
+ Ref<TileSet> tile_set;
int rendering_quadrant_size = 16;
bool collision_animatable = false;
VisibilityMode collision_visibility_mode = VISIBILITY_MODE_DEFAULT;
@@ -72,20 +74,29 @@ private:
// Layers.
LocalVector<TileMapLayer *> layers;
- TileMapLayer *default_layer; // Dummy layer to fetch default values.
+
+ static inline PropertyListHelper base_property_helper;
+ PropertyListHelper property_helper;
// Transforms for collision_animatable.
Transform2D last_valid_transform;
Transform2D new_transform;
+ void _tile_set_changed();
+
void _emit_changed();
+ // Kept for compatibility with TileMap. With TileMapLayers as individual nodes, the format is stored directly in the array.
+ void _set_tile_map_data_using_compatibility_format(int p_layer, TileMapDataFormat p_format, const Vector<int> &p_data);
+ Vector<int> _get_tile_map_data_using_compatibility_format(int p_layer) const;
+ void _set_layer_tile_data(int p_layer, const PackedInt32Array &p_data);
+
protected:
bool _set(const StringName &p_name, const Variant &p_value);
bool _get(const StringName &p_name, Variant &r_ret) const;
void _get_property_list(List<PropertyInfo> *p_list) const;
- bool _property_can_revert(const StringName &p_name) const;
- bool _property_get_revert(const StringName &p_name, Variant &r_property) const;
+ bool _property_can_revert(const StringName &p_name) const { return property_helper.property_can_revert(p_name); }
+ bool _property_get_revert(const StringName &p_name, Variant &r_property) const { return property_helper.property_get_revert(p_name, r_property); }
void _notification(int p_what);
static void _bind_methods();
@@ -114,6 +125,10 @@ public:
static void draw_tile(RID p_canvas_item, const Vector2 &p_position, const Ref<TileSet> p_tile_set, int p_atlas_source_id, const Vector2i &p_atlas_coords, int p_alternative_tile, int p_frame = -1, Color p_modulation = Color(1.0, 1.0, 1.0, 1.0), const TileData *p_tile_data_override = nullptr, real_t p_normalized_animation_offset = 0.0);
+ // Accessors.
+ void set_tileset(const Ref<TileSet> &p_tileset);
+ Ref<TileSet> get_tileset() const;
+
// Layers management.
int get_layers_count() const;
void add_layer(int p_to_pos);
@@ -200,6 +215,11 @@ public:
// Fixing and clearing methods.
void fix_invalid_tiles();
+#ifdef TOOLS_ENABLED
+ // Moving layers outside of TileMap.
+ TileMapLayer *duplicate_layer_from_internal(int p_layer);
+#endif // TOOLS_ENABLED
+
// Clears tiles from a given layer.
void clear_layer(int p_layer);
void clear();
@@ -219,7 +239,6 @@ public:
PackedStringArray get_configuration_warnings() const override;
TileMap();
- ~TileMap();
};
VARIANT_ENUM_CAST(TileMap::VisibilityMode);