⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 scenerynode.cs

📁 非常优秀的棋牌类游戏源码包含AI及机器的难度调节算法人工智能非常经典
💻 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 + -