Надеюсь, я смогу это объяснить. Итак, я создаю игру и хочу контролировать течение времени для разных объектов в мире. Я хочу глобальное расширение, с помощью которого я могу приостановить игру (все объекты и их таймеры). Я хочу, чтобы расширение было специфичным для комнаты, на которое влияют некоторые объекты, а другие - нет. Я также хочу, чтобы те, которые специфичны для отдельных лиц. Это было то, о чем я думал:
List<Tuple<double,double>> DilationAffectors = stuff;
В этом списке будут указаны все Дилатации, влияющие на объект, и влияние, которое они оказывают на объект (0 - отсутствие эффекта, .5 - влияние наполовину, 1 - полный эффект). Следующая логика - своего рода то, как я применил бы ее к течению времени
var elapsedTime = 0.0;
Stopwatch stopwatch = new Stopwatch();
stopwatch.start();
While(true)
{ //The function in question
double dilation = getDilation(DilationAffectors);
var timeBetween = stopwatch.Elapsed - LastTick;
elapsedTime += TimeSpan.FromTicks((long)(timeBetween.Ticks * dilation));
LastTick = stopwatch.Elapsed;
//...
}
Итак, я попробовал несколько вариантов функции getDilation, но я не могу понять математику правильно.
- Если в комнате скорость 1,0, это не должно влиять на скорость объекта
- Если глобальная скорость равна 0, время вообще не должно пройти
- Если удельное расширение объекта составляет 0,5, оно должно двигаться с половинной скоростью. (если скорость не зависит от скорости помещения, то она равна половине скорости помещения)
- и т.д.. и т. д. для других условий
Кажется, я не могу получить разные расширения, чтобы играть вместе.
Если человек имеет расширение 0, но влияет на объект на 0, он все равно влияет на него определенным образом. Я пытался усреднить их, но это не было желаемого эффекта.
Я не могу найти решение этого математического уравнения. Я слишком усложняю это? Или думать об этом неправильно?