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