-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathTagFlagMap.gd
More file actions
93 lines (66 loc) · 1.78 KB
/
TagFlagMap.gd
File metadata and controls
93 lines (66 loc) · 1.78 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
class_name TagFlagKeyMap extends Object
## 3 way mapping between string tag, bitmask flag, and keycode
var _tags : Array[String]
var _flags : PackedInt64Array
var _keys : Array[int]
var _tags_map : Dictionary
var _flags_map : Dictionary
var _keys_map : Dictionary
func _init(tags : Array[String], flags : PackedInt64Array, keys : Array[int]):
_tags = tags
_flags = flags
_keys = keys
assert(tags.size() == flags.size())
assert(tags.size() == keys.size())
var i : int = 0
for t in _tags:
_tags_map[t] = i
i += 1
i = 0
for f in _flags:
_flags_map[f] = i
i += 1
i = 0
for k in _keys:
_keys_map[k] = i
i += 1
func _to_string():
for tag in _tags:
prints(tag, "=", OS.get_keycode_string(tag_key(tag)), " [", tag_flag(tag), "]")
func size():
return _tags.size()
func tag_flag(tag : String) -> int:
return _flags[_tags_map[tag]]
func tag_key(tag : String) -> int:
return _keys[_tags_map[tag]]
func key_flag(key : int) -> int:
return _flags[_keys_map[key]]
func key_tag(key : int) -> String:
return _tags[_keys_map[key]]
func flag_tag(flag : int) -> String:
return _tags[_flags_map[flag]]
func flag_key(flag : int) -> int:
return _keys[_flags_map[flag]]
func tag_exists(tag : String) -> bool:
return tag in _tags_map
func key_exists(key : int) -> bool:
return key in _keys_map
func flag_exists(flag : int) -> bool:
return flag in _flags_map
func tags() -> Array[String]:
return _tags
func flags() -> int:
var flags : int = 0
for f in _flags:
flags |= f
return flags
func flags_to_tags(flags : int, active_flags : int = 0) -> Array[String]:
var tags : Array[String] = []
for flag in _flags:
if flags & flag != 0:
var tag = _tags[_flags_map[flag]]
if flag & active_flags != 0:
tag = tag.to_upper()
tags.append(tag)
tags.sort()
return tags