Skip to content

Commit e0d88ee

Browse files
committed
Fixes for object template properties
1 parent c88c3cc commit e0d88ee

File tree

5 files changed

+54
-5
lines changed

5 files changed

+54
-5
lines changed

pytiled_parser/parsers/json/tiled_object.py

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -320,7 +320,22 @@ def parse(
320320
loaded_template = template["object"]
321321
for key in loaded_template:
322322
if key != "id":
323-
raw_object[key] = loaded_template[key] # type: ignore
323+
if key == "properties":
324+
if "properties" not in raw_object:
325+
raw_object["properties"] = []
326+
327+
for prop in loaded_template["properties"]:
328+
329+
found = False
330+
for prop2 in raw_object["properties"]:
331+
if prop2["name"] == prop["name"]:
332+
found = True
333+
break
334+
335+
if not found:
336+
raw_object["properties"].append(prop)
337+
else:
338+
raw_object[key] = loaded_template[key] # type: ignore
324339
else:
325340
raise NotImplementedError(
326341
"Loading TMX object templates inside a JSON map is currently not supported, "

pytiled_parser/parsers/tmx/tiled_object.py

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -277,8 +277,25 @@ def parse(raw_object: etree.Element, parent_dir: Optional[Path] = None) -> Tiled
277277
continue
278278
new_object.attrib[key] = val
279279

280+
280281
properties_element = raw_object.find("./properties")
281-
if properties_element is not None:
282+
temp_properties_element = new_object.find("./properties")
283+
if properties_element is not None and temp_properties_element is None:
284+
new_object.append(properties_element)
285+
elif properties_element is None and temp_properties_element is not None:
286+
pass
287+
elif properties_element is not None and temp_properties_element is not None:
288+
for prop in temp_properties_element:
289+
290+
found = False
291+
for prop2 in properties_element:
292+
if prop.attrib["name"] == prop2.attrib["name"]:
293+
found = True
294+
break
295+
296+
if not found:
297+
properties_element.append(prop)
298+
new_object.remove(temp_properties_element)
282299
new_object.append(properties_element)
283300

284301
raw_object = new_object

tests/test_data/map_tests/template/expected.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@
2121
coordinates=common_types.OrderedPair(
2222
98.4987608686521, 46.2385012811358
2323
),
24-
properties={"test": "hello"},
24+
properties={"test": "hello", "testtest": "fromtemplate"},
2525
visible=True,
2626
class_="",
2727
),

tests/test_data/map_tests/template/template-rectangle.json

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,19 @@
66
"rotation":0,
77
"class":"",
88
"visible":true,
9-
"width":63.6585878103079
9+
"width":63.6585878103079,
10+
"properties":[
11+
{
12+
"name":"test",
13+
"type":"string",
14+
"value":"world"
15+
},
16+
{
17+
"name":"testtest",
18+
"type":"string",
19+
"value":"fromtemplate"
20+
}
21+
]
1022
},
1123
"type":"template"
1224
}
Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,9 @@
11
<?xml version="1.0" encoding="UTF-8"?>
22
<template>
3-
<object width="63.6586" height="38.2812"/>
3+
<object width="63.6586" height="38.2812">
4+
<properties>
5+
<property name="test" value="world"/>
6+
<property name="testtest" value="fromtemplate"/>
7+
</properties>
8+
</object>
49
</template>

0 commit comments

Comments
 (0)