Files
UnrealEngineUWP/Engine/Plugins/AI/MLAdapter/Source/python/unreal/mladapter/utils.py
mieszko zielinski 7848b68be0 Renamed UE4ML plugin to MLAdapter and updated all its contents accordingly
#lockdown nick.whiting
[at]Nick.Whiting, [at]Mikko.Mononen
#rb Nick.Whiting, Mikko.Mononen
#jira UE-111731
#jira UE-111119
#jira UE-111117
#jira UE-111114
#jira UE-111091
#jira UE-111075
#jira UE-111060
#jira UE-111058
#jira UE-111049
#jira UE-111044
#jira UE-111040
#jira UE-111039
#jira UE-111038
#jira UE-111036
#jira UE-111033
#jira UE-111032
#jira UE-111029
#jira UE-111026
#jira UE-111024
#jira UE-111021
#jira UE-111020
#jira UE-111018
#jira UE-111017
#jira UE-111016
#jira UE-111015
#jira UE-111014
#jira UE-111013
#jira UE-111012
#jira UE-110977
#jira UE-110975
#jira UE-110974
#jira UE-110973
#jira UE-110971
#jira UE-110969
#jira UE-110965
#jira UE-110949
#preflight 606ebe61db0bbb00016e242e

#ROBOMERGE-OWNER: mieszko.zielinski
#ROBOMERGE-AUTHOR: mieszko.zielinski
#ROBOMERGE-SOURCE: CL 15955453 in //UE5/Release-5.0-EarlyAccess/...
#ROBOMERGE-BOT: STARSHIP (Release-5.0-EarlyAccess -> Main) (v787-15839533)
#ROBOMERGE-CONFLICT from-shelf

[CL 15975769 by mieszko zielinski in ue5-main branch]
2021-04-12 03:41:10 -04:00

67 lines
2.1 KiB
Python

# Copyright Epic Games, Inc. All Rights Reserved.
import json
import msgpackrpc
import argparse
from collections import OrderedDict
LOCALHOST = '127.0.0.1'
DEFAULT_PORT = 15151
DEFAULT_TIMEOUT = 120
def dict_from_json(data):
if type(data) == bytes:
data = data.decode('utf8')
if type(data) == str:
if not data:
data = None
else:
# using OrderedDict to retain items order
data = json.loads(data, object_pairs_hook=OrderedDict)
if type(data) == OrderedDict:
for key in data:
# at this point data[key] is a string and we need the structure represented by it
data[key] = dict_from_json(data[key])
return data
def is_port_available(port, host=LOCALHOST):
import socket
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
return s.connect_ex((host, port)) != 0
def find_available_port(host=LOCALHOST):
import socket
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
s.bind((host, 0))
s.listen(1)
return s.getsockname()[1]
def random_action(env):
return env.action_space.sample() if env.action_space else None
class ArgumentParser(argparse.ArgumentParser):
def __init__(self, **kwargs):
super().__init__(kwargs)
self.add_argument('--env', type=str, default='UnrealEngine-ActionRPG-v0', help='environment ID')
self.add_argument('--nothreads', type=int, default=0)
self.add_argument('--norendering', type=int, default=0)
self.add_argument('--nosound', type=int, default=0)
self.add_argument('--resx', type=int, default=800)
self.add_argument('--resy', type=int, default=600)
self.add_argument('--exec', type=str, default=None)
self.add_argument('--port', type=int, default=DEFAULT_PORT)
def parse_args(self, **kwargs):
args = super().parse_args(**kwargs)
if args.exec is not None:
from unreal.mladapter.runner import set_executable
set_executable(args.exec)
return args