summary refs log tree commit diff stats
path: root/client/Archipelago/manager.gd
blob: 35fc8e3b33a82483ca1b0adc6ef7232502598a4a (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
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
94
95
96
97
98
99
100
extends Node

const my_version = "0.1.0"

var SCRIPT_client
var SCRIPT_locationListener
var SCRIPT_uuid

var ap_server = ""
var ap_user = ""
var ap_pass = ""
var connection_history = []

var client

signal could_not_connect
signal connect_status
signal ap_connected


func _ready():
	client = SCRIPT_client.new()
	client.SCRIPT_uuid = SCRIPT_uuid

	client.connect("item_received", _process_item)
	client.connect("could_not_connect", _client_could_not_connect)
	client.connect("connect_status", _client_connect_status)
	client.connect("client_connected", _client_connected)

	add_child(client)


func saveSettings():
	pass


func connectToServer():
	client.connectToServer(ap_server, ap_user, ap_pass)


func getSaveFileName():
	return "zzAP_%s_%d" % [client._seed, client._slot]


func disconnect_from_ap():
	client.disconnect_from_ap()


func get_item_id_for_door(door_id):
	var gamedata = global.get_node("Gamedata")
	var door = gamedata.objects.get_doors()[door_id]
	if (
		door.get_type() == gamedata.SCRIPT_proto.DoorType.EVENT
		or door.get_type() == gamedata.SCRIPT_proto.DoorType.LOCATION_ONLY
		or door.get_type() == gamedata.SCRIPT_proto.DoorType.CONTROL_CENTER_COLOR
	):
		return null
	return gamedata.get_door_ap_id(door_id)


func has_item(item_id):
	return client.hasItem(item_id)


func _process_item(item_id, _index, _player, _flags):
	var gamedata = global.get_node("Gamedata")
	var door_id = gamedata.door_id_by_ap_id.get(item_id, null)
	if door_id != null and gamedata.get_door_map_name(door_id) == global.map:
		var receivers = gamedata.get_door_receivers(door_id)
		var scene = get_tree().get_root().get_node_or_null("scene")
		if scene != null:
			for receiver in receivers:
				var rnode = scene.get_node_or_null(receiver)
				if rnode != null:
					rnode.handleTriggered()
			for painting_id in gamedata.objects.get_doors()[door_id].get_move_paintings():
				var painting = gamedata.objects.get_paintings()[painting_id]
				var pnode = scene.get_node_or_null(painting.get_path() + "/teleportListener")
				if pnode != null:
					pnode.handleTriggered()


func _process_message(_message):
	pass


func _client_could_not_connect():
	emit_signal("could_not_connect")


func _client_connect_status(message):
	emit_signal("connect_status", message)


func _client_connected():
	emit_signal("ap_connected")


func send_location(loc_id):
	client.sendLocation(loc_id)