bl2mods/Mods/ModUtils/objects/settings.py
2023-03-22 12:57:56 -04:00

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