2
0
Эх сурвалжийг харах

Merge pull request #14454 from CyanBlob/TileMap

Convert tilemap format in get_tile_data()
Rémi Verschelde 7 жил өмнө
parent
commit
09fe926ab3

+ 8 - 6
scene/2d/tile_map.cpp

@@ -965,14 +965,14 @@ void TileMap::_set_tile_data(const PoolVector<int> &p_data) {
 	int c = p_data.size();
 	PoolVector<int>::Read r = p_data.read();
 
-	int offset = (format == FORMAT_2_1_5) ? 3 : 2;
+	int offset = (format == FORMAT_2) ? 3 : 2;
 
 	clear();
 	for (int i = 0; i < c; i += offset) {
 
 		const uint8_t *ptr = (const uint8_t *)&r[i];
 		uint8_t local[12];
-		for (int j = 0; j < ((format == FORMAT_2_1_5) ? 12 : 8); j++)
+		for (int j = 0; j < ((format == FORMAT_2) ? 12 : 8); j++)
 			local[j] = ptr[j];
 
 #ifdef BIG_ENDIAN_ENABLED
@@ -982,7 +982,7 @@ void TileMap::_set_tile_data(const PoolVector<int> &p_data) {
 		SWAP(local[4], local[7]);
 		SWAP(local[5], local[6]);
 		//TODO: ask someone to check this...
-		if (FORMAT == FORMAT_2_1_5) {
+		if (FORMAT == FORMAT_2) {
 			SWAP(local[8], local[11]);
 			SWAP(local[9], local[10]);
 		}
@@ -997,7 +997,7 @@ void TileMap::_set_tile_data(const PoolVector<int> &p_data) {
 		v &= (1 << 29) - 1;
 		int16_t coord_x;
 		int16_t coord_y;
-		if (format == FORMAT_2_1_5) {
+		if (format == FORMAT_2) {
 			coord_x = decode_uint16(&local[8]);
 			coord_y = decode_uint16(&local[10]);
 		}
@@ -1015,6 +1015,8 @@ PoolVector<int> TileMap::_get_tile_data() const {
 	data.resize(tile_map.size() * 3);
 	PoolVector<int>::Write w = data.write();
 
+	format = FORMAT_2;
+
 	int idx = 0;
 	for (const Map<PosKey, Cell>::Element *E = tile_map.front(); E; E = E->next()) {
 		uint8_t *ptr = (uint8_t *)&w[idx];
@@ -1295,7 +1297,7 @@ bool TileMap::_set(const StringName &p_name, const Variant &p_value) {
 bool TileMap::_get(const StringName &p_name, Variant &r_ret) const {
 
 	if (p_name == "format") {
-		r_ret = FORMAT_2_1_5;
+		r_ret = FORMAT_2;
 		return true;
 	} else if (p_name == "tile_data") {
 		r_ret = _get_tile_data();
@@ -1591,7 +1593,7 @@ TileMap::TileMap() {
 	y_sort_mode = false;
 	occluder_light_mask = 1;
 	clip_uv = false;
-	format = FORMAT_2_1_4; //Always initialize with the lowest format
+	format = FORMAT_1; //Always initialize with the lowest format
 
 	fp_adjust = 0.00001;
 	tile_origin = TILE_ORIGIN_TOP_LEFT;

+ 3 - 3
scene/2d/tile_map.h

@@ -61,8 +61,8 @@ public:
 
 private:
 	enum DataFormat {
-		FORMAT_2_1_4 = 0,
-		FORMAT_2_1_5
+		FORMAT_1 = 0,
+		FORMAT_2
 	};
 
 	Ref<TileSet> tile_set;
@@ -178,7 +178,7 @@ private:
 	float bounce;
 	uint32_t collision_layer;
 	uint32_t collision_mask;
-	DataFormat format;
+	mutable DataFormat format;
 
 	TileOrigin tile_origin;