非同期関数をもとにしたsleepの実行方法について質問になります。
下記のように「トリガーの仕掛け」をAwait実行させるコードがあります。
このコードの本文中の2つ目のFor文のように、For文ループ中に事前に発生させている非同期のタスクCheckTriggerから何らかのシグナルを受け取り、受け取った時点から一定時間sleepさせたいというのが実現したいことです。
つまり2つ目のFor文の開始→1回のループ中にCheckTriggerタスク実行(Fortnite上でトリガーの仕掛けを起動)→そのループ内でさらに一定時間待機→次のループ実行という処理になります。ポイントとしてはCheckTriggerは非同期実行となるので、こうしたことが実現可能かどうかということをアドバイスいただければと思います。
よろしくお願いします。
@editable
TriggerCards : []trigger_device = array{}
# Runs when the device is started in a running game
OnBegin<override>()<suspends>:void=
for(Index -> TriggerCard : TriggerCards):
#トリガーのAwait
spawn{CheckTrigger(TriggerCard)}
# 【質問点】2つ目のFor文。1回目のループ実行(ループ内で一定時間Sleepする)→ループ中にFortnite内でトリガーがダメージ起動され、トリガーの仕掛けCheckTriggerの実行→CheckTriggerの実行後、さらに一定時間待機してから次のForループを実行する(以下同じ)
for(Index := 0..Reading.Length-1):
if:
...........
then:
Sleep(5.0)
# CheckTriggerから何らかのシグナルを受け取り、受けとった時点からさらにsleep開始
CheckTrigger(TriggerCard:trigger_device)<suspends>:void =
loop:
#トリガーが起動するまで停止する
Agent := TriggerCard.TriggeredEvent.Await()
...