forked from s425077/PotatoPlan
156 lines
4.0 KiB
C#
156 lines
4.0 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 = false;
|
|
private int nightTime = 0;
|
|
private int dayTime = 0;
|
|
private int lengthOfDay = 20000;
|
|
private int lengthOfNight = 20000;
|
|
private int Days = 1;
|
|
private int DaysOfYear = 0;
|
|
|
|
public void updateTime(int Speed)
|
|
{
|
|
Time = false;
|
|
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++;
|
|
DaysOfYear++;
|
|
}
|
|
}
|
|
if (DaysOfYear == 365)
|
|
{
|
|
DaysOfYear = 0;
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
//Season:
|
|
//0 - Whole Year
|
|
//1 - Spring
|
|
//2 - Summer
|
|
//3 - Autumn
|
|
//4 - Winter
|
|
|
|
public int getTimeOfYear()
|
|
{
|
|
if (DaysOfYear < 93)
|
|
return 1;
|
|
else if (DaysOfYear < 187)
|
|
return 2;
|
|
else if (DaysOfYear < 276)
|
|
return 3;
|
|
else
|
|
return 4;
|
|
}
|
|
|
|
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);
|
|
}
|
|
}
|
|
}
|
|
return Color.FromNonPremultiplied(red, green, blue, 255);
|
|
}
|
|
|
|
public bool nDay()
|
|
{
|
|
if (Time)
|
|
return true;
|
|
else
|
|
return false;
|
|
}
|
|
|
|
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;
|
|
}
|
|
}
|