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
{
///
/// Sceneを管理するクラス
///
public class SceneView
{
private GameRenderingManager manager = null;
private ArrayList layers = null;
///
/// レイヤーのリスト
///
public ArrayList Layers
{
get { return layers; }
}
public SceneView(GameRenderingManager manager)
{
this.layers = new ArrayList();
this.manager = manager;
}
///
/// Sceneにレイヤーを追加する。追加したレイヤーは手前に表示される。
///
/// 追加されたレイヤー
public LayerView AddLayer()
{
LayerView layer = new LayerView();
layers.Add(layer);
return layer;
}
///
/// レイヤーの挿入
///
/// 何番目に挿入するかの指定
/// 挿入されたレイヤー
public LayerView InsertLayer(int index)
{
LayerView layer = new LayerView();
layers.Insert(index, layer);
return layer;
}
///
/// レイヤーが何番目のレイヤーかを取得する
///
/// レイヤー
/// 何番目かが返る
public int LayerIndex(LayerView layer)
{
return layers.IndexOf(layer);
}
///
/// レイヤーを印でクスで取得
///
/// 何番目のレイヤーを取得するかの指定
/// レイヤーが返る
public LayerView GetLayer(int index)
{
return (LayerView)layers[index];
}
///
/// レイヤーをindex番目に移動する
///
/// 何bんめに移動するかの指定
/// 移動するレイヤー
public void MoveLayer(int index, LayerView layer)
{
layers.Remove(layer);
layers.Insert(index, layer);
}
///
/// レイヤーの削除
///
/// 削除するレイヤー
public void RemoveLayer(LayerView layer)
{
layer.ClearGameRenderingView();
layers.Remove(layer);
}
///
/// すべてのレイヤーの削除
///
public void ClearLayer()
{
foreach (LayerView layer in layers)
{
layer.ClearGameRenderingView();
}
layers.Clear();
}
///
/// レイヤーとそれに登録されている物体の削除
///
public void DeleteAll()
{
foreach (LayerView layer in layers)
{
layer.DeleteGameRenderingView(manager);
}
layers.Clear();
}
internal void Render()
{
int layerIndex = 0;
foreach (LayerView layer in layers)
{
layer.LayerIndex = layerIndex * 4;
layer.Render(manager);
layerIndex++;
}
}
internal void SetLayerMinus1()
{
foreach (LayerView layer in layers)
{
layer.SetLayerMinus1(manager);
}
}
}
}