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 Configurations = Rmake.Model.Configurations;
using Materials = Rmake.Model.Materials;
using Rmake.Model;
using Rmake.Model.Enums;
using Rmake.Rendering.APIWrapper;
using Rmake.Rendering.ComponentLayer;
using Rmake.Framework.Logging;
using Rmake.Model.Engine;
using Rmake.API.Interfaces.Model;
namespace Rmake.GameRendering
{
///
/// GameRendering関連のインスタンスを生成するクラス
///
public class GameRenderingFactory
{
private ComponentFactory componentFactory = null;
private GameRenderingManager manager = null;
public ComponentFactory ComponentFactory
{
get { return componentFactory; }
}
public GameRenderingFactory()
{
}
internal bool Initialize(ComponentFactory componentFactory
, GameRenderingManager manager)
{
this.componentFactory = componentFactory;
this.manager = manager;
return true;
}
internal void CleanUp()
{
componentFactory = null;
manager = null;
}
///
/// Sceneの生成
///
/// 生成されたScene
public SceneView CreateSceneView()
{
SceneView sceneView = new SceneView(manager);
manager.SceneViewHash.Add(sceneView, sceneView);
return sceneView;
}
///
/// ImageViewWrapperの生成
///
/// 読み込む画像のファイル名
/// 一番左上のピクセルの色を透過色とするかどうか
/// 生成されたImageViewWrapperが返る
public ImageViewWrapper CreateImageViewWrapper(string fileName, bool leftTopTransparent)
{
ImageViewWrapper imageViewWrapper = new ImageViewWrapper();
ImageView imageView;
imageView = componentFactory.CreateImageView(fileName, leftTopTransparent);
if(imageView == null)
{
return null;
}
imageViewWrapper.Initialize(
imageView);
imageViewWrapper.SourceRectangle = new Rectangle(new Point(0, 0), new Size(imageViewWrapper.ImageWidth, imageViewWrapper.ImageHeight));
imageViewWrapper.DestinationPoint = new Point(0, 0);
imageViewWrapper.LayerIndex = -1;
imageViewWrapper.Manager = manager;
manager.GameRenderingViews.Add(imageViewWrapper, imageViewWrapper);
return imageViewWrapper;
}
///
/// ImageViewWrapperの生成
///
/// 生成するImageViewWrapperのマテリアル
/// 生成されたImageViewWrapperが返る
public ImageViewWrapper CreateImageViewWrapper(Materials.Material material)
{
String filename = Folders.GetMaterialFolder(material.MaterialType) + material.Filename;
ImageViewWrapper imageViewWrapper = CreateImageViewWrapper(filename, material.IsTransparencyByTopLeftPixel);
return imageViewWrapper;
}
///
/// TextWindowViewの生成
///
/// 窓枠のテクスチャーに使用するファイルの指定
/// 一番左上のピクセルの色を透過色とするかどうか
/// 生成したTextWindowViewを返す
public TextWindowView CreateTextWindowView(string fileName,
bool leftTopTransparent)
{
TextWindowView textWindwoView = new TextWindowView();
FontParameter fontParameter = new FontParameter();
//fontParameter.FontName = fontName;
//fontParameter.Height = height;
WindowView windowView;
TextView textView;
windowView = componentFactory.CreateWindow(fileName, leftTopTransparent);
if(windowView == null)
{
return null;
}
textView = componentFactory.CreateTextView(fontParameter);
if(textView == null)
{
manager.Manager.DeleteRenderView(windowView);
return null;
}
textWindwoView.Initialize(
windowView,
textView);
textWindwoView.LayerIndex = -1;
textWindwoView.Manager = manager;
manager.GameRenderingViews.Add(textWindwoView, textWindwoView);
return textWindwoView;
}
///
/// SelectWindowViewの生成
///
/// 窓枠のテクスチャーに使用するファイルの指定
/// 一番左上のピクセルの色を透過色とするかどうか
/// 選択肢の数
/// 生成したSelectWindowViewを返す
public SelectWindowView CreateSelectWindowView(string fileName,
bool leftTopTransparent, int selectionSize)
{
SelectWindowView selectWindowView = new SelectWindowView();
FontParameter fontParameter = new FontParameter();
WindowView windowView;
TextView textView;
ImageView imageView;
windowView = componentFactory.CreateWindow(fileName, leftTopTransparent);
if(windowView == null)
{
return null;
}
textView = componentFactory.CreateTextView(fontParameter);
if(textView == null)
{
manager.Manager.DeleteRenderView(windowView);
return null;
}
imageView = componentFactory.CreateImageView(fileName, leftTopTransparent);
if(imageView == null)
{
manager.Manager.DeleteRenderView(windowView);
manager.Manager.DeleteRenderView(textView);
return null;
}
//fontParameter.FontName = fontName;
//fontParameter.Height = height;
selectWindowView.Initialize(
windowView,
textView,
imageView,
selectionSize);
selectWindowView.LayerIndex = -1;
selectWindowView.Manager = manager;
manager.GameRenderingViews.Add(selectWindowView, selectWindowView);
return selectWindowView;
}
///
/// SelectWindowViewの生成
///
/// 窓枠テクスチャーのマテリアル
/// 一番左上のピクセルの色を透過色とするかどうか
/// 選択肢の数
/// 生成されたSelectWindowView
public SelectWindowView CreateSelectWindowView(Materials.Material material,
bool leftTopTransparent, int selectionSize)
{
return CreateSelectWindowView(Folders.GetMaterialFolder(MaterialTypes.SystemImage) + material.Filename, leftTopTransparent, selectionSize);
}
///
/// CharacterViewの生成
///
/// キャラクターに指定するテクスチャーファイル名
/// 一番左上のピクセルの色を透過色とするかどうか
///
///
public CharacterView CreateCharacterView(string fileName,
bool leftTopTransparent, int animationSize)
{
CharacterView characterView = new CharacterView();
ArrayList animations = new ArrayList();
int i;
for(i = 0 ; i < animationSize ; i++)
{
AnimationView animationView;
animationView = componentFactory.CreateAnimationView(
fileName, leftTopTransparent);
if(animationView == null)
{
foreach (AnimationView j in animations)
{
manager.Manager.DeleteRenderView(j);
}
return null;
}
animations.Add(
animationView);
}
characterView.Initialize(animations);
characterView.DestinationPoint = new Point(0, 0);
characterView.LayerIndex = -1;
characterView.Manager = manager;
manager.GameRenderingViews.Add(characterView, characterView);
return characterView;
}
///
/// TileViewWrapperの生成
///
/// テクスチャーのファイル名のリスト
/// 一番左上のピクセルの色を透過色とするかどうか
/// 生成されたTileViewWrapper
public TileViewWrapper CreateTileViewWrapper(ArrayList fileNames, ArrayList leftTopTransparents)
{
TileViewWrapper tileViewWrapper = new TileViewWrapper();
TileView tileView = componentFactory.CreateTileView(fileNames, leftTopTransparents);
if(tileView == null) return null;
tileViewWrapper.Initialize(
tileView
);
tileViewWrapper.Manager = manager;
manager.GameRenderingViews.Add(tileViewWrapper, tileViewWrapper);
return tileViewWrapper;
}
public TileViewWrapper CreateTileViewWrapper(Materials.Material material, bool leftTopTransparent)
{
// TileView の生成
ArrayList fileNames = new ArrayList();
ArrayList leftTopTransparents = new ArrayList();
fileNames.Add(material.GetFullName());
leftTopTransparents.Add(leftTopTransparent);
TileView tileView = componentFactory.CreateTileView(fileNames, leftTopTransparents);
if (tileView == null) return null;
TileViewWrapper tileViewWrapper = new TileViewWrapper();
tileViewWrapper.Initialize(tileView);
tileViewWrapper.Manager = manager;
manager.GameRenderingViews.Add(tileViewWrapper, tileViewWrapper);
return tileViewWrapper;
}
///
/// TextViewWrapperの生成
///
///
//public TextViewWrapper CreateTextViewWrapper(FontParameter fontParameter)
public TextViewWrapper CreateTextViewWrapper()
{
TextViewWrapper textViewWrapper = new TextViewWrapper();
FontParameter fontParameter = new FontParameter();
TextView textView = componentFactory.CreateTextView(fontParameter);
textViewWrapper.Initialize(textView);
textViewWrapper.Manager = manager;
manager.GameRenderingViews.Add(textViewWrapper, textViewWrapper);
return textViewWrapper;
}
///
/// TextViewWrapperの生成
///
/// フォントのパラメーター
///
public TextViewWrapper CreateTextViewWrapper(Configurations.FontParameter fontParameter)
//public TextViewWrapper CreateTextViewWrapper()
{
TextViewWrapper textViewWrapper = new TextViewWrapper();
Rmake.Rendering.APIWrapper.FontParameter fontParameter2 = new Rmake.Rendering.APIWrapper.FontParameter();
fontParameter2.FontName = fontParameter.FontName;
fontParameter2.Height = fontParameter.Height;
TextView textView = componentFactory.CreateTextView(fontParameter2);
textViewWrapper.Initialize(textView);
textViewWrapper.Manager = manager;
manager.GameRenderingViews.Add(textViewWrapper, textViewWrapper);
return textViewWrapper;
}
///
/// LineViewWrapperの生成
///
///
public LineViewWrapper CreateLineViewWrapper()
{
LineViewWrapper lineViewWrapper = new LineViewWrapper();
LineView lineView = componentFactory.CreateLineView();
lineViewWrapper.Initialize(lineView);
lineViewWrapper.Manager = manager;
manager.GameRenderingViews.Add(lineViewWrapper, lineViewWrapper);
return lineViewWrapper;
}
///
/// MenuWindowView の生成。
///
/// 生成した MenuWindowView
public MenuWindowView CreateMenuWindowView(PlayingGame game)
{
return new MenuWindowView(this, game);
}
public WindowViewWrapper CreateWindowViewWrapper(Materials.Material material, bool leftTopTransparent)
{
WindowView window = componentFactory.CreateWindow(material.GetFullName(), leftTopTransparent);
return new WindowViewWrapper(window);
}
public CharacterListView CreateCharacterListView(PlayingGame game)
{
CharacterListView listView = new CharacterListView(game, this);
return listView;
}
public CharacterStatusView CreateCharacterStatusView(PlayingGame game, ICharacter character)
{
return new CharacterStatusView(game, character, this);
}
}
}