using System; using System.Collections; using System.Collections.Generic; using UnityEngine; using Utility; public class Zeitschaltuhr : MonoBehaviour, ISerializationCallbackReceiver { private TimeSpan _turnOnTimeSpan; private TimeSpan _turnOffTimeSpan; public bool IsOn; [SerializeField] private SimpleTime _turnOnTime; [SerializeField] private SimpleTime _turnOffTime; public SimpleTime TurnOnTime { get => _turnOnTime; set { _turnOnTime = value; _turnOnTimeSpan = _turnOnTime.ToTimeSpan(); } } public SimpleTime TurnOffTime { get => _turnOffTime; set { _turnOffTime = value; _turnOffTimeSpan = _turnOffTime.ToTimeSpan(); } } void Start() { UpdateOn(); } void Update() { UpdateOn(); } void UpdateOn() { if (_turnOnTimeSpan < _turnOffTimeSpan) { // beide Zeiten am selben Tag bool wasOn = IsOn; IsOn = TimeManager.Instance.TimeOfDay.IsBetween(_turnOnTimeSpan, _turnOffTimeSpan); if (IsOn != wasOn) { UpdateChildren(); } } else { // Zeiten über Mitternacht bool wasOn = IsOn; IsOn = !TimeManager.Instance.TimeOfDay.IsBetween(_turnOffTimeSpan, _turnOnTimeSpan); if (IsOn != wasOn) { UpdateChildren(); } } } void UpdateChildren() { for (int i = 0; i < transform.childCount; i++) { transform.GetChild(i).gameObject.SetActive(IsOn); } } public void OnBeforeSerialize() { } public void OnAfterDeserialize() { _turnOnTimeSpan = _turnOnTime.ToTimeSpan(); _turnOffTimeSpan = _turnOffTime.ToTimeSpan(); } }