/// <summary> /// Aquire the kerbal lock on the given kerbal /// </summary> public void AcquireKerbalLock(string kerbalName, bool force = false) { if (!LockQuery.KerbalLockBelongsToPlayer(kerbalName, SettingsSystem.CurrentSettings.PlayerName)) { AcquireLock(new LockDefinition(LockType.Kerbal, SettingsSystem.CurrentSettings.PlayerName, kerbalName), force); } }
/// <summary> /// Acquire the unloaded update lock on the given vessel /// </summary> public void AcquireUnloadedUpdateLock(Guid vesselId, bool force = false, bool immediate = false) { if (!LockQuery.UnloadedUpdateLockBelongsToPlayer(vesselId, SettingsSystem.CurrentSettings.PlayerName)) { AcquireLock(new LockDefinition(LockType.UnloadedUpdate, SettingsSystem.CurrentSettings.PlayerName, vesselId), force, immediate); } }
/// <summary> /// Releases all the player locks /// </summary> public void ReleaseAllPlayerLocks() { foreach (var lockToRelease in LockQuery.GetAllPlayerLocks(SettingsSystem.CurrentSettings.PlayerName)) { ReleaseLock(lockToRelease); } }
private void ReleaseAllVesselLocksImpl(IEnumerable <string> crewNames, Guid vesselId) { if (LockQuery.UnloadedUpdateLockBelongsToPlayer(vesselId, SettingsSystem.CurrentSettings.PlayerName)) { ReleaseLock(new LockDefinition(LockType.UnloadedUpdate, SettingsSystem.CurrentSettings.PlayerName, vesselId)); } if (LockQuery.UpdateLockBelongsToPlayer(vesselId, SettingsSystem.CurrentSettings.PlayerName)) { ReleaseLock(new LockDefinition(LockType.Update, SettingsSystem.CurrentSettings.PlayerName, vesselId)); } if (LockQuery.ControlLockBelongsToPlayer(vesselId, SettingsSystem.CurrentSettings.PlayerName)) { ReleaseLock(new LockDefinition(LockType.Control, SettingsSystem.CurrentSettings.PlayerName, vesselId)); } if (crewNames != null) { foreach (var kerbal in crewNames) { if (LockQuery.KerbalLockBelongsToPlayer(kerbal, SettingsSystem.CurrentSettings.PlayerName)) { ReleaseLock(new LockDefinition(LockType.Kerbal, SettingsSystem.CurrentSettings.PlayerName, kerbal)); } } } }
/// <summary> /// Aquire the control lock on the given vessel /// </summary> public void AcquireControlLock(Guid vesselId, bool force = false) { if (!LockQuery.ControlLockBelongsToPlayer(vesselId, SettingsSystem.CurrentSettings.PlayerName)) { AcquireLock(new LockDefinition(LockType.Control, SettingsSystem.CurrentSettings.PlayerName, vesselId), force); } }
/// <summary> /// Release the spectator lock /// </summary> public void ReleaseSpectatorLock() { if (LockQuery.SpectatorLockExists(SettingsSystem.CurrentSettings.PlayerName)) { ReleaseLock(new LockDefinition(LockType.Spectator, SettingsSystem.CurrentSettings.PlayerName)); } }
/// <summary> /// Release all the locks (update and control) of a vessel /// </summary> public void ReleaseAllVesselLocks(IEnumerable <string> crewNames, Guid vesselId, int msDelay = 0) { TaskFactory.StartNew(() => { if (msDelay > 0) { Thread.Sleep(msDelay); } if (LockQuery.UnloadedUpdateLockBelongsToPlayer(vesselId, SettingsSystem.CurrentSettings.PlayerName)) { ReleaseLock(new LockDefinition(LockType.UnloadedUpdate, SettingsSystem.CurrentSettings.PlayerName, vesselId)); } if (LockQuery.UpdateLockBelongsToPlayer(vesselId, SettingsSystem.CurrentSettings.PlayerName)) { ReleaseLock(new LockDefinition(LockType.Update, SettingsSystem.CurrentSettings.PlayerName, vesselId)); } if (LockQuery.ControlLockBelongsToPlayer(vesselId, SettingsSystem.CurrentSettings.PlayerName)) { ReleaseLock(new LockDefinition(LockType.Control, SettingsSystem.CurrentSettings.PlayerName, vesselId)); } foreach (var kerbal in crewNames) { if (LockQuery.KerbalLockBelongsToPlayer(kerbal, SettingsSystem.CurrentSettings.PlayerName)) { ReleaseLock(new LockDefinition(LockType.Kerbal, SettingsSystem.CurrentSettings.PlayerName, kerbal)); } } }); }
/// <summary> /// Release all the locks you have based by type /// </summary> public void ReleasePlayerLocks(LockType type) { var playerName = SettingsSystem.CurrentSettings.PlayerName; IEnumerable <LockDefinition> locksToRelease; switch (type) { case LockType.Asteroid: locksToRelease = LockQuery.AsteroidLockOwner() == playerName ? new[] { LockQuery.AsteroidLock() } : new LockDefinition[0]; break; case LockType.Control: locksToRelease = LockQuery.GetAllControlLocks(SettingsSystem.CurrentSettings.PlayerName); break; case LockType.Update: locksToRelease = LockQuery.GetAllUpdateLocks(SettingsSystem.CurrentSettings.PlayerName); break; case LockType.Spectator: locksToRelease = LockQuery.SpectatorLockExists(SettingsSystem.CurrentSettings.PlayerName) ? new[] { LockQuery.GetSpectatorLock(SettingsSystem.CurrentSettings.PlayerName) } : new LockDefinition[0]; break; default: throw new ArgumentOutOfRangeException(nameof(type), type, null); } foreach (var lockToRelease in locksToRelease) { ReleaseLock(lockToRelease); } }
/// <summary> /// Releases all the player locks /// </summary> public void ReleaseAllPlayerSpecifiedLocks(params LockType[] lockTypes) { foreach (var lockToRelease in LockQuery.GetAllPlayerLocks(SettingsSystem.CurrentSettings.PlayerName)) { if (lockTypes.Contains(lockToRelease.Type)) { ReleaseLock(lockToRelease); } } }
/// <summary> /// Aquire the kerbal lock on the given vessel /// </summary> public void AcquireKerbalLock(Vessel vessel, bool force = false) { foreach (var kerbal in vessel.GetVesselCrew()) { if (!LockQuery.KerbalLockBelongsToPlayer(kerbal.name, SettingsSystem.CurrentSettings.PlayerName)) { AcquireLock(new LockDefinition(LockType.Kerbal, SettingsSystem.CurrentSettings.PlayerName, kerbal.name), force); } } }
/// <summary> /// Release the specified control lock excepts the one for the vessel you give as parameter. /// </summary> public void ReleaseControlLocksExcept(Guid vesselId) { var locksToRemove = LockQuery.GetAllControlLocks(SettingsSystem.CurrentSettings.PlayerName) .Where(v => v.VesselId != vesselId); foreach (var lockToRemove in locksToRemove) { ReleaseLock(lockToRemove); } }
/// <summary> /// Release all the locks (update and control) of a vessel /// </summary> public void ReleaseAllVesselLocks(Guid vesselId) { if (LockQuery.UpdateLockBelongsToPlayer(vesselId, SettingsSystem.CurrentSettings.PlayerName)) { ReleaseLock(new LockDefinition(LockType.Update, SettingsSystem.CurrentSettings.PlayerName, vesselId)); } if (LockQuery.ControlLockBelongsToPlayer(vesselId, SettingsSystem.CurrentSettings.PlayerName)) { ReleaseLock(new LockDefinition(LockType.Control, SettingsSystem.CurrentSettings.PlayerName, vesselId)); } }
/// <summary> /// Release the specified control lock excepts the one for the vessel you give as parameter. /// </summary> public void ReleaseControlLocksExcept(Guid vesselId) { //Serialize to array as it's a concurrent collection var locksToRemove = LockQuery.GetAllControlLocks(SettingsSystem.CurrentSettings.PlayerName) .Where(v => v.VesselId != vesselId).ToArray(); foreach (var lockToRemove in locksToRemove) { ReleaseLock(lockToRemove); } }
/// <summary> /// Fires the relevant lock events for given vesselId /// </summary> public void FireVesselLocksEvents(Guid vesselId) { if (LockQuery.ControlLockExists(vesselId)) { LockEvent.onLockAcquire.Fire(LockQuery.GetControlLock(vesselId)); } if (LockQuery.UpdateLockExists(vesselId)) { LockEvent.onLockAcquire.Fire(LockQuery.GetUpdateLock(vesselId)); } if (LockQuery.UnloadedUpdateLockExists(vesselId)) { LockEvent.onLockAcquire.Fire(LockQuery.GetUnloadedUpdateLock(vesselId)); } }
/// <summary> /// Release all the locks you have based by type /// </summary> public void ReleasePlayerLocks(LockType type) { var playerName = SettingsSystem.CurrentSettings.PlayerName; IEnumerable <LockDefinition> locksToRelease; switch (type) { case LockType.AsteroidComet: locksToRelease = LockQuery.AsteroidCometLockOwner() == playerName ? new[] { LockQuery.AsteroidCometLock() } : new LockDefinition[0]; break; case LockType.Control: locksToRelease = LockQuery.GetAllControlLocks(SettingsSystem.CurrentSettings.PlayerName); break; case LockType.Kerbal: locksToRelease = LockQuery.GetAllKerbalLocks(SettingsSystem.CurrentSettings.PlayerName); break; case LockType.Update: locksToRelease = LockQuery.GetAllUpdateLocks(SettingsSystem.CurrentSettings.PlayerName); break; case LockType.UnloadedUpdate: locksToRelease = LockQuery.GetAllUnloadedUpdateLocks(SettingsSystem.CurrentSettings.PlayerName); break; case LockType.Spectator: locksToRelease = LockQuery.SpectatorLockExists(SettingsSystem.CurrentSettings.PlayerName) ? new[] { LockQuery.GetSpectatorLock(SettingsSystem.CurrentSettings.PlayerName) } : new LockDefinition[0]; break; case LockType.Contract: locksToRelease = LockQuery.ContractLockOwner() == playerName ? new[] { LockQuery.ContractLock() } : new LockDefinition[0]; break; default: throw new ArgumentOutOfRangeException(nameof(type), type, null); } //Serialize to array as it's a concurrent collection foreach (var lockToRelease in locksToRelease.ToArray()) { ReleaseLock(lockToRelease); } }
/// <summary> /// Acquire the kerbal lock on the given vessel /// </summary> public void AcquireKerbalLock(Vessel vessel, bool force = false, bool immediate = false) { if (vessel == null) { return; } foreach (var kerbal in vessel.GetVesselCrew()) { if (kerbal == null) { continue; } if (!LockQuery.KerbalLockBelongsToPlayer(kerbal.name, SettingsSystem.CurrentSettings.PlayerName)) { AcquireLock(new LockDefinition(LockType.Kerbal, SettingsSystem.CurrentSettings.PlayerName, kerbal.name), force, immediate); } } }
/// <summary> /// Release all the locks (update and control) of a vessel /// </summary> public void ReleaseAllVesselLocks(Guid vesselId, int msDelay = 0) { TaskFactory.StartNew(() => { if (msDelay > 0) { Thread.Sleep(msDelay); } if (LockQuery.UnloadedUpdateLockBelongsToPlayer(vesselId, SettingsSystem.CurrentSettings.PlayerName)) { ReleaseLock(new LockDefinition(LockType.UnloadedUpdate, SettingsSystem.CurrentSettings.PlayerName, vesselId)); } if (LockQuery.UpdateLockBelongsToPlayer(vesselId, SettingsSystem.CurrentSettings.PlayerName)) { ReleaseLock(new LockDefinition(LockType.Update, SettingsSystem.CurrentSettings.PlayerName, vesselId)); } if (LockQuery.ControlLockBelongsToPlayer(vesselId, SettingsSystem.CurrentSettings.PlayerName)) { ReleaseLock(new LockDefinition(LockType.Control, SettingsSystem.CurrentSettings.PlayerName, vesselId)); } }); }