Clients: now featuring tooltips and some general cleanup (#564)

* Clients: now featuring tooltips and some general cleanup

* Clients: fade in tooltip over 0.25 seconds

* Clients: reset slot and team when disconnecting

* Clients: allow joining multiworld via link (TextClient only for now)
This commit is contained in:
Fabian Dill
2022-05-24 00:20:02 +02:00
committed by GitHub
parent 7126b7bca0
commit 4165f58414
9 changed files with 145 additions and 18 deletions

View File

@@ -17,7 +17,7 @@ if __name__ == "__main__":
Utils.init_logging("TextClient", exception_logger="Client")
from MultiServer import CommandProcessor
from NetUtils import Endpoint, decode, NetworkItem, encode, JSONtoTextParser, ClientStatus, Permission
from NetUtils import Endpoint, decode, NetworkItem, encode, JSONtoTextParser, ClientStatus, Permission, NetworkSlot
from Utils import Version, stream_input
from worlds import network_data_package, AutoWorldRegister
import os
@@ -125,6 +125,7 @@ class CommonContext():
input_task: typing.Optional[asyncio.Task] = None
keep_alive_task: typing.Optional[asyncio.Task] = None
items_handling: typing.Optional[int] = None
slot_info: typing.Dict[int, NetworkSlot]
current_energy_link_value: int = 0 # to display in UI, gets set by server
def __init__(self, server_address, password):
@@ -136,6 +137,7 @@ class CommonContext():
self.server_version = Version(0, 0, 0)
self.hint_cost: typing.Optional[int] = None
self.games: typing.Dict[int, str] = {}
self.slot_info = {}
self.permissions = {
"forfeit": "disabled",
"collect": "disabled",
@@ -187,6 +189,8 @@ class CommonContext():
def reset_server_state(self):
self.auth = None
self.slot = None
self.team = None
self.items_received = []
self.locations_info = {}
self.server_version = Version(0, 0, 0)
@@ -511,6 +515,8 @@ async def process_server_cmd(ctx: CommonContext, args: dict):
elif cmd == 'Connected':
ctx.team = args["team"]
ctx.slot = args["slot"]
# int keys get lost in JSON transfer
ctx.slot_info = {int(pid): data for pid, data in args["slot_info"].items()}
ctx.consume_players_package(args["players"])
msgs = []
if ctx.locations_checked:
@@ -643,6 +649,7 @@ if __name__ == '__main__':
async def main(args):
ctx = TextContext(args.connect, args.password)
ctx.auth = args.name
ctx.server_task = asyncio.create_task(server_loop(ctx), name="server loop")
if gui_enabled:
@@ -656,8 +663,16 @@ if __name__ == '__main__':
import colorama
parser = get_base_parser(description="Gameless Archipelago Client, for text interfacing.")
parser.add_argument('--name', default=None, help="Slot Name to connect as.")
parser.add_argument("url", nargs="?", help="Archipelago connection url")
args = parser.parse_args()
if args.url:
url = urllib.parse.urlparse(args.url)
args.connect = url.netloc
args.name = urllib.parse.unquote(url.username)
args.password = urllib.parse.unquote(url.password)
args, rest = parser.parse_known_args()
colorama.init()
asyncio.run(main(args))