2021-09-21 00:16:38 +02:00
|
|
|
|
using System;
|
|
|
|
|
using System.Collections.Generic;
|
|
|
|
|
using System.Text;
|
|
|
|
|
|
|
|
|
|
namespace FDK
|
|
|
|
|
{
|
|
|
|
|
public class CActivity
|
|
|
|
|
{
|
|
|
|
|
// プロパティ
|
|
|
|
|
|
2023-09-18 01:11:17 +02:00
|
|
|
|
public bool IsActivated { get; private set; }
|
|
|
|
|
public bool IsDeActivated
|
2021-09-21 00:16:38 +02:00
|
|
|
|
{
|
|
|
|
|
get
|
|
|
|
|
{
|
2023-09-18 01:11:17 +02:00
|
|
|
|
return !this.IsActivated;
|
2021-09-21 00:16:38 +02:00
|
|
|
|
}
|
|
|
|
|
set
|
|
|
|
|
{
|
2023-09-18 01:11:17 +02:00
|
|
|
|
this.IsActivated = !value;
|
2021-09-21 00:16:38 +02:00
|
|
|
|
}
|
|
|
|
|
}
|
2023-09-18 01:11:17 +02:00
|
|
|
|
public List<CActivity> ChildActivities;
|
2021-09-21 00:16:38 +02:00
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// <para>初めて On進行描画() を呼び出す場合に true を示す。(On活性化() 内で true にセットされる。)</para>
|
|
|
|
|
/// <para>このフラグは、On活性化() では行えないタイミングのシビアな初期化を On進行描画() で行うために準備されている。利用は必須ではない。</para>
|
|
|
|
|
/// <para>On進行描画() 側では、必要な初期化を追えたら false をセットすること。</para>
|
|
|
|
|
/// </summary>
|
2023-09-18 01:11:17 +02:00
|
|
|
|
protected bool IsFirstDraw = true;
|
2021-09-21 00:16:38 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// コンストラクタ
|
|
|
|
|
|
|
|
|
|
public CActivity()
|
|
|
|
|
{
|
2023-09-18 01:11:17 +02:00
|
|
|
|
this.IsDeActivated = true;
|
|
|
|
|
this.ChildActivities = new List<CActivity>();
|
2021-09-21 00:16:38 +02:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// ライフサイクルメソッド
|
|
|
|
|
|
|
|
|
|
#region [ 子クラスで必要なもののみ override すること。]
|
|
|
|
|
//-----------------
|
|
|
|
|
|
2023-09-18 01:11:17 +02:00
|
|
|
|
public virtual void Activate()
|
2021-09-21 00:16:38 +02:00
|
|
|
|
{
|
|
|
|
|
// すでに活性化してるなら何もしない。
|
2023-09-18 01:11:17 +02:00
|
|
|
|
if( this.IsActivated )
|
2021-09-21 00:16:38 +02:00
|
|
|
|
return;
|
|
|
|
|
|
2023-09-18 01:11:17 +02:00
|
|
|
|
this.IsActivated = true; // このフラグは、以下の処理をする前にセットする。
|
2021-09-21 00:16:38 +02:00
|
|
|
|
|
|
|
|
|
// 自身のリソースを作成する。
|
2023-09-18 01:11:17 +02:00
|
|
|
|
//this.CreateManagedResource();
|
|
|
|
|
//this.CreateUnmanagedResource();
|
2021-09-21 00:16:38 +02:00
|
|
|
|
|
|
|
|
|
// すべての子 Activity を活性化する。
|
2023-09-18 01:11:17 +02:00
|
|
|
|
foreach( CActivity activity in this.ChildActivities )
|
|
|
|
|
activity.Activate();
|
2021-09-21 00:16:38 +02:00
|
|
|
|
|
|
|
|
|
// その他の初期化
|
2023-09-18 01:11:17 +02:00
|
|
|
|
this.IsFirstDraw = true;
|
2021-09-21 00:16:38 +02:00
|
|
|
|
}
|
2023-09-18 01:11:17 +02:00
|
|
|
|
public virtual void DeActivate()
|
2021-09-21 00:16:38 +02:00
|
|
|
|
{
|
|
|
|
|
// 活性化してないなら何もしない。
|
2023-09-18 01:11:17 +02:00
|
|
|
|
if( this.IsDeActivated )
|
2021-09-21 00:16:38 +02:00
|
|
|
|
return;
|
|
|
|
|
|
|
|
|
|
// 自身のリソースを解放する。
|
2023-09-18 01:11:17 +02:00
|
|
|
|
//this.ReleaseUnmanagedResource();
|
|
|
|
|
//this.ReleaseManagedResource();
|
2021-09-21 00:16:38 +02:00
|
|
|
|
|
|
|
|
|
// すべての 子Activity を非活性化する。
|
2023-09-18 01:11:17 +02:00
|
|
|
|
foreach( CActivity activity in this.ChildActivities )
|
|
|
|
|
activity.DeActivate();
|
2021-09-21 00:16:38 +02:00
|
|
|
|
|
2023-09-18 01:11:17 +02:00
|
|
|
|
this.IsDeActivated = true; // このフラグは、以上のメソッドを呼び出した後にセットする。
|
2021-09-21 00:16:38 +02:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// <para>Managed リソースの作成を行う。</para>
|
|
|
|
|
/// <para>Direct3D デバイスが作成された直後に呼び出されるので、自分が活性化している時に限り、
|
|
|
|
|
/// Managed リソースを作成(または再構築)すること。</para>
|
|
|
|
|
/// <para>いつどのタイミングで呼び出されるか(いつDirect3Dが再作成されるか)分からないので、
|
|
|
|
|
/// いつ何時呼び出されても問題無いようにコーディングしておくこと。</para>
|
|
|
|
|
/// </summary>
|
2023-09-18 01:11:17 +02:00
|
|
|
|
public virtual void CreateManagedResource()
|
2021-09-21 00:16:38 +02:00
|
|
|
|
{
|
|
|
|
|
// すべての 子Activity の Managed リソースを作成する。
|
2023-09-18 01:11:17 +02:00
|
|
|
|
foreach( CActivity activity in this.ChildActivities )
|
|
|
|
|
activity.CreateManagedResource();
|
2021-09-21 00:16:38 +02:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// <para>Unmanaged リソースの作成を行う。</para>
|
|
|
|
|
/// <para>Direct3D デバイスが作成またはリセットされた直後に呼び出されるので、自分が活性化している時に限り、
|
|
|
|
|
/// Unmanaged リソースを作成(または再構築)すること。</para>
|
|
|
|
|
/// <para>いつどのタイミングで呼び出されるか(いつDirect3Dが再作成またはリセットされるか)分からないので、
|
|
|
|
|
/// いつ何時呼び出されても問題無いようにコーディングしておくこと。</para>
|
|
|
|
|
/// </summary>
|
2023-09-18 01:11:17 +02:00
|
|
|
|
public virtual void CreateUnmanagedResource()
|
2021-09-21 00:16:38 +02:00
|
|
|
|
{
|
|
|
|
|
// すべての 子Activity の Unmanaged リソースを作成する。
|
2023-09-18 01:11:17 +02:00
|
|
|
|
foreach( CActivity activity in this.ChildActivities )
|
|
|
|
|
activity.CreateUnmanagedResource();
|
2021-09-21 00:16:38 +02:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// <para>Unmanaged リソースの解放を行う。</para>
|
|
|
|
|
/// <para>Direct3D デバイスの解放直前またはリセット直前に呼び出される。</para>
|
|
|
|
|
/// <para>いつどのタイミングで呼び出されるか(いつDirect3Dが解放またはリセットされるか)分からないので、
|
|
|
|
|
/// いつ何時呼び出されても問題無いようにコーディングしておくこと。</para>
|
|
|
|
|
/// </summary>
|
2023-09-18 01:11:17 +02:00
|
|
|
|
public virtual void ReleaseUnmanagedResource()
|
2021-09-21 00:16:38 +02:00
|
|
|
|
{
|
|
|
|
|
// 活性化してないなら何もしない。
|
2023-09-18 01:11:17 +02:00
|
|
|
|
if( this.IsDeActivated )
|
2021-09-21 00:16:38 +02:00
|
|
|
|
return;
|
|
|
|
|
|
|
|
|
|
// すべての 子Activity の Unmanaged リソースを解放する。
|
2023-09-18 01:11:17 +02:00
|
|
|
|
foreach( CActivity activity in this.ChildActivities )
|
|
|
|
|
activity.ReleaseUnmanagedResource();
|
2021-09-21 00:16:38 +02:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// <para>Managed リソースの解放を行う。</para>
|
|
|
|
|
/// <para>Direct3D デバイスの解放直前に呼び出される。
|
|
|
|
|
/// (Unmanaged リソースとは異なり、Direct3D デバイスのリセット時には呼び出されない。)</para>
|
|
|
|
|
/// <para>いつどのタイミングで呼び出されるか(いつDirect3Dが解放されるか)分からないので、
|
|
|
|
|
/// いつ何時呼び出されても問題無いようにコーディングしておくこと。</para>
|
|
|
|
|
/// </summary>
|
2023-09-18 01:11:17 +02:00
|
|
|
|
public virtual void ReleaseManagedResource()
|
2021-09-21 00:16:38 +02:00
|
|
|
|
{
|
|
|
|
|
// 活性化してないなら何もしない。
|
2023-09-18 01:11:17 +02:00
|
|
|
|
if( this.IsDeActivated )
|
2021-09-21 00:16:38 +02:00
|
|
|
|
return;
|
|
|
|
|
|
|
|
|
|
// すべての 子Activity の Managed リソースを解放する。
|
2023-09-18 01:11:17 +02:00
|
|
|
|
foreach( CActivity activity in this.ChildActivities )
|
|
|
|
|
activity.ReleaseManagedResource();
|
2021-09-21 00:16:38 +02:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// <para>進行と描画を行う。(これらは分離されず、この1つのメソッドだけで実装する。)</para>
|
|
|
|
|
/// <para>このメソッドは BeginScene() の後に呼び出されるので、メソッド内でいきなり描画を行ってかまわない。</para>
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <returns>任意の整数。呼び出し元との整合性を合わせておくこと。</returns>
|
2023-09-18 01:11:17 +02:00
|
|
|
|
public virtual int Draw()
|
2021-09-21 00:16:38 +02:00
|
|
|
|
{
|
|
|
|
|
// 活性化してないなら何もしない。
|
2023-09-18 01:11:17 +02:00
|
|
|
|
if( this.IsDeActivated )
|
2021-09-21 00:16:38 +02:00
|
|
|
|
return 0;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/* ここで進行と描画を行う。*/
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 戻り値とその意味は子クラスで自由に決めていい。
|
|
|
|
|
return 0;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//-----------------
|
|
|
|
|
#endregion
|
|
|
|
|
}
|
|
|
|
|
}
|