Example #1
0
void State_Manager::create_state(unsigned int id)
{
    if(id == game_state::menu)
    {
        std::unique_ptr<Menu_State> menu_state(new Menu_State(m_asset_manager));
        m_all_states.push_front(std::move(menu_state));
    }
    else if(id == game_state::play)
    {
        std::unique_ptr<Play_State> play_state(new Play_State(m_world, m_asset_manager));
        m_all_states.push_front(std::move(play_state));
    }
    else if(id == game_state::pause_state)
    {
        std::unique_ptr<Pause_State> pause_state(new Pause_State(m_asset_manager));
        m_all_states.push_front(std::move(pause_state));
    }
    else if(id == game_state::game_over)
    {
        std::unique_ptr<Game_Over_State> game_over_state(new Game_Over_State(m_asset_manager));
        m_all_states.push_front(std::move(game_over_state));
    }
    else if(id == game_state::level_win)
    {
        std::unique_ptr<Level_Win_State> level_win_state(new Level_Win_State(m_asset_manager));
        m_all_states.push_front(std::move(level_win_state));
    }
    else
        std::cout << "request to create undefined state";
}
Example #2
0
static int play_thread( void *arg)
{
	struct snd_pcm_substream *substream = (struct snd_pcm_substream *)arg;
	struct snd_pcm_runtime *runtime = substream->runtime;
	struct pcm_runtime_data *prtd = substream->runtime->private_data;
	struct snd_pcm *pcm = substream->pcm;
	struct tegra_audio_data *ptscx = tegra_snd_cx[pcm->device];
	int offset = 0;
	int rtbuffersize = 0;
	int buffer_to_prime = 0, buffer_in_queue = 0;
	NvAudioFxState state = NVALSA_INVALID_STATE;

	wait_for_completion(&prtd->thread_comp);
	rtbuffersize = frames_to_bytes(runtime, runtime->buffer_size);
	buffer_to_prime  = (rtbuffersize / TEGRA_DEFAULT_BUFFER_SIZE);

	if (runtime->control->appl_ptr)
	for (;;) {
		state = play_state(ptscx, prtd, state);
		if (state == SNDRV_PCM_TRIGGER_STOP)
			buffer_in_queue = 0;
		if (kthread_should_stop())
			return 0;
		if ((prtd->audiofx_frames < runtime->control->appl_ptr) &&
				(state != NvAudioFxState_Stop)) {
			offset = queue_next_buffer(substream, offset);
			buffer_in_queue++;
		}
		if (buffer_in_queue == 0) {
			DEFINE_WAIT(wq);
			prepare_to_wait(&prtd->buf_wait, &wq, TASK_INTERRUPTIBLE);
			schedule();
			finish_wait(&prtd->buf_wait, &wq);
			continue;
		}
		if ((buffer_to_prime == buffer_in_queue) ||
			(prtd->audiofx_frames >= runtime->control->appl_ptr)) {
			play_buffer_done(substream);
			buffer_in_queue--;
		}
	}

	for (;;) {
		state = play_state(ptscx, prtd, state);
		if (state == SNDRV_PCM_TRIGGER_STOP)
			buffer_in_queue = 0;
		if (kthread_should_stop())
			break;
		if ((prtd->state != SNDRV_PCM_TRIGGER_STOP) &&
			 (runtime->status->state != SNDRV_PCM_STATE_DRAINING)) {
			offset = queue_next_buffer(substream, offset);
			buffer_in_queue++;
		}
		if (buffer_in_queue == 0) {
			DEFINE_WAIT(wq);
			prepare_to_wait(&prtd->buf_wait, &wq, TASK_INTERRUPTIBLE);
			schedule();
			finish_wait(&prtd->buf_wait, &wq);
			continue;
		}
		if ((buffer_to_prime == buffer_in_queue) &&
			(prtd->state != SNDRV_PCM_TRIGGER_STOP)) {
			play_buffer_done(substream);
			buffer_in_queue--;
		}
	}
	return 0;
}