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); } }
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; }
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; }
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++; }
public FoodPresentationPool(Transform root, slConstants.FoodType foodType) { m_Root = root; m_FoodType = foodType; }