C#
game
Terraria

【Terraria】テラリアでのゲーム時間を24時間形式で管理する

はじめに

この記事はテラリアというゲームでのMod開発に関する情報です。
サンプルコードや、公開されているコードを参考にMod開発をしている状況で、備忘録としてのまとめでもあり、記事投稿時点での知識で書いていますので、間違いもあるかもしれませんのでご注意ください。

テラリアでの世界の時間について

テラリアの世界での時間は double Terraria.Main.time で取得できます。
テラリアでは 04:30 ~ 19:29 までが昼。19:30 ~ 04:29 までが夜して扱われており、timeはそれぞれのタイミングで 0 にリセットされます。
このため、昼か夜かの判断は、 bool Terraria.Main.dayTime で行います。

個人的には24時間形式の方が時刻の判断はしやすいので、00:00 を 0 として判断するように変換を行うようにします。
なお、テラリアの世界では、現実の 1 秒を、 1分として世界が動いていますので、 time の値の 1 は、テラリアの世界での 1 秒です。

00:00 を 0 とした値にする

using Terraria;
 :
public const double sec = 1;
public const double min = sec * 60;
public const double hour = min * 60;
public const double daytime = hour * 4 + min * 30;
public const double night = hour * 19 + min * 30;
public const double am12 = hour * 24;
public static double get24time()
{
    double result = Main.time + (Main.dayTime ? daytime : night);
    if (am12 < result)
        result -= am12;
    return result;
}
public static string getDisplay24Time()
{
    string result = string.Empty;
    double time = get24time;
    result = $"{(int)(time / hour % 24):D2}:{(int)(time / min % 60):D2}";
    return result;
}

コードにいまひとつな所もありますが、こんな感じで00:00からを0として時間を扱うようにすれば、時間別のイベントの判断などがしやすいのではないかと思います。

以上