using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.Data;
using Microsoft.DirectX;
using Microsoft.DirectX.Direct3D;
using Rmake.Framework.Logging;
using Rmake.Rendering.APIWrapper;
using Rmake.Rendering.ComponentLayer;
namespace Rmake.GameRendering
{
///
/// GameRendering関連の初期化をおこなうクラス
///
public class GameRenderingInitializer
{
private D3DDeviceWrapper device = null;
private ComponentFactory componentFactory = null;
private ComponentManager componentManager = null;
private GameRenderingFactory factory = null;
private GameRenderingManager manager = null;
private bool initialized = false;
///
/// GameRendering関連のインスタンスを生成するクラスの
/// インスタンスを取得する
///
public GameRenderingFactory Factory
{
get {return factory;}
}
///
/// GameRendering関連のインスタンスを管理するクラスの
/// インスタンスを取得する
///
public GameRenderingManager Manager
{
get {return manager;}
}
///
/// 初期化されているのならばtrue
/// 初期化されていないのならばfalseを返す
///
public bool Initialized
{
get { return initialized; }
}
///
/// Constructor
///
private GameRenderingInitializer()
{
}
~GameRenderingInitializer()
{
this.Release();
}
private static GameRenderingInitializer gameRenderingInitializer = null;
static public GameRenderingInitializer GetInstance()
{
if (gameRenderingInitializer == null)
{
gameRenderingInitializer = new GameRenderingInitializer();
}
return gameRenderingInitializer;
}
///
/// GameRendering を初期化する Method
///
/// 初期化時に使用する Control
/// true の場合は Window Mode
/// 初期化に成功した場合は true、失敗した場合は false
public bool Initialize(Control control, bool isWindowMode)
{
Release();
// New Instances
device = new D3DDeviceWrapper();
componentManager = new ComponentManager();
componentFactory = new ComponentFactory();
manager = new GameRenderingManager();
factory = new GameRenderingFactory();
// Initialize Instances
if(device.Initialize(control, isWindowMode) == false)
{
return false;
}
componentManager.Initialize(device);
componentFactory.Initialize(device, componentManager);
manager.Initialize(componentManager);
factory.Initialize(componentFactory, manager);
initialized = true;
return true;
}
///
/// GameRendering の終了処理を行う
///
public void Release()
{
initialized = false;
if(factory != null)
{
factory.CleanUp();
factory = null;
}
if(manager != null)
{
manager.CleanUp();
manager = null;
}
if(componentFactory != null)
{
componentFactory.CleanUp();
componentFactory = null;
}
if(componentManager != null)
{
componentManager.CleanUp();
componentManager = null;
}
if (device != null)
{
device.CleanUp();
device = null;
}
}
}
}