Time Dilation (замедление) от 0 до 1 и величина, на которую оно влияет - PullRequest
0 голосов
/ 18 сентября 2018

Надеюсь, я смогу это объяснить. Итак, я создаю игру и хочу контролировать течение времени для разных объектов в мире. Я хочу глобальное расширение, с помощью которого я могу приостановить игру (все объекты и их таймеры). Я хочу, чтобы расширение было специфичным для комнаты, на которое влияют некоторые объекты, а другие - нет. Я также хочу, чтобы те, которые специфичны для отдельных лиц. Это было то, о чем я думал:

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, он все равно влияет на него определенным образом. Я пытался усреднить их, но это не было желаемого эффекта. Я не могу найти решение этого математического уравнения. Я слишком усложняю это? Или думать об этом неправильно?

...