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