示例#1
0
        public EnvironmentQueryResult QueryNodesOfType <T>() where T : I_EnvironmentNode
        {
            if (!m_EnvironmentNodesDict.ContainsKey(typeof(T)))
            {
                m_EnvironmentNodesDict[typeof(T)] = new EnvironmentQueryResult();
            }

            return((EnvironmentQueryResult)m_EnvironmentNodesDict [typeof(T)]);
        }
示例#2
0
        public Vector2[] QueryXZPositionsOfType <T>()
        {
            if (!m_EnvironmentNodesDict.ContainsKey(typeof(T)))
            {
                m_EnvironmentNodesDict[typeof(T)] = new EnvironmentQueryResult();
            }

            return(((EnvironmentQueryResult)m_EnvironmentNodesDict[typeof(T)]).GetPositionsCopy());
        }
示例#3
0
        public void RegisterNodeAsType(I_EnvironmentNode _poi, System.Type _type)
        {
            if (!m_EnvironmentNodesDict.ContainsKey(_type))
            {
                m_EnvironmentNodesDict[_type] = new EnvironmentQueryResult();
            }

            Debug.Log("[POIManager] Registerd POI " + _type.Name);

            m_EnvironmentNodesDict[_type].Add(_poi);
        }
示例#4
0
        public T QueryRandomNodeOfType <T>() where T : I_EnvironmentNode
        {
            EnvironmentQueryResult pois = QueryNodesOfType <T>();

            if (pois.Count() > 0)
            {
                I_EnvironmentNode randomPoi = pois.AtIndex(Random.Range(0, pois.Count()));
                return((T)randomPoi);
            }

            return(default(T));
        }
示例#5
0
        public T QueryClosestNodeOfType <T>(Vector2 _pos, out float _sqrDistance) where T : I_EnvironmentNode
        {
            EnvironmentQueryResult pois = QueryNodesOfType <T>();
            float closestDistance       = float.MaxValue;
            int   closestIndex          = -1;

            for (int i = 0; i < pois.Count(); i++)
            {
                Vector2 posXZ    = pois.GetPositionXZ(i);
                float   distance = Vector2.SqrMagnitude(_pos - posXZ);
                closestIndex = i;
            }

            _sqrDistance = closestDistance;
            if (closestIndex == -1)
            {
                return(default(T));
            }
            return((T)pois.AtIndex(closestIndex));
        }