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); } } }