Exemple #1
0
        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);
        }
Exemple #2
0
        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));
 }