📄 scenerynode.cs
字号:
using System;
using System.Collections.Generic;
using System.Text;
using Microsoft.Xna.Framework;
using CustomProcessors;
using Microsoft.Xna.Framework.Graphics;
namespace SceneryComponent.Components
{
/// <summary>
/// Nodo del escenario
/// </summary>
internal class SceneryNode
{
/// <summary>
/// Bordes de un nodo
/// </summary>
internal enum NodeHeads
{
/// <summary>
/// Noroeste
/// </summary>
NorthWest,
/// <summary>
/// Noreste
/// </summary>
NorthEast,
/// <summary>
/// Suroeste
/// </summary>
SouthWest,
/// <summary>
/// Sureste
/// </summary>
SouthEast,
}
/// <summary>
/// Escenario al que pertenece el nodo
/// </summary>
protected SceneryGameComponent m_Scenery;
/// <summary>
/// Nodo padre
/// </summary>
protected SceneryNode m_Parent;
/// <summary>
/// Nodos hijo
/// </summary>
protected Dictionary<NodeHeads, SceneryNode> m_Childs = new Dictionary<NodeHeads, SceneryNode>();
/// <summary>
/// Bbox
/// </summary>
protected BoundingBox m_BoundingBox = new BoundingBox();
/// <summary>
/// Indica cu醠 es el punto geom閠rico central del nodo
/// </summary>
protected Vector3 m_NodeCenter = Vector3.Zero;
/// <summary>
/// Indica si el nodo ha sido dibujado
/// </summary>
protected bool m_Drawn = false;
/// <summary>
/// Obtiene el nodo hijo al noroeste
/// </summary>
public SceneryNode NorthWest
{
get
{
return m_Childs[NodeHeads.NorthWest];
}
}
/// <summary>
/// Obtiene el nodo hijo al noreste
/// </summary>
public SceneryNode NorthEast
{
get
{
return m_Childs[NodeHeads.NorthEast];
}
}
/// <summary>
/// Obtiene el nodo hijo al suroeste
/// </summary>
public SceneryNode SouthWest
{
get
{
return m_Childs[NodeHeads.SouthWest];
}
}
/// <summary>
/// Obtiene el nodo hijo al sureste
/// </summary>
public SceneryNode SouthEast
{
get
{
return m_Childs[NodeHeads.SouthEast];
}
}
/// <summary>
/// Obtiene le Bbox
/// </summary>
public BoundingBox BoundingBox
{
get
{
return m_BoundingBox;
}
}
/// <summary>
/// Constructor
/// </summary>
/// <param name="scenery">Escenario al que pertenece el nodo</param>
public SceneryNode(SceneryGameComponent scenery)
{
m_Scenery = scenery;
}
/// <summary>
/// Construye la jerarqu韆 del nodo actual
/// </summary>
/// <param name="northWest">Nodo al noroeste</param>
/// <param name="northEast">Nodo al noreste</param>
/// <param name="southWest">Nodo al suroeste</param>
/// <param name="southEast">Nodo al sureste</param>
public virtual void Build(SceneryNode northWest, SceneryNode northEast, SceneryNode southWest, SceneryNode southEast)
{
northWest.m_Parent = this;
northEast.m_Parent = this;
southWest.m_Parent = this;
southEast.m_Parent = this;
m_Childs.Clear();
m_Childs.Add(NodeHeads.NorthWest, northWest);
m_Childs.Add(NodeHeads.NorthEast, northEast);
m_Childs.Add(NodeHeads.SouthWest, southWest);
m_Childs.Add(NodeHeads.SouthEast, southEast);
foreach (SceneryNode node in m_Childs.Values)
{
if (m_BoundingBox == new BoundingBox())
{
m_BoundingBox = node.m_BoundingBox;
}
else
{
m_BoundingBox = BoundingBox.CreateMerged(m_BoundingBox, node.m_BoundingBox);
}
}
m_NodeCenter = Vector3.Divide(m_BoundingBox.Max + m_BoundingBox.Min, 2.0f);
}
/// <summary>
/// Prepara el nodo y sus hijos para el dibujado
/// </summary>
public virtual void PrepareForDrawing()
{
m_Drawn = false;
foreach (SceneryNode node in m_Childs.Values)
{
node.PrepareForDrawing();
}
}
/// <summary>
/// Obtiene los nodos a dibujar
/// </summary>
/// <returns>Lista de nodos a dibujar</returns>
public virtual SceneryNode[] GetNodesToDraw(LOD lod)
{
// Comprobar si el nodo est
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -