Exemplo n.º 1
0
    public void Dispose()
    {
        m_Foods.Clear();
        m_Foods = null;
        m_CreateEvents.Clear();
        m_CreateEvents = null;
        m_CreateEvents.Clear();
        m_CreateEvents = null;

        m_Quadtree.Dispose();
        m_Quadtree = null;

        m_FoodPool.Dispose();
        m_FoodPool = null;

        if (m_FoodPresentationPools != null)
        {
            for (int iFood = 0; iFood < m_FoodPresentationPools.Length; iFood++)
            {
                m_FoodPresentationPools[iFood].Dispose();
            }
            m_FoodPresentationPools = null;
        }

        Object.Destroy(m_FoodRoot);
    }
Exemplo n.º 2
0
    public void Initialize(slLevel level)
    {
        m_FoodRoot = new GameObject("Foods").transform;

        m_FoodMaxPosition = level.MapSize * 0.5f - new Vector2(slConstants.FOOD_MAP_EDGE, slConstants.FOOD_MAP_EDGE);
        m_FoodMinPosition = -m_FoodMaxPosition;

        m_MaxFood = level.FoodCount;

        m_FoodPropertiess = new slFoodProperties[(int)slConstants.FoodType.Count];
        for (int iFood = 0; iFood < m_FoodPropertiess.Length; iFood++)
        {
            m_FoodPropertiess[iFood] = hwmSystem.GetInstance().GetAssetLoader().LoadAsset(hwmAssetLoader.AssetType.Game
                                                                                          , slConstants.FOOD_PROPERTIES_PREFAB_STARTWITHS + slConstants.FoodTypeToString((slConstants.FoodType)iFood)) as slFoodProperties;
        }

        m_Quadtree = new hwmQuadtree <slFood>();
        m_Quadtree.Initialize(CalculateQuadtreeDepth()
                              , slConstants.FOOD_QUADTREE_MAXELEMENT_PERNODE
                              , slConstants.FOOD_QUADTREE_MINELEMENT_PREPARENTNODE
                              , new Vector2(slConstants.FOOD_QUADTREE_LOOSESIZE, slConstants.FOOD_QUADTREE_LOOSESIZE)
                              , slWorld.GetInstance().GetMap().GetMapBox());
#if UNITY_EDITOR
        slQuadtreeGizmos.FoodQuadtree = m_Quadtree;
#endif

        m_FoodPool = new FoodPool(m_FoodRoot);
        m_FoodPool.Initialize(Mathf.CeilToInt(m_MaxFood * slConstants.FOOD_POOL_INITIALIZE_MULTIPLY));
        if (slWorld.GetInstance().NeedPresentation())
        {
            m_FoodPresentationPools = new FoodPresentationPool[(int)slConstants.FoodType.Count];
            for (int iFood = 0; iFood < m_FoodPropertiess.Length; iFood++)
            {
                slConstants.FoodType foodType = (slConstants.FoodType)iFood;
                m_FoodPresentationPools[iFood] = new FoodPresentationPool(m_FoodRoot, foodType);
                m_FoodPresentationPools[iFood].Initialize(0);
            }
        }

        m_CreateEvents  = new Queue <CreateEvent>();
        m_Foods         = new hwmBetterDictionary <int, slFood>();
        m_DestroyEvents = new hwmBetterList <slFood>();
        m_FoodCount     = 0;
    }