using System; using System.Drawing; using System.Collections; using System.ComponentModel; using System.Windows.Forms; using System.Data; using System.Collections.Generic; using Microsoft.DirectX; using Microsoft.DirectX.Direct3D; using Rmake.Framework.Logging; using Rmake.Rendering.APIWrapper; using Rmake.Rendering.ComponentLayer; namespace Rmake.GameRendering { /// /// 選択肢windowクラス /// public class SelectWindowView : GameRenderingView { private WindowView windowView = null; private TextView textView = null; private ImageView imageView = null; private D3DTextData[] textDatas = null; private List texts = null; private List colors = null; private int selectionSize = 0; private int currentIndex = 0; public SelectWindowView() { texts = new List(); colors = new List(); } public int SelectionSize { get { return selectionSize; } } internal override int LayerIndex { get { return windowView.LayerIndex; } set { windowView.LayerIndex = value; textView.LayerIndex = value; imageView.LayerIndex = value + 1; } } /// /// 現在選択されている選択肢の番号 /// public int CurrentIndex { set { if(value < 0) currentIndex = 0; else if(value >= selectionSize) currentIndex = selectionSize - 1; else currentIndex = value; } get{ return currentIndex; } } /// /// Windowの矩形 /// public Rectangle Rect { get { return windowView.Rect; } set { windowView.Rect = value; for (int i = 0; i < textDatas.Length; i++) { if (textDatas[i] != null) { textView.ClearText(textDatas[i]); textDatas[i] = textView.DrawText( Rect.X + windowView.Border + 4 + 16 + 4, Rect.Y + windowView.Border + 4 + textView.FontHeight * i, Rect.Width - (windowView.Border + 4) * 2 - (16 + 4), Rect.Height - (windowView.Border + 4) * 2 - (textView.FontHeight * i), texts[i], colors[i]); } } } } internal void Initialize(WindowView windowView, TextView textView , ImageView imageView, int selectionSize) { this.windowView = windowView; this.textView = textView; this.imageView = imageView; this.selectionSize = selectionSize; imageView.IsDependCamera = false; textDatas = new D3DTextData[selectionSize]; for(int i = 0 ; i < selectionSize ; i++) { textDatas[i] = null; } imageView.SourceRectangle = new Rectangle(48, 16, 16, 16); imageView.Visible = false; } internal override void Finalize(GameRenderingManager manager) { manager.Manager.DeleteRenderView(windowView); manager.Manager.DeleteRenderView(textView); manager.Manager.DeleteRenderView(imageView); textDatas = null; //base.Finalize(manager); } internal override void Render(GameRenderingManager manager) { imageView.DestinationPoint = new Point( Rect.X + windowView.Border + 4, Rect.Y + windowView.Border + 3 + (textView.FontHeight - 12) / 2 + textView.FontHeight * currentIndex); } internal override void SetVisible(bool visible) { windowView.ViewVisible = visible; textView.ViewVisible = visible; imageView.ViewVisible = visible; } /// /// 選択肢の指定 /// /// 何番目の選択肢の設定をおこなうかどうか /// 選択肢の文章 /// 選択肢の文字の色 public void SetOption(int index, string text, int color) { if(textDatas[index] != null) textView.ClearText(textDatas[index]); textDatas[index] = textView.DrawText( Rect.X + windowView.Border + 4 + 16 + 4, Rect.Y + windowView.Border + 4 + textView.FontHeight * index, Rect.Width - (windowView.Border + 4) * 2 - (16 + 4), Rect.Height - (windowView.Border + 4) * 2 - (textView.FontHeight * index), text, color); texts.Add(text); colors.Add(color); imageView.Visible = true; } /// /// 次の選択肢を選択 /// public void Next() { currentIndex++; if(currentIndex >= selectionSize) currentIndex = 0; } /// /// 前の選択肢を選択 /// public void Previous() { currentIndex--; if(currentIndex < 0) currentIndex = selectionSize - 1; } } }