Add helper methods to check for tile transforms
This commit is contained in:
parent
88f3b5f9d5
commit
dba1a39fe1
|
@ -256,6 +256,33 @@
|
|||
Returns a rectangle enclosing the used (non-empty) tiles of the map, including all layers.
|
||||
</description>
|
||||
</method>
|
||||
<method name="is_cell_flipped_h" qualifiers="const">
|
||||
<return type="bool" />
|
||||
<param index="0" name="layer" type="int" />
|
||||
<param index="1" name="coords" type="Vector2i" />
|
||||
<param index="2" name="use_proxies" type="bool" default="false" />
|
||||
<description>
|
||||
Returns [code]true[/code] if the cell on layer [param layer] at coordinates [param coords] is flipped horizontally. The result is valid only for atlas sources.
|
||||
</description>
|
||||
</method>
|
||||
<method name="is_cell_flipped_v" qualifiers="const">
|
||||
<return type="bool" />
|
||||
<param index="0" name="layer" type="int" />
|
||||
<param index="1" name="coords" type="Vector2i" />
|
||||
<param index="2" name="use_proxies" type="bool" default="false" />
|
||||
<description>
|
||||
Returns [code]true[/code] if the cell on layer [param layer] at coordinates [param coords] is flipped vertically. The result is valid only for atlas sources.
|
||||
</description>
|
||||
</method>
|
||||
<method name="is_cell_transposed" qualifiers="const">
|
||||
<return type="bool" />
|
||||
<param index="0" name="layer" type="int" />
|
||||
<param index="1" name="coords" type="Vector2i" />
|
||||
<param index="2" name="use_proxies" type="bool" default="false" />
|
||||
<description>
|
||||
Returns [code]true[/code] if the cell on layer [param layer] at coordinates [param coords] is transposed. The result is valid only for atlas sources.
|
||||
</description>
|
||||
</method>
|
||||
<method name="is_layer_enabled" qualifiers="const">
|
||||
<return type="bool" />
|
||||
<param index="0" name="layer" type="int" />
|
||||
|
|
|
@ -153,6 +153,27 @@
|
|||
Returns whether the provided [param body] [RID] belongs to one of this [TileMapLayer]'s cells.
|
||||
</description>
|
||||
</method>
|
||||
<method name="is_cell_flipped_h" qualifiers="const">
|
||||
<return type="bool" />
|
||||
<param index="0" name="coords" type="Vector2i" />
|
||||
<description>
|
||||
Returns [code]true[/code] if the cell at coordinates [param coords] is flipped horizontally. The result is valid only for atlas sources.
|
||||
</description>
|
||||
</method>
|
||||
<method name="is_cell_flipped_v" qualifiers="const">
|
||||
<return type="bool" />
|
||||
<param index="0" name="coords" type="Vector2i" />
|
||||
<description>
|
||||
Returns [code]true[/code] if the cell at coordinates [param coords] is flipped vertically. The result is valid only for atlas sources.
|
||||
</description>
|
||||
</method>
|
||||
<method name="is_cell_transposed" qualifiers="const">
|
||||
<return type="bool" />
|
||||
<param index="0" name="coords" type="Vector2i" />
|
||||
<description>
|
||||
Returns [code]true[/code] if the cell at coordinates [param coords] is transposed. The result is valid only for atlas sources.
|
||||
</description>
|
||||
</method>
|
||||
<method name="local_to_map" qualifiers="const">
|
||||
<return type="Vector2i" />
|
||||
<param index="0" name="local_position" type="Vector2" />
|
||||
|
|
|
@ -532,6 +532,18 @@ TileData *TileMap::get_cell_tile_data(int p_layer, const Vector2i &p_coords, boo
|
|||
}
|
||||
}
|
||||
|
||||
bool TileMap::is_cell_flipped_h(int p_layer, const Vector2i &p_coords, bool p_use_proxies) const {
|
||||
return get_cell_alternative_tile(p_layer, p_coords, p_use_proxies) & TileSetAtlasSource::TRANSFORM_FLIP_H;
|
||||
}
|
||||
|
||||
bool TileMap::is_cell_flipped_v(int p_layer, const Vector2i &p_coords, bool p_use_proxies) const {
|
||||
return get_cell_alternative_tile(p_layer, p_coords, p_use_proxies) & TileSetAtlasSource::TRANSFORM_FLIP_V;
|
||||
}
|
||||
|
||||
bool TileMap::is_cell_transposed(int p_layer, const Vector2i &p_coords, bool p_use_proxies) const {
|
||||
return get_cell_alternative_tile(p_layer, p_coords, p_use_proxies) & TileSetAtlasSource::TRANSFORM_TRANSPOSE;
|
||||
}
|
||||
|
||||
Ref<TileMapPattern> TileMap::get_pattern(int p_layer, TypedArray<Vector2i> p_coords_array) {
|
||||
TILEMAP_CALL_FOR_LAYER_V(p_layer, Ref<TileMapPattern>(), get_pattern, p_coords_array);
|
||||
}
|
||||
|
@ -926,6 +938,10 @@ void TileMap::_bind_methods() {
|
|||
ClassDB::bind_method(D_METHOD("get_cell_alternative_tile", "layer", "coords", "use_proxies"), &TileMap::get_cell_alternative_tile, DEFVAL(false));
|
||||
ClassDB::bind_method(D_METHOD("get_cell_tile_data", "layer", "coords", "use_proxies"), &TileMap::get_cell_tile_data, DEFVAL(false));
|
||||
|
||||
ClassDB::bind_method(D_METHOD("is_cell_flipped_h", "layer", "coords", "use_proxies"), &TileMap::is_cell_flipped_h, DEFVAL(false));
|
||||
ClassDB::bind_method(D_METHOD("is_cell_flipped_v", "layer", "coords", "use_proxies"), &TileMap::is_cell_flipped_v, DEFVAL(false));
|
||||
ClassDB::bind_method(D_METHOD("is_cell_transposed", "layer", "coords", "use_proxies"), &TileMap::is_cell_transposed, DEFVAL(false));
|
||||
|
||||
ClassDB::bind_method(D_METHOD("get_coords_for_body_rid", "body"), &TileMap::get_coords_for_body_rid);
|
||||
ClassDB::bind_method(D_METHOD("get_layer_for_body_rid", "body"), &TileMap::get_layer_for_body_rid);
|
||||
|
||||
|
|
|
@ -167,6 +167,10 @@ public:
|
|||
// Helper method to make accessing the data easier.
|
||||
TileData *get_cell_tile_data(int p_layer, const Vector2i &p_coords, bool p_use_proxies = false) const;
|
||||
|
||||
bool is_cell_flipped_h(int p_layer, const Vector2i &p_coords, bool p_use_proxies = false) const;
|
||||
bool is_cell_flipped_v(int p_layer, const Vector2i &p_coords, bool p_use_proxies = false) const;
|
||||
bool is_cell_transposed(int p_layer, const Vector2i &p_coords, bool p_use_proxies = false) const;
|
||||
|
||||
// Patterns.
|
||||
Ref<TileMapPattern> get_pattern(int p_layer, TypedArray<Vector2i> p_coords_array);
|
||||
Vector2i map_pattern(const Vector2i &p_position_in_tilemap, const Vector2i &p_coords_in_pattern, Ref<TileMapPattern> p_pattern);
|
||||
|
|
|
@ -1773,6 +1773,10 @@ void TileMapLayer::_bind_methods() {
|
|||
ClassDB::bind_method(D_METHOD("get_cell_alternative_tile", "coords"), &TileMapLayer::get_cell_alternative_tile);
|
||||
ClassDB::bind_method(D_METHOD("get_cell_tile_data", "coords"), &TileMapLayer::get_cell_tile_data);
|
||||
|
||||
ClassDB::bind_method(D_METHOD("is_cell_flipped_h", "coords"), &TileMapLayer::is_cell_flipped_h);
|
||||
ClassDB::bind_method(D_METHOD("is_cell_flipped_v", "coords"), &TileMapLayer::is_cell_flipped_v);
|
||||
ClassDB::bind_method(D_METHOD("is_cell_transposed", "coords"), &TileMapLayer::is_cell_transposed);
|
||||
|
||||
ClassDB::bind_method(D_METHOD("get_used_cells"), &TileMapLayer::get_used_cells);
|
||||
ClassDB::bind_method(D_METHOD("get_used_cells_by_id", "source_id", "atlas_coords", "alternative_tile"), &TileMapLayer::get_used_cells_by_id, DEFVAL(TileSet::INVALID_SOURCE), DEFVAL(TileSetSource::INVALID_ATLAS_COORDS), DEFVAL(TileSetSource::INVALID_TILE_ALTERNATIVE));
|
||||
ClassDB::bind_method(D_METHOD("get_used_rect"), &TileMapLayer::get_used_rect);
|
||||
|
@ -2490,6 +2494,18 @@ Rect2i TileMapLayer::get_used_rect() const {
|
|||
return used_rect_cache;
|
||||
}
|
||||
|
||||
bool TileMapLayer::is_cell_flipped_h(const Vector2i &p_coords) const {
|
||||
return get_cell_alternative_tile(p_coords) & TileSetAtlasSource::TRANSFORM_FLIP_H;
|
||||
}
|
||||
|
||||
bool TileMapLayer::is_cell_flipped_v(const Vector2i &p_coords) const {
|
||||
return get_cell_alternative_tile(p_coords) & TileSetAtlasSource::TRANSFORM_FLIP_V;
|
||||
}
|
||||
|
||||
bool TileMapLayer::is_cell_transposed(const Vector2i &p_coords) const {
|
||||
return get_cell_alternative_tile(p_coords) & TileSetAtlasSource::TRANSFORM_TRANSPOSE;
|
||||
}
|
||||
|
||||
Ref<TileMapPattern> TileMapLayer::get_pattern(TypedArray<Vector2i> p_coords_array) {
|
||||
ERR_FAIL_COND_V(tile_set.is_null(), nullptr);
|
||||
|
||||
|
|
|
@ -438,6 +438,10 @@ public:
|
|||
TypedArray<Vector2i> get_used_cells_by_id(int p_source_id = TileSet::INVALID_SOURCE, const Vector2i &p_atlas_coords = TileSetSource::INVALID_ATLAS_COORDS, int p_alternative_tile = TileSetSource::INVALID_TILE_ALTERNATIVE) const;
|
||||
Rect2i get_used_rect() const;
|
||||
|
||||
bool is_cell_flipped_h(const Vector2i &p_coords) const;
|
||||
bool is_cell_flipped_v(const Vector2i &p_coords) const;
|
||||
bool is_cell_transposed(const Vector2i &p_coords) const;
|
||||
|
||||
// Patterns.
|
||||
Ref<TileMapPattern> get_pattern(TypedArray<Vector2i> p_coords_array);
|
||||
void set_pattern(const Vector2i &p_position, const Ref<TileMapPattern> p_pattern);
|
||||
|
|
Loading…
Reference in New Issue