about summary refs log tree commit diff stats
path: root/Archipelago/panel.gd
blob: da5b5723287c9dbaa164ae24609df12cf8696258 (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
65
66
67
extends Node

var data = {}
var orig_text = ""
var atbash_text = ""
var orig_color = Color(0, 0, 0, 0)
var solvable = true

const kAtbashPre = "abcdefghijklmnopqrstuvwxyz1234567890+-"
const kAtbashPost = "zyxwvutsrqponmlkjihgfedcba0987654321-+"


func _ready():
	orig_text = self.get_parent().get_node("Viewport/GUI/Panel/Label").text
	orig_color = self.get_parent().get_node("Quad").get_surface_material(0).albedo_color

	for i in range(0, orig_text.length()):
		var old_char = orig_text[i]
		if old_char in kAtbashPre:
			var j = kAtbashPre.find(old_char)
			atbash_text += kAtbashPost[j]
		else:
			atbash_text += old_char

	self.get_parent().get_node("Viewport/GUI/Panel/TextEdit").connect(
		"answer_correct", self, "answer_correct"
	)


func answer_correct():
	var effects = get_tree().get_root().get_node("Spatial/AP_Effects")
	effects.deactivate_atbash_trap()


func evaluate_solvability():
	var apclient = global.get_node("Archipelago")
	var effects = get_tree().get_root().get_node("Spatial/AP_Effects")

	solvable = true
	var missing = []

	if apclient._color_shuffle:
		for color in data["color"]:
			if not apclient._has_colors.has(color):
				missing.append(color)
				solvable = false

	if solvable:
		if effects.atbash_activated:
			self.get_parent().get_node("Viewport/GUI/Panel/Label").text = atbash_text
		else:
			self.get_parent().get_node("Viewport/GUI/Panel/Label").text = orig_text
		self.get_parent().get_node("Viewport/GUI/Panel/TextEdit").editable = true
		self.get_parent().get_node("Quad").get_surface_material(0).albedo_color = orig_color
	else:
		var missing_text = "Missing: "
		for thing in missing:
			missing_text += thing + ",\n"
		missing_text = missing_text.left(missing_text.length() - 2)

		self.get_parent().get_node("Viewport/GUI/Panel/Label").text = missing_text
		self.get_parent().get_node("Viewport/GUI/Panel/TextEdit").editable = false
		self.get_parent().get_node("Quad").get_surface_material(0).albedo_color = Color(
			0.7, 0.2, 0.2
		)

	self.get_parent().get_node("Viewport").render_target_update_mode = 1
lass="p">[ # 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