111 lines
1.8 KiB
Python
111 lines
1.8 KiB
Python
import unrealsdk
|
|
|
|
from ..misc import is_in_game
|
|
|
|
|
|
SETTINGS = [
|
|
'AmbientOcclusion',
|
|
'AudioFocus',
|
|
'bNVIDIA3d',
|
|
'DepthOfField',
|
|
'FramerateLocking',
|
|
'FoliageDistance',
|
|
'FXAA',
|
|
'GameDetail',
|
|
'LensFlares',
|
|
'Fullscreen',
|
|
'MaxAnisotropy',
|
|
'NumberOfDecals',
|
|
'PhysXLevel',
|
|
'TextureFade',
|
|
'TextureQuality',
|
|
'ViewDistance',
|
|
'VSync'
|
|
]
|
|
|
|
|
|
class Item:
|
|
def __init__(self, name, value, *options):
|
|
self.name = name
|
|
self.value = value
|
|
self.options = options
|
|
|
|
|
|
def __repr__(self):
|
|
return f'Item("{self.name}", "{self.value_string}")'
|
|
|
|
|
|
def __str__(self):
|
|
return self.value_string
|
|
|
|
|
|
@classmethod
|
|
def new_from_option(cls, option):
|
|
return cls(
|
|
option.Name,
|
|
option.CurrValue,
|
|
*tuple(v for v in option.ValueStrings)
|
|
)
|
|
|
|
|
|
@property
|
|
def value_string(self):
|
|
return self.options[self.value]
|
|
|
|
|
|
class Settings:
|
|
def __init__(self):
|
|
self._set = unrealsdk.FindObject('WillowSystemSettings', 'WillowGame.Default__WillowSystemSettings')
|
|
|
|
if is_in_game():
|
|
self._set.LoadSystemSettings(False)
|
|
|
|
|
|
def __getitem__(self, key):
|
|
return self.get(key).value
|
|
|
|
|
|
def __setitem__(self, key, value):
|
|
self.set(key, value)
|
|
|
|
|
|
def __iter__(self):
|
|
for key in self.keys():
|
|
yield key
|
|
|
|
|
|
def get(self, key):
|
|
for value in self._set.SystemOptions:
|
|
if key == value.Name:
|
|
return Item.new_from_option(value)
|
|
|
|
raise KeyError(key)
|
|
|
|
|
|
def items(self):
|
|
for key in self.keys():
|
|
yield key, self.get(key).value
|
|
|
|
|
|
def keys(self):
|
|
return tuple(SETTINGS)
|
|
|
|
|
|
def set(self, key, new_value):
|
|
if isinstance(new_value, str):
|
|
new_value = self.get(key).options.index(new_value)
|
|
|
|
self._set.UpdateSystemOption(key, new_value)
|
|
|
|
|
|
def to_dict(self, strings=False):
|
|
if not strings:
|
|
return {k: v for k, v in self.items()}
|
|
|
|
return {k: str(self.get(k)) for k in self.keys()}
|
|
|
|
|
|
def values(self):
|
|
for key in self.keys():
|
|
yield self.get(key).value
|