mirror of
https://github.com/simtactics/mysimulation.git
synced 2025-03-19 16:31:21 +00:00
70 lines
2.2 KiB
C#
70 lines
2.2 KiB
C#
|
using Microsoft.Xna.Framework;
|
|||
|
using System;
|
|||
|
|
|||
|
namespace FSO.Common.Rendering
|
|||
|
{
|
|||
|
public static class TimeOfDayConfig
|
|||
|
{
|
|||
|
public static float DarknessMultiplier = 0.8f;
|
|||
|
private static Color[] m_TimeColors = new Color[]
|
|||
|
{
|
|||
|
new Color(50, 70, 122)*1.25f,
|
|||
|
new Color(50, 70, 122)*1.25f,
|
|||
|
new Color(55, 75, 111)*1.25f,
|
|||
|
new Color(70, 70, 70)*1.25f,
|
|||
|
new Color(217, 109, 50), //sunrise
|
|||
|
new Color(255, 255, 255),
|
|||
|
new Color(255, 255, 255), //peak
|
|||
|
new Color(255, 255, 255), //peak
|
|||
|
new Color(255, 255, 255),
|
|||
|
new Color(255, 255, 255),
|
|||
|
new Color(217, 109, 50), //sunset
|
|||
|
new Color(70, 70, 70)*1.25f,
|
|||
|
new Color(55, 75, 111)*1.25f,
|
|||
|
new Color(50, 70, 122)*1.25f,
|
|||
|
};
|
|||
|
|
|||
|
private static float[] m_SkyColors = new float[]
|
|||
|
{
|
|||
|
4/8f,
|
|||
|
4/8f,
|
|||
|
4/8f,
|
|||
|
5/8f,
|
|||
|
6/8f, //sunrise
|
|||
|
7/8f,
|
|||
|
8/8f, //peak
|
|||
|
0/8f, //peak
|
|||
|
0/8f,
|
|||
|
0/8f,
|
|||
|
1/8f, //sunset
|
|||
|
2/8f,
|
|||
|
3/8f,
|
|||
|
4/8f,
|
|||
|
};
|
|||
|
|
|||
|
private static Color PowColor(Color col, float pow)
|
|||
|
{
|
|||
|
var vec = col.ToVector4();
|
|||
|
vec.X = (float)Math.Pow(vec.X, pow);
|
|||
|
vec.Y = (float)Math.Pow(vec.Y, pow);
|
|||
|
vec.Z = (float)Math.Pow(vec.Z, pow);
|
|||
|
|
|||
|
return new Color(vec);
|
|||
|
}
|
|||
|
|
|||
|
public static Color ColorFromTime(double time)
|
|||
|
{
|
|||
|
Color col1 = m_TimeColors[(int)Math.Floor(time * (m_TimeColors.Length - 1))]; //first colour
|
|||
|
Color col2 = m_TimeColors[(int)Math.Floor(time * (m_TimeColors.Length - 1)) + 1]; //second colour
|
|||
|
if (DarknessMultiplier != 1.0)
|
|||
|
{
|
|||
|
col1 = Color.Lerp(Color.White, col1, DarknessMultiplier);
|
|||
|
col2 = Color.Lerp(Color.White, col2, DarknessMultiplier);
|
|||
|
}
|
|||
|
double Progress = (time * (m_TimeColors.Length - 1)) % 1; //interpolation progress (mod 1)
|
|||
|
|
|||
|
return PowColor(Color.Lerp(col1, col2, (float)Progress), 2.2f); //linearly interpolate between the two colours for this specific time.
|
|||
|
}
|
|||
|
}
|
|||
|
}
|