public class ComEffectColor : ComEffectBase<Ref<Color>>
{
private readonly Color finalColor;
private Color originalColor;
public ComEffectColor(Ref<Color> effectTarget, Color finalColor, TimeSpan duration, TimeSpan startDelay)
: base(effectTarget, duration, startDelay)
{
this.finalColor = finalColor;
StartDelayEnded += ComEffectColorStartDelayEnded;
}
protected override void UpdateCustom()
{
if (elapsedTime < duration)
{
float progress = (float)(elapsedTime.TotalMilliseconds / duration.TotalMilliseconds);
effectTarget.Value = Color.Lerp(originalColor, finalColor, progress);
}
else
{
effectTarget.Value = finalColor;
InvokeFinished();
}
}
void ComEffectColorStartDelayEnded(object sender, EventArgs e)
{
originalColor = effectTarget.Value;
}
}
Это конструктор класса ComEffectColor: IComEffect . Его функция заключается в получении указателя на цветовую переменную, которая может принадлежать любому другому объекту, и постепенном изменении его значения в направлении «targetColor» в течение указанной продолжительности.
после инициализации такого класса эффекта он добавляется в экземпляр ComEffectManager, который обрабатывает их обновление и удаление после их завершения.
Проблема, с которой я сталкиваюсь, заключается в том, чтобы включить смешивание двух или более ComEffectColor для одной и той же цветовой переменной. Поэтому, если я начну с цветовой переменной черного цвета (0, 0, 0) и добавлю 2 ComEffectColor с продолжительностью 1 секунда каждый, где целевой цвет первого равен (128, 128, 128), а другой - (0, 0, 0), через 1 секунду я должен получить (64, 64, 64).
Я хочу, чтобы эффекты были независимыми, поэтому я не хочу сначала собирать все смещения цвета, находить «суммирование силы» и применять это к переменной цвета. Это связано с другими функциями IComEffect, но я не хочу делать это очень длинным постом.
Другие эффекты могут быть добавлены, пока эти 2 в приведенном выше примере все еще работают.
Есть идеи, как это можно сделать?
Приведенный выше код является наивной реализацией, которая перезаписывает другие эффекты, запущенные одновременно. Это не полный класс, поскольку он наследуется от ComEffectBase, который обрабатывает все общие процедуры всех видов эффектов.