Skip to content

Commit 1b1a9e8

Browse files
authored
Merge pull request #70 from hwh008/fix/remove_relationship_by_pointer
Remove specific one relationship when its reference pointers are the identical
2 parents 32630f8 + 189aafe commit 1b1a9e8

File tree

2 files changed

+35
-8
lines changed

2 files changed

+35
-8
lines changed

‎addons/gecs/ecs/entity.gd‎

Lines changed: 14 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -276,14 +276,20 @@ func remove_relationship(relationship: Relationship, limit: int = -1) -> void:
276276

277277
var to_remove = []
278278
var removed_count = 0
279-
280-
for rel in relationships:
281-
if rel.matches(relationship):
282-
to_remove.append(rel)
283-
removed_count += 1
284-
# If limit is positive and we've reached it, stop collecting
285-
if limit > 0 and removed_count >= limit:
286-
break
279+
280+
var pattern_remove = true
281+
if relationships.has(relationship):
282+
to_remove.append(relationship)
283+
pattern_remove = false
284+
285+
if pattern_remove:
286+
for rel in relationships:
287+
if rel.matches(relationship):
288+
to_remove.append(rel)
289+
removed_count += 1
290+
# If limit is positive and we've reached it, stop collecting
291+
if limit > 0 and removed_count >= limit:
292+
break
287293

288294
for rel in to_remove:
289295
relationships.erase(rel)

‎addons/gecs/tests/core/test_relationships.gd‎

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -977,6 +977,27 @@ func test_component_target_relationship_by_component_query():
977977
var rel_love_attack = e_bob.get_relationship(Relationship.new({C_TestA: {}}, C_TestC.new()))
978978
assert_int(rel_love_attack.relation.value).is_equal(10)
979979

980+
981+
func test_remove_specific_relationship():
982+
e_bob = Person.new()
983+
world.add_entity(e_bob)
984+
985+
e_bob.add_relationship(Relationship.new(C_Likes.new(1), e_alice))
986+
e_bob.add_relationship(Relationship.new(C_Likes.new(2), e_alice))
987+
e_bob.add_relationship(Relationship.new(C_Likes.new(1), e_alice))
988+
989+
var all_rels = e_bob.get_relationships(Relationship.new({C_Likes:{}}, null))
990+
assert_array(all_rels).has_size(3)
991+
992+
assert_int(all_rels[1].relation.value).is_equal(2)
993+
e_bob.remove_relationship(all_rels[1])
994+
995+
var like1_rels = e_bob.get_relationships(Relationship.new({C_Likes:{}}, null))
996+
assert_array(like1_rels).has_size(2)
997+
assert_int(like1_rels[0].relation.value).is_equal(1)
998+
assert_int(like1_rels[1].relation.value).is_equal(1)
999+
1000+
9801001
# # FIXME: This is not working
9811002
# func test_reverse_relationships_a():
9821003

0 commit comments

Comments
 (0)