private static bool ServerIsLightShouldBeActive( IWorldObject lightObject, double fuelAmount, ObjectLightMode mode) { if (fuelAmount <= 0) { return(false); } if (mode == ObjectLightMode.On) { return(true); } if (mode == ObjectLightMode.Auto && DayNightSystem.IsNight) { using (var charactersNearby = Api.Shared.GetTempList <ICharacter>()) { Server.World.GetScopedByPlayers(lightObject, charactersNearby); if (charactersNearby.Count == 0) { return(false); } foreach (var character in charactersNearby) { if (character.ProtoCharacter is PlayerCharacterSpectator) { continue; } if (character.TilePosition.TileSqrDistanceTo(lightObject.TilePosition) < AutoLightDistance * AutoLightDistance) { // close enough to turn the light automatically return(true); } } } } return(false); }
private void ServerRemote_SetLightMode(IStaticWorldObject lightObject, ObjectLightMode mode) { var character = ServerRemoteContext.Character; if (!InteractionCheckerSystem.SharedHasInteraction(character, lightObject, requirePrivateScope: true)) { throw new Exception("The player character is not interacting with the light object"); } var privateState = GetPrivateState(lightObject); var publicState = GetPublicState(lightObject); privateState.Mode = mode; Logger.Important($"Light mode changed: {mode}, light: {lightObject}", character); this.ServerUpdateLight(lightObject, privateState, publicState, deltaTime: 0); }
private void ServerRemote_SetLightMode(IStaticWorldObject lightObject, ObjectLightMode mode) { var character = ServerRemoteContext.Character; if (!this.SharedCanInteract(character, lightObject, writeToLog: true)) { return; } var privateState = GetPrivateState(lightObject); var publicState = GetPublicState(lightObject); privateState.Mode = mode; Logger.Important($"Light mode changed: {mode}, light: {lightObject}", character); this.ServerUpdateLight(lightObject, privateState, publicState, deltaTime: 0); }
public void ClientSetLightMode(IStaticWorldObject lightObject, ObjectLightMode mode) { this.CallServer(_ => _.ServerRemote_SetLightMode(lightObject, mode)); }