40 lines
1.7 KiB
C#
40 lines
1.7 KiB
C#
using Terraria.ModLoader;
|
|
using Terraria;
|
|
using Microsoft.Xna.Framework;
|
|
using System;
|
|
|
|
namespace ForgottenWawiTech.Content.Rarities
|
|
{
|
|
public class SingularityItem : ModRarity
|
|
{
|
|
// Fade between very dark purple and bright purple (avoids unreadable black)
|
|
// with periodic brightness pulses for a "singularity" feel.
|
|
public override Color RarityColor
|
|
{
|
|
get
|
|
{
|
|
float time = Main.GlobalTimeWrappedHourly;
|
|
|
|
// Base fade (slow): very dark purple <-> bright purple
|
|
const float fadeHz = 0.5f; // cycles per second
|
|
float fadeT = (float)((Math.Sin(time * fadeHz * MathHelper.TwoPi) + 1f) * 0.5f); // 0..1
|
|
// Keep a minimum fade so text stays readable
|
|
const float minFade = 0.25f; // never dip below 25% toward bright
|
|
fadeT = minFade + (1f - minFade) * fadeT; // remap to [minFade, 1]
|
|
|
|
Color veryDarkPurple = new Color(50, 0, 80);
|
|
Color brightPurple = new Color(160, 0, 255);
|
|
Color baseColor = Color.Lerp(veryDarkPurple, brightPurple, fadeT);
|
|
|
|
// Pulse (quick, narrow peaks). Using a powered sine to make sharp flashes.
|
|
const float pulseHz = 1.2f; // pulses per second
|
|
float s = (float)Math.Sin(time * pulseHz * MathHelper.TwoPi);
|
|
float pulse = (float)Math.Pow(Math.Max(0f, s), 3f); // 0..1, narrow peaks
|
|
float brightness = 1f + 0.25f * pulse; // up to +25% brightness at pulse peak
|
|
|
|
// Multiply to apply brightness pulse. Color*float clamps components safely.
|
|
return baseColor * brightness;
|
|
}
|
|
}
|
|
}
|
|
} |