simplestarの技術ブログ

目的を書いて、思想と試行、結果と考察、そして具体的な手段を記録します。

CubeArtWorld:過去へさかのぼるタイムトラベル

f:id:simplestar_tech:20210223170337p:plain
過去の世界とは

実はこの半年、ゲーム内のワールドデータのバックアップを毎日取ってきているため、これを時刻指定で参照して拾ってこれさえすれば、過去を再現した世界を見ることができるようになります!!

さっそく作れるのか技術課題を明らかにしてみましょう。

## 過去データ形式

日付ごとにファイルが作られています。
ワールドごとにとびとびなので、日付を決めただけでは、正しい過去の日付を見つけることができない

リストを日々更新することになるが、ファイル一覧をなめるのは無駄が多い
そこで、バックアップ処理で追記していく json を Title Internal に置くことにしてみましょう

また、TitleInternalData の規則に変な奴がいるので、CubeDataLife としてリネームしておくことにします。
関連処理の lambda 実装を追って、移行計画も立ててみましょう

キー名を統一するだけに見えたので、いきなり試行 朝3時に定期実行が来るので、様子を見ます→キー使用コードの差し替え漏れでバックアップが機能しませんでした。
修正したので次の日こそ!

構想では 2020年7月21日が紀元とされていて、そこから暦を一日ずつ刻むことにして
[1, 2, 3, 4, 5, 9, 100, 101, 200, 209]
といった形で配列を刻みます

TimeSpan span = DateTime.UtcNow- new DateTime(2020/7/21) ;
span.Days //差の日数

時刻から日数、日数よりさかのぼって発見する記録日数が見つけられたなら
日数を紀元に足して記録日を求める
DateTime today = new DateTime(2020/7/21).AddDays(span.Days);

var suffix = date.ToString("_yyyy-MM-dd");
で求めたい過去のデータを見つけられる気がする

まずは一度 s3 のファイルリストを取得するところからですね

ファイルリストは取れました。求めていたファイル名にも復元できます。

続いてクライアントからどうやって取り出すのか

## タイムドアアイテム

インスタントアイテムとして、ガフの扉を配置すると、日時を指定できるようになり (2020/7/21 ~ 今日まで)
選ぶと同時に扉が上昇しながら大きくなり 天井で巨大化
周囲のキューブが崩れ、自身と共に扉に向かって浮き上がっていき ゆっくりとホワイトアウトすると

過去世界データを引いて、世界が再構築され、その世界に扉から今度は落下して着地する
以後はもう一度ガフの扉を開くまで、過去世界でアイテムを増やすことも減らすこともできない世界に取り残されて、残らない過去への干渉を続けるだけになる

ガフの扉で最大の今日の日付を選ぶと、元の世界に戻ってくる

というの作るとしたら

## サーバー側の仕事

戻りたい過去の日付をサーバーに送り、過去の世界のデータダウンロード url を発行して返す という仕組みが世界データロードで差しかわれば
キャッシュを残さずに動けるかも

ということで、s3 の一次的なダウンロード url の発行というものを行います

もろもろできましたね
リリースしました