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 { /// /// GameRenderingで表示される物体の基本クラス /// キャラクターや、マップなど。 /// public abstract class GameRenderingView { private LayerView layer = null; private bool layerVisible = true; private bool visible = true; private bool drawed = false; private GameRenderingManager manager = null; public GameRenderingView() { } internal GameRenderingManager Manager { get { return manager; } set { manager = value; } } /// /// レイヤーインデックス(直接触らない方向で) /// internal abstract int LayerIndex { get; set; } public bool LayerVisible { get { return layerVisible; } set { if(value && layerVisible == false && visible) { if(layer != null) { layer.RenderingViewHash.Add(this, this); layer.RenderingViewHashInvisible.Remove(this); } SetVisible(true); } if(value == false && layerVisible && visible) { if(layer != null) { layer.RenderingViewHashInvisible.Add(this, this); layer.RenderingViewHash.Remove(this); } SetVisible(false); } layerVisible = value; } } /// /// 表示するかどうかの指定 /// public bool Visible { set { if(value && visible == false && layerVisible) { if(layer != null) { layer.RenderingViewHash.Add(this, this); layer.RenderingViewHashInvisible.Remove(this); } SetVisible(true); } if(value == false && visible && layerVisible) { if(layer != null) { layer.RenderingViewHashInvisible.Add(this, this); layer.RenderingViewHash.Remove(this); } SetVisible(false); } visible = value; } get { return visible; } } /// /// すでに描画されたかどうか /// Layer用 /// internal bool Drawed { set { drawed = value; } get { return drawed; } } /// /// 所属しているレイヤー /// public LayerView Layer { set { layer = value; } get { return layer; } } /// /// 所属しているレイヤーの取得 /// /// public LayerView GetLayer() { return layer; } internal virtual void AddRenderView() { if(layer != null) layer.RenderingViewHash.Add(this, this); } internal virtual void RemoveRenderView() { if(layer != null) layer.RenderingViewHash.Remove(this); } internal virtual void AddLayer(LayerView layer) { this.Layer = layer; if(LayerVisible && Visible) { AddRenderView(); //gameRenderingView.LayerIndex = 0; } else { layer.RenderingViewHashInvisible.Add(this, this); //gameRenderingView.LayerIndex = 0; } } internal virtual void RemoveLayer(LayerView layer) { RemoveRenderView(); layer.RenderingViewHashInvisible.Remove(this); Layer = null; LayerIndex = -1; } internal virtual void Finalize(GameRenderingManager manager) { } internal virtual void BeforeFinalize(GameRenderingManager manager) { RemoveRenderView(); if (Layer != null) Layer.RenderingViewHashInvisible.Remove(this); Layer = null; LayerIndex = -1; manager.GameRenderingViews.Remove(this); manager = null; } internal virtual void Render(GameRenderingManager manager) { } internal abstract void SetVisible(bool visible); } }