private IEnumerator DoUpdate() { while (true) { if (m_UpdateSnakeMovementTime >= slConstants.UPDATE_SNAKE_MOVEMENT_TIEM_INTERVAL) { // update snake movement m_UpdateSnakeMovementTime -= slConstants.UPDATE_SNAKE_MOVEMENT_TIEM_INTERVAL; hwmDebug.Assert(m_UpdateSnakeMovementTime < slConstants.UPDATE_SNAKE_MOVEMENT_TIEM_INTERVAL , "m_UpdateSnakeMovementTime < slConstants.UPDATE_SNAKE_MOVEMENT_TIEM_INTERVAL"); for (int iSnake = 0; iSnake < m_Snakes.Count; iSnake++) { slSnake snake = m_Snakes[iSnake]; snake.DoUpdateMovement(slConstants.UPDATE_SNAKE_MOVEMENT_TIEM_INTERVAL); } slWorld.GetInstance().GetSnakeSystem().GetQuadtree().MergeAndSplitAllNode(); yield return(UpdateType.SnakeMovement); // update snake collide m_DeadSnakes.Clear(); for (int iSnake = 0; iSnake < m_Snakes.Count; iSnake++) { slSnake iterSnake = m_Snakes[iSnake]; iterSnake.DoUpdateCollide(); if (!iterSnake.IsAlive()) { m_DeadSnakes.Add(iterSnake); } } for (int iSnake = 0; iSnake < m_DeadSnakes.Count; iSnake++) { slSnake iterSnake = m_DeadSnakes[iSnake]; iterSnake.Dead(); } yield return(UpdateType.SnakeCollide); // update snake eat food for (int iSnake = 0; iSnake < m_Snakes.Count; iSnake++) { slSnake iterSnake = m_Snakes[iSnake]; iterSnake.DoUpdateEatFood(); } yield return(UpdateType.SnakeEatFood); // update foods slWorld.GetInstance().GetFoodSystem().DoUpdateFoods(m_Time - m_LastUpdateFoodsTime); m_LastUpdateFoodsTime = m_Time; yield return(UpdateType.Foods); // update food system slWorld.GetInstance().GetFoodSystem().DoUpdateFoodSystem(); yield return(UpdateType.FoodSystem); // update snake ai for (int iSnake = 0; iSnake < m_Snakes.Count; iSnake++) { slSnake iterSnake = m_Snakes[iSnake]; if (iterSnake.GetController() != null && iterSnake.GetController().IsAI()) { (iterSnake.GetController() as slAIController).DoAIUpdate(); } } yield return(UpdateType.SnakeAI); // update respawn player if (++m_UpdateRespawnPlayerFrame >= slConstants.UPDATE_RESPAWN_FRAME_INTERVAL) { m_UpdateRespawnPlayerFrame -= slConstants.UPDATE_RESPAWN_FRAME_INTERVAL; slWorld.GetInstance().GetGameMode().DoUpdateRespawnPlayer(); } yield return(UpdateType.RespawnPlayer); } else { yield return(UpdateType.Empty); } } }