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