# Note: The code might not be as pretty it could be, since it's written
# in a way that maximizes performance. Methods are inlined and loops are avoided.
extends Node
const BYTE_MASK: int = 0b11111111
static func uuidbin():
randomize()
# 16 random bytes with the bytes on index 6 and 8 modified
return [
randi() & BYTE_MASK,
randi() & BYTE_MASK,
randi() & BYTE_MASK,
randi() & BYTE_MASK,
randi() & BYTE_MASK,
randi() & BYTE_MASK,
((randi() & BYTE_MASK) & 0x0f) | 0x40,
randi() & BYTE_MASK,
((randi() & BYTE_MASK) & 0x3f) | 0x80,
randi() & BYTE_MASK,
randi() & BYTE_MASK,
randi() & BYTE_MASK,
randi() & BYTE_MASK,
randi() & BYTE_MASK,
randi() & BYTE_MASK,
randi() & BYTE_MASK,
]
static func uuidbinrng(rng: RandomNumberGenerator):
rng.randomize()
return [
rng.randi() & BYTE_MASK,
rng.randi() & BYTE_MASK,
rng.randi() & BYTE_MASK,
rng.randi() & BYTE_MASK,
rng.randi() & BYTE_MASK,
rng.randi() & BYTE_MASK,
((rng.randi() & BYTE_MASK) & 0x0f) | 0x40,
rng.randi() & BYTE_MASK,
((rng.randi() & BYTE_MASK) & 0x3f) | 0x80,
rng.randi() & BYTE_MASK,
rng.randi() & BYTE_MASK,
rng.randi() & BYTE_MASK,
rng.randi() & BYTE_MASK,
rng.randi() & BYTE_MASK,
rng.randi() & BYTE_MASK,
rng.randi() & BYTE_MASK,
]
static func v4():
# 16 random bytes with the bytes on index 6 and 8 modified
var b = uuidbin()
return (
"%02x%02x%02x%02x-%02x%02x-%02x%02x-%02x%02x-%02x%02x%02x%02x%02x%02x"
% [
# low
b[0],
b[1],
b[2],
b[3],
# mid
b[4],
b[5],
# hi
b[6],
b[7],
# clock
b[8],
b[9],
# clock
b[10],
b[11],
b[12],
b[13],
b[14],
b[15]
]
)
static func v4_rng(rng: RandomNumberGenerator):
# 16 random bytes with the bytes on index 6 and 8 modified
var b = uuidbinrng(rng)
return (
"%02x%02x%02x%02x-%02x%02x-%02x%02x-%02x%02x-%02x%02x%02x%02x%02x%02x"
% [
# low
b[0],
b[1],
b[2],
b[3],
# mid
b[4],
b[5],
# hi
b[6],
b[7],
# clock
b[8],
b[9],
# clock
b[10],
b[11],
b[12],
b[13],
b[14],
b[15]
]
)
var _uuid: Array
func _init(rng := RandomNumberGenerator.new()) -> void:
_uuid = uuidbinrng(rng)
func as_array() -> Array:
return _uuid.duplicate()
func as_dict(big_endian := true) -> Dictionary:
if big_endian:
return {
"low": (_uuid[0] << 24) + (_uuid[1] << 16) + (_uuid[2] << 8) + _uuid[3],
"mid": (_uuid[4] << 8) + _uuid[5],
"hi": (_uuid[6] << 8) + _uuid[7],
"clock": (_uuid[8] << 8) + _uuid[9],
"node":
(
(_uuid[10] << 40)
+ (_uuid[11] << 32)
+ (_uuid[12] << 24)
+ (_uuid[13] << 16)
+ (_uuid[14] << 8)
+ _uuid[15]
)
}
else:
return {
"low": _uuid[0] + (_uuid[1] << 8) + (_uuid[2] << 16) + (_uuid[3] << 24),
"mid": _uuid[4] + (_uuid[5] << 8),
"hi": _uuid[6] + (_uuid[7] << 8),
"clock": _uuid[8] + (_uuid[9] << 8),
"node":
(
_uuid[10]
+ (_uuid[11] << 8)
+ (_uuid[12] << 16)
+ (_uuid[13] << 24)
+ (_uuid[14] << 32)
+ (_uuid[15] << 40)
)
}
func as_string() -> String:
return (
"%02x%02x%02x%02x-%02x%02x-%02x%02x-%02x%02x-%02x%02x%02x%02x%02x%02x"
% [
# low
_uuid[0],
_uuid[1],
_uuid[2],
_uuid[3],
# mid
_uuid[4],
_uuid[5],
# hi
_uuid[6],
_uuid[7],
# clock
_uuid[8],
_uuid[9],
# node
_uuid[10],
_uuid[11],
_uuid[12],
_uuid[13],
_uuid[14],
_uuid[15]
]
)
func is_equal(other) -> bool:
# Godot Engine compares Array recursively
# There's no need for custom comparison here.
return _uuid == other._uuid
010bd82bbe0a4df0486c091f861a3'>Northwest Room.txtpb
blob: 42d2cd5e5a4a555c54c7fefcfd4738fc5d367800 (
plain) (
blame)
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
|
name: "Northwest Room"
panels {
name: "SEE"
path: "Panels/Northwest Room/sw_1"
clue: "see"
answer: "nonsense"
symbols: SPARKLES
}
panels {
name: "ONES"
path: "Panels/Northwest Room/sw_2"
clue: "ones"
answer: "nonsense"
symbols: SPARKLES
}
panels {
name: "TIC"
path: "Panels/Northwest Room/sw_3"
clue: "tic"
answer: "dramatic"
symbols: SPARKLES
}
panels {
name: "RAT"
path: "Panels/Northwest Room/sw_4"
clue: "rat"
answer: "dramatic"
symbols: SPARKLES
}
panels {
name: "DATE"
path: "Panels/Northwest Room/sw_5"
clue: "date"
answer: "daughter"
symbols: SPARKLES
}
panels {
name: "DUG"
path: "Panels/Northwest Room/sw_6"
clue: "dug"
answer: "daughter"
symbols: SPARKLES
}
panels {
name: "NONE"
path: "Panels/Northwest Room/sw_7"
clue: "none"
answer: "nonsense"
symbols: SPARKLES
}
panels {
name: "HER"
path: "Panels/Northwest Room/sw_8"
clue: "her"
answer: "daughter"
symbols: SPARKLES
}
panels {
name: "DAM"
path: "Panels/Northwest Room/sw_9"
clue: "dam"
answer: "dramatic"
symbols: SPARKLES
}
|