Пример #1
0
 public void AddCreateEvent(slConstants.FoodType foodType, Vector3 position, Color color, float power)
 {
     if (CanCreateFoodAt(position))
     {
         CreateEvent createEvent = new CreateEvent();
         createEvent.FoodType = foodType;
         createEvent.Position = position;
         createEvent.Color    = color;
         createEvent.Power    = power;
         m_CreateEvents.Enqueue(createEvent);
     }
 }
Пример #2
0
    protected override void HandleDispose(object additionalData)
    {
        slConstants.FoodType foodType = m_IsReaminsFoodContamination ? slConstants.FoodType.Contamination : slConstants.FoodType.Remains;
        float power = m_IsReaminsFoodContamination ? m_RemainsFoodContaminationPower : m_TweakableProperties.RemainsFoodPower;

        if (m_AliveState != AliveState.DeadFinishGame)
        {
            slWorld.GetInstance().GetFoodSystem().AddCreateEvent(foodType, m_Head.GetPosition(), m_Properties.DeadFoodColor, power);
            slWorld.GetInstance().GetFoodSystem().AddCreateEvent(foodType, m_Clothes.GetPosition(), m_Properties.DeadFoodColor, power);
            foreach (BodyNode node in m_Bodys)
            {
                slWorld.GetInstance().GetFoodSystem().AddCreateEvent(foodType, node.GetPosition(), m_Properties.DeadFoodColor, power);
            }
        }

        m_SkillEventArgs = null;

        m_Controller.UnControllerSnake();
        m_Controller = null;

        m_Head.Deactive();
        slWorld.GetInstance().GetSnakeSystem().GetHeadPool(m_SnakeName).Push(m_Head);
        m_Head = null;

        m_Clothes.Deactive();
        slWorld.GetInstance().GetSnakeSystem().GetClothesPool(m_SnakeName).Push(m_Clothes);
        m_Clothes = null;

        int bodyCount = m_Bodys.Count;

        for (int iBody = 0; iBody < bodyCount; iBody++)
        {
            BodyNode bodyNode = m_Bodys.PopBack();
            bodyNode.Deactive();
            m_BodyPool.Push(bodyNode);
        }
        m_Bodys.Clear();
        m_Bodys = null;

        Destroy(m_TweakableProperties);
        m_TweakableProperties = null;

        Destroy(m_TweakableProperties);
        m_Properties = null;
    }
Пример #3
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;
    }
Пример #4
0
    private void CreateFood(slConstants.FoodType foodType, Vector3 position, Color color, float power)
    {
        slFoodProperties foodProperties = m_FoodPropertiess[(int)foodType];
        slFood           food           = m_FoodPool.Pop();
        int foodIndex = food.GetIndex();

        if (foodIndex == slConstants.FOOD_NOTSET_INDEX)
        {
            foodIndex = ++m_LastFoodIndex;
        }
        m_Foods.Add(foodIndex, food);
        slFoodPresentation foodPresentation = m_FoodPresentationPools != null ? m_FoodPresentationPools[(int)foodType].Pop() : null;

        if (foodPresentation != null)
        {
            foodPresentation.gameObject.SetActive(true);

            foodPresentation.SetColor(color);
        }
        food.ActiveFood(foodIndex, foodProperties, foodPresentation, position, color, power);
        m_FoodCount++;
    }
Пример #5
0
 public FoodPresentationPool(Transform root, slConstants.FoodType foodType)
 {
     m_Root     = root;
     m_FoodType = foodType;
 }