working keyboard and plugin for better tilemaps
This commit is contained in:
76
addons/TileMapDual/Set.gd
Normal file
76
addons/TileMapDual/Set.gd
Normal file
@@ -0,0 +1,76 @@
|
||||
##[br] Real sets don't exist yet.
|
||||
##[br] https://github.com/godotengine/godot/pull/94399
|
||||
class_name Set
|
||||
extends Resource
|
||||
|
||||
|
||||
## The internal Dictionary that holds this Set's items as keys.
|
||||
var data: Dictionary = {}
|
||||
|
||||
func _init(initial_data: Variant = []) -> void:
|
||||
union_in_place(initial_data)
|
||||
|
||||
## Returns true if the item exists in this Set.
|
||||
func has(item: Variant) -> bool:
|
||||
return item in data
|
||||
|
||||
|
||||
## A dummy value to put in a slot.
|
||||
const DUMMY = null
|
||||
## Returns true if the item was not previously in the Set.
|
||||
func insert(item: Variant) -> bool:
|
||||
var out := not has(item)
|
||||
data[item] = DUMMY
|
||||
return out
|
||||
|
||||
|
||||
## Returns true if the item was previously in the Set.
|
||||
func remove(item: Variant) -> bool:
|
||||
return data.erase(item)
|
||||
|
||||
|
||||
## Deletes all items in this Set.
|
||||
func clear() -> void:
|
||||
data = {}
|
||||
|
||||
|
||||
## Merges an Array's items or Dict's keys into the Set.
|
||||
func union_in_place(other: Variant):
|
||||
for item in other:
|
||||
insert(item)
|
||||
|
||||
|
||||
## Returns a new Set with the items of both self and other.
|
||||
func union(other: Set) -> Set:
|
||||
var out = self.duplicate()
|
||||
out.union_in_place(other.data)
|
||||
return out
|
||||
|
||||
|
||||
## Removes an Array's items or Dict's keys from the Set.
|
||||
func diff_in_place(other: Variant):
|
||||
for item in other:
|
||||
remove(item)
|
||||
|
||||
|
||||
## Returns a new Set with all items in self that are not present in other.
|
||||
func diff(other: Set) -> Set:
|
||||
var out = self.duplicate()
|
||||
out.diff_in_place(other.data)
|
||||
return out
|
||||
|
||||
|
||||
## Inserts elements that are in other but not in self, and removes elements found in both.
|
||||
func xor_in_place(other: Variant):
|
||||
for item in other:
|
||||
if has(item):
|
||||
remove(item)
|
||||
else:
|
||||
insert(item)
|
||||
|
||||
|
||||
## Returns a new Set where each item is either in self or other, but not both.
|
||||
func xor(other: Set) -> Set:
|
||||
var out = self.duplicate()
|
||||
out.xor_in_place(other.data)
|
||||
return out
|
||||
Reference in New Issue
Block a user