138 lines
3.7 KiB
C#
138 lines
3.7 KiB
C#
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;
|
|
private int lengthOfDay = 20000;
|
|
private int lengthOfNight = 20000;
|
|
private int Days = 1;
|
|
|
|
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;
|
|
Days++;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
public string getDayNight()
|
|
{
|
|
if (Time)
|
|
{
|
|
return "Day";
|
|
}
|
|
else
|
|
{
|
|
return "Night";
|
|
}
|
|
}
|
|
|
|
public Color GetTimeOfDay()
|
|
{
|
|
int blue, red, brightness, green, potatorate = 255;
|
|
if (nightTime == 0 && dayTime == 0)
|
|
{
|
|
red = 1;
|
|
blue = 1;
|
|
green = 1;
|
|
brightness = 1;
|
|
|
|
}
|
|
else
|
|
{
|
|
if ((float)dayTime / lengthOfDay < 0.5)
|
|
{
|
|
blue = (int)(((float)nightTime / lengthOfNight) * potatorate) + (int)((1.0f - (float)dayTime / lengthOfDay) * potatorate);
|
|
}
|
|
else
|
|
{
|
|
blue = (int)(((float)nightTime / lengthOfNight) * potatorate) + (int)(((float)dayTime / lengthOfDay) * potatorate);
|
|
}
|
|
|
|
if ((float)nightTime / lengthOfNight < 0.5)
|
|
{
|
|
red = (int)((1.0 - (float)nightTime / lengthOfNight) * potatorate) + (int)(((float)dayTime / lengthOfDay) * potatorate);
|
|
}
|
|
else
|
|
{
|
|
red = (int)(((float)nightTime / lengthOfNight) * potatorate) + (int)(((float)dayTime / lengthOfDay) * potatorate);
|
|
}
|
|
|
|
if ((float)nightTime / lengthOfNight < 0.5)
|
|
{
|
|
green = (int)((1.0 - (float)nightTime / lengthOfNight) * potatorate) + (int)(((float)dayTime / lengthOfDay) * potatorate);
|
|
}
|
|
else
|
|
{
|
|
green = (int)(((float)nightTime / lengthOfNight) * potatorate) + (int)(((float)dayTime / lengthOfDay) * potatorate);
|
|
}
|
|
|
|
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);
|
|
}
|
|
}
|
|
}
|
|
/*
|
|
red = (int)(red / 1.2f);
|
|
blue = (int)(blue / 1.2f);
|
|
green = (int)(green / 1.2f);
|
|
*/
|
|
return Color.FromNonPremultiplied(red, green, blue, 255);
|
|
}
|
|
|
|
public int GetTimeOfDayInt()
|
|
{
|
|
if (Time)
|
|
{
|
|
return (int)(100 * ((float)(dayTime + nightTime) / (lengthOfDay + lengthOfNight))) + 1;
|
|
}
|
|
else
|
|
{
|
|
return (int)(100 * ((float)(lengthOfDay + nightTime) / (lengthOfDay + lengthOfNight))) + 1;
|
|
}
|
|
|
|
|
|
}
|
|
|
|
public int getDays()
|
|
{
|
|
return Days;
|
|
}
|
|
}
|