2020-05-06 16:22:30 +02:00
|
|
|
|
using System;
|
|
|
|
|
using System.Collections.Generic;
|
|
|
|
|
using System.Linq;
|
|
|
|
|
using System.Text;
|
|
|
|
|
using System.Threading.Tasks;
|
|
|
|
|
using Microsoft.Xna.Framework;
|
|
|
|
|
|
|
|
|
|
class DayNightCycle
|
|
|
|
|
{
|
|
|
|
|
private bool Time = true;
|
|
|
|
|
private int nightTime = 0;
|
|
|
|
|
private int dayTime = 0;
|
2020-05-06 20:48:20 +02:00
|
|
|
|
private int lengthOfDay = 20000;
|
|
|
|
|
private int lengthOfNight = 20000;
|
|
|
|
|
private int Days;
|
2020-05-06 16:22:30 +02:00
|
|
|
|
|
|
|
|
|
public void updateTime(int Speed)
|
|
|
|
|
{
|
|
|
|
|
for (int i = 0; i < Speed; i++)
|
|
|
|
|
{
|
|
|
|
|
if (Time)
|
|
|
|
|
{
|
|
|
|
|
dayTime++;
|
|
|
|
|
if (dayTime == lengthOfDay)
|
|
|
|
|
{
|
|
|
|
|
Time = false;
|
|
|
|
|
dayTime = 0;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
nightTime++;
|
|
|
|
|
if (nightTime == lengthOfNight)
|
|
|
|
|
{
|
|
|
|
|
Time = true;
|
|
|
|
|
nightTime = 0;
|
2020-05-06 20:48:20 +02:00
|
|
|
|
Days++;
|
2020-05-06 16:22:30 +02:00
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public string getDayNight()
|
|
|
|
|
{
|
|
|
|
|
if (Time)
|
|
|
|
|
{
|
|
|
|
|
return "Day";
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
return "Night";
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public Color GetTimeOfDay()
|
|
|
|
|
{
|
2020-05-06 20:48:20 +02:00
|
|
|
|
int blue, red, brightness;
|
|
|
|
|
if (nightTime == 0 && dayTime == 0)
|
2020-05-06 16:22:30 +02:00
|
|
|
|
{
|
2020-05-06 20:48:20 +02:00
|
|
|
|
red = 1;
|
2020-05-06 16:22:30 +02:00
|
|
|
|
blue = 1;
|
2020-05-06 20:48:20 +02:00
|
|
|
|
brightness = 1;
|
|
|
|
|
|
2020-05-06 16:22:30 +02:00
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
2020-05-06 20:48:20 +02:00
|
|
|
|
if ((float)dayTime / lengthOfDay < 0.5)
|
|
|
|
|
{
|
|
|
|
|
blue = (int)(((float)nightTime / lengthOfNight) * 255) + (int)((1.0f - (float)dayTime / lengthOfDay) * 255);
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
blue = (int)(((float)nightTime / lengthOfNight) * 255) + (int)(((float)dayTime / lengthOfDay) * 255);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if ((float)nightTime / lengthOfNight < 0.5)
|
|
|
|
|
{
|
|
|
|
|
red = (int)((1.0 - (float)nightTime / lengthOfNight) * 255) + (int)(((float)dayTime / lengthOfDay) * 255);
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
red = (int)(((float)nightTime / lengthOfNight) * 255) + (int)(((float)dayTime / lengthOfDay) * 255);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (Time)
|
|
|
|
|
{
|
|
|
|
|
brightness = 255;
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
if ((float)nightTime / lengthOfNight < 0.5)
|
|
|
|
|
{
|
|
|
|
|
brightness = (int)((1.0 - (float)nightTime / lengthOfNight) * 255) + (int)(((float)dayTime / lengthOfDay) * 255);
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
brightness = (int)(((float)nightTime / lengthOfNight) * 255) + (int)(((float)dayTime / lengthOfDay) * 255);
|
|
|
|
|
}
|
|
|
|
|
}
|
2020-05-06 16:22:30 +02:00
|
|
|
|
}
|
|
|
|
|
|
2020-05-06 20:48:20 +02:00
|
|
|
|
return Color.FromNonPremultiplied(red, 255, blue, brightness);
|
2020-05-06 16:22:30 +02:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public int GetTimeOfDayInt()
|
|
|
|
|
{
|
|
|
|
|
if (Time)
|
|
|
|
|
{
|
2020-05-06 20:48:20 +02:00
|
|
|
|
return (int)(100 * ((float)(dayTime + nightTime) / (lengthOfDay + lengthOfNight))) + 1;
|
2020-05-06 16:22:30 +02:00
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
2020-05-06 20:48:20 +02:00
|
|
|
|
return (int)(100 * ((float)(lengthOfDay + nightTime) / (lengthOfDay + lengthOfNight))) + 1;
|
2020-05-06 16:22:30 +02:00
|
|
|
|
}
|
2020-05-06 20:48:20 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public int getDays()
|
|
|
|
|
{
|
|
|
|
|
return Days;
|
2020-05-06 16:22:30 +02:00
|
|
|
|
}
|
|
|
|
|
}
|