// zlib/libpng License
//
// Copyright (c) 2018 Sinoa
//
// This software is provided 'as-is', without any express or implied warranty.
// In no event will the authors be held liable for any damages arising from the use of this software.
// Permission is granted to anyone to use this software for any purpose,
// including commercial applications, and to alter it and redistribute it freely,
// subject to the following restrictions:
//
// 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software.
// If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
// 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
// 3. This notice may not be removed or altered from any source distribution.
using System;
namespace IceMilkTea.Core
{
///
/// サービスが動作するための更新タイミングを表します
///
[Flags]
public enum GameServiceUpdateTiming : UInt32
{
///
/// メインループ最初のタイミング。
/// ただし、Time.frameCountや入力情報の更新直後となります。
///
MainLoopHead = (1 << 0),
///
/// MonoBehaviour.FixedUpdate直前のタイミング
///
PreFixedUpdate = (1 << 1),
///
/// MonoBehaviour.FixedUpdate直後のタイミング
///
PostFixedUpdate = (1 << 2),
///
/// 物理シミュレーション直後のタイミング。
/// ただし、シミュレーションによる物理イベントキューが全て処理された直後となります。
///
PostPhysicsSimulation = (1 << 3),
///
/// WaitForFixedUpdate直後のタイミング。
///
PostWaitForFixedUpdate = (1 << 4),
///
/// UnitySynchronizationContextにPostされた関数キューが処理される直前のタイミング
///
PreProcessSynchronizationContext = (1 << 5),
///
/// UnitySynchronizationContextにPostされた関数キューが処理された直後のタイミング
///
PostProcessSynchronizationContext = (1 << 6),
///
/// MonoBehaviour.Update直前のタイミング
///
PreUpdate = (1 << 7),
///
/// MonoBehaviour.Update直後のタイミング
///
PostUpdate = (1 << 8),
///
/// UnityのAnimator(UpdateMode=Normal)によるポージング処理される直前のタイミング
///
PreAnimation = (1 << 9),
///
/// UnityのAnimator(UpdateMode=Normal)によるポージング処理された直後のタイミング
///
PostAnimation = (1 << 10),
///
/// MonoBehaviour.LateUpdate直前のタイミング
///
PreLateUpdate = (1 << 11),
///
/// MonoBehaviour.LateUpdate直後のタイミング
///
PostLateUpdate = (1 << 12),
///
/// メインスレッドにおける描画デバイスのPresentする直前のタイミング
///
PreDrawPresent = (1 << 13),
///
/// メインスレッドにおける描画デバイスのPresentされた直後のタイミング
///
PostDrawPresent = (1 << 14),
///
/// メインループの最後のタイミング。
///
MainLoopTail = (1 << 15),
///
/// Unityプレイヤーのフォーカスが得られたときのタイミング。
/// OnApplicationFocus(true)。
///
OnApplicationFocusIn = (1 << 16),
///
/// Unityプレイヤーのフォーカスが失われたときのタイミング。
/// OnApplicationFocus(false)。
///
OnApplicationFocusOut = (1 << 17),
///
/// Unityプレイヤーのメインループが一時停止したときのタイミング。
/// OnApplicationPause(true)。
///
OnApplicationSuspend = (1 << 18),
///
/// Unityプレイヤーのメインループが再開したときのタイミング。
/// OnApplicationPause(false)。
///
OnApplicationResume = (1 << 19),
///
/// あらゆるカメラのカリングが行われる直前のタイミング。
/// ただし、カメラが存在する数分1フレームで複数回呼び出される可能性があります。
/// さらに、スレッドはメインスレッド上におけるタイミングとなります。
///
CameraPreCulling = (1 << 20),
///
/// あらゆるカメラのレンダリングが行われる直前のタイミング。
/// ただし、カメラが存在する数分1フレームで複数回呼び出される可能性があります。
/// さらに、スレッドはメインスレッド上におけるタイミングとなります。
///
CameraPreRendering = (1 << 21),
///
/// あらゆるカメラのレンダリングが行われた直後のタイミング。
/// ただし、カメラが存在する数分1フレームで複数回呼び出される可能性があります。
/// さらに、スレッドはメインスレッド上におけるタイミングとなります。
///
CameraPostRendering = (1 << 22),
///
/// UnityプレイヤーのWaitForEndOfFrameの継続するタイミング。
/// {yield return endOfFrame; OnEndOfFrame;}
///
OnEndOfFrame = (1 << 23),
}
}