98 lines
2.1 KiB
C#
98 lines
2.1 KiB
C#
|
using System;
|
||
|
using System.Collections;
|
||
|
using System.Collections.Generic;
|
||
|
using UnityEngine;
|
||
|
using Utility;
|
||
|
|
||
|
/// <summary>
|
||
|
/// Macht genau das was man erwartet: Schaltet je nach Uhrzeit alle Kinder an oder aus.
|
||
|
/// </summary>
|
||
|
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();
|
||
|
}
|
||
|
}
|