using System; using System.Collections.Generic; using System.Collections.ObjectModel; using System.Linq; using System.Text; using System.Threading.Tasks; using SharpDX.Toolkit.Collections; using Torch.Collections; using VRage.Game; using VRage.Library.Utils; namespace Torch.Server.ViewModels { /// /// View model for /// public class SessionSettingsViewModel : ViewModel { private MyObjectBuilder_SessionSettings _settings; /// /// Creates a new view model with a new object. /// public SessionSettingsViewModel() : this(new MyObjectBuilder_SessionSettings()) { } /// /// Creates a view model using an existing object. /// public SessionSettingsViewModel(MyObjectBuilder_SessionSettings settings) { _settings = settings; foreach (var limit in settings.BlockTypeLimits.Dictionary) BlockLimits.Add(new BlockLimitViewModel(this, limit.Key, limit.Value)); } public MtObservableList BlockLimits { get; } = new MtObservableList(); #region Multipliers /// public float InventorySizeMultiplier { get => _settings.InventorySizeMultiplier; set { _settings.InventorySizeMultiplier = value; OnPropertyChanged(); } } /// public float RefinerySpeedMultiplier { get => _settings.RefinerySpeedMultiplier; set { _settings.RefinerySpeedMultiplier = value; OnPropertyChanged(); } } /// public float AssemblerEfficiencyMultiplier { get => _settings.AssemblerEfficiencyMultiplier; set { _settings.AssemblerEfficiencyMultiplier = value; OnPropertyChanged(); } } /// public float AssemblerSpeedMultiplier { get => _settings.AssemblerSpeedMultiplier; set { _settings.AssemblerSpeedMultiplier = value; OnPropertyChanged(); } } /// public float GrinderSpeedMultiplier { get => _settings.GrinderSpeedMultiplier; set { _settings.GrinderSpeedMultiplier = value; OnPropertyChanged(); } } /// public float HackSpeedMultiplier { get => _settings.HackSpeedMultiplier; set { _settings.HackSpeedMultiplier = value; OnPropertyChanged(); } } /// public float WelderSpeedMultiplier { get => _settings.WelderSpeedMultiplier; set { _settings.WelderSpeedMultiplier = value; OnPropertyChanged(); } } #endregion #region NPCs /// public bool EnableDrones { get => _settings.EnableDrones; set { _settings.EnableDrones = value; OnPropertyChanged(); } } /// public bool EnableEncounters { get => _settings.EnableEncounters; set { _settings.EnableEncounters = value; OnPropertyChanged(); } } /// public bool EnableSpiders { get => _settings.EnableSpiders; set { _settings.EnableSpiders = value; OnPropertyChanged(); } } /// public bool EnableWolves { get => _settings.EnableWolfs; set { _settings.EnableWolfs = value; OnPropertyChanged(); } } /// public bool EnableCargoShips { get => _settings.CargoShipsEnabled; set { _settings.CargoShipsEnabled = value; OnPropertyChanged(); } } #endregion #region Environment /// public bool EnableSunRotation { get => _settings.EnableSunRotation; set { _settings.EnableSunRotation = value; OnPropertyChanged(); } } /// public bool EnableAirtightness { get => _settings.EnableOxygenPressurization; set { _settings.EnableOxygenPressurization = value; OnPropertyChanged(); } } /// public bool EnableOxygen { get => _settings.EnableOxygen; set { _settings.EnableOxygen = value; OnPropertyChanged(); } } /// public bool EnableDestructibleBlocks { get => _settings.DestructibleBlocks; set { _settings.DestructibleBlocks = value; OnPropertyChanged(); } } /// public bool EnableToolShake { get => _settings.EnableToolShake; set { _settings.EnableToolShake = value; OnPropertyChanged(); } } /// public bool EnableVoxelDestruction { get => _settings.EnableVoxelDestruction; set { _settings.EnableVoxelDestruction = value; OnPropertyChanged(); } } /// /// List used to populate the environment hostility combo box. /// public List EnvironmentHostilityValues { get; } = Enum.GetNames(typeof(MyEnvironmentHostilityEnum)).ToList(); /// public string EnvironmentHostility { get => _settings.EnvironmentHostility.ToString(); set { Enum.TryParse(value, true, out _settings.EnvironmentHostility); OnPropertyChanged(); } } /// public bool EnableFlora { get => _settings.EnableFlora; set { _settings.EnableFlora = value; OnPropertyChanged(); } } #endregion /// /// List used to populate the game mode combobox. /// public List GameModeValues { get; } = Enum.GetNames(typeof(MyGameModeEnum)).ToList(); /// public string GameMode { get => _settings.GameMode.ToString(); set { Enum.TryParse(value, true, out _settings.GameMode); OnPropertyChanged(); } } /// public bool EnableAutoHealing { get => _settings.AutoHealing; set { _settings.AutoHealing = value; OnPropertyChanged(); } } /// public bool EnableCopyPaste { get => _settings.EnableCopyPaste; set { _settings.EnableCopyPaste = value; OnPropertyChanged(); } } /// public bool ShowPlayerNamesOnHud { get => _settings.ShowPlayerNamesOnHud; set { _settings.ShowPlayerNamesOnHud = value; OnPropertyChanged(); } } /// public bool EnableThirdPerson { get => _settings.Enable3rdPersonView; set { _settings.Enable3rdPersonView = value; OnPropertyChanged(); } } /// public bool EnableSpectator { get => _settings.EnableSpectator; set { _settings.EnableSpectator = value; OnPropertyChanged(); } } /// public bool SpawnWithTools { get => _settings.SpawnWithTools; set { _settings.SpawnWithTools = value; OnPropertyChanged(); } } /// public bool EnableConvertToStation { get => _settings.EnableConvertToStation; set { _settings.EnableConvertToStation = value; OnPropertyChanged(); } } /// public bool EnableJetpack { get => _settings.EnableJetpack; set { _settings.EnableJetpack = value; OnPropertyChanged(); } } /// public bool EnableRemoteOwnerRemoval { get => _settings.EnableRemoteBlockRemoval; set { _settings.EnableRemoteBlockRemoval = value; OnPropertyChanged(); } } /// public bool EnableRespawnShips { get => _settings.EnableRespawnShips; set { _settings.EnableRespawnShips = value; OnPropertyChanged(); } } /// public bool EnableScripterRole { get => _settings.EnableScripterRole; set { _settings.EnableScripterRole = value; OnPropertyChanged(); } } /// public bool EnableRealisticSound { get => _settings.RealisticSound; set { _settings.RealisticSound = value; OnPropertyChanged(); } } /// public bool ResetOwnership { get => _settings.ResetOwnership; set { _settings.ResetOwnership = value; OnPropertyChanged(); } } /// public bool DeleteRespawnShips { get => _settings.RespawnShipDelete; set { _settings.RespawnShipDelete = value; OnPropertyChanged(); } } /// public bool EnableThrusterDamage { get => _settings.ThrusterDamage; set { _settings.ThrusterDamage = value; OnPropertyChanged(); } } /// public bool EnableWeapons { get => _settings.WeaponsEnabled; set { _settings.WeaponsEnabled = value; OnPropertyChanged(); } } /// public bool EnableIngameScripts { get => _settings.EnableIngameScripts; set { _settings.EnableIngameScripts = value; OnPropertyChanged(); } } /// public uint AutosaveInterval { get => _settings.AutoSaveInMinutes; set { _settings.AutoSaveInMinutes = value; OnPropertyChanged(); } } /// public int FloraDensity { get => _settings.FloraDensity; set { _settings.FloraDensity = value; OnPropertyChanged(); } } /// public float FloraDensityMultiplier { get => _settings.FloraDensityMultiplier; set { _settings.FloraDensityMultiplier = value; OnPropertyChanged(); } } /// public short MaxBackupSaves { get => _settings.MaxBackupSaves; set { _settings.MaxBackupSaves = value; OnPropertyChanged(); } } /// public int MaxBlocksPerPlayer { get => _settings.MaxBlocksPerPlayer; set { _settings.MaxBlocksPerPlayer = value; OnPropertyChanged(); } } /// public short MaxFloatingObjects { get => _settings.MaxFloatingObjects; set { _settings.MaxFloatingObjects = value; OnPropertyChanged(); } } /// public int MaxGridSize { get => _settings.MaxGridSize; set { _settings.MaxGridSize = value; OnPropertyChanged(); } } /// public short MaxPlayers { get => _settings.MaxPlayers; set { _settings.MaxPlayers = value; OnPropertyChanged(); } } /// public int PhysicsIterations { get => _settings.PhysicsIterations; set { _settings.PhysicsIterations = value; OnPropertyChanged(); } } /// public float SpawnTimeMultiplier { get => _settings.SpawnShipTimeMultiplier; set { _settings.SpawnShipTimeMultiplier = value; OnPropertyChanged(); } } /// public float SunRotationInterval { get => _settings.SunRotationIntervalMinutes; set { _settings.SunRotationIntervalMinutes = value; OnPropertyChanged(); } } /// public int ViewDistance { get => _settings.ViewDistance; set { _settings.ViewDistance = value; OnPropertyChanged(); } } /// public int WorldSize { get => _settings.WorldSizeKm; set { _settings.WorldSizeKm = value; OnPropertyChanged(); } } /// public static implicit operator MyObjectBuilder_SessionSettings(SessionSettingsViewModel viewModel) { viewModel._settings.BlockTypeLimits.Dictionary.Clear(); foreach (var limit in viewModel.BlockLimits) viewModel._settings.BlockTypeLimits.Dictionary.Add(limit.BlockType, limit.Limit); return viewModel._settings; } } }