bool Simple_GOL_Area::on_button_press_event(GdkEventButton* event)
{
	if(event->type == GDK_BUTTON_PRESS)
	{
		if(event->button == 1)
		{	
			Gtk::Allocation allocation = get_allocation();
			
			int item_x = int(sim_data->get_width()*event->x/allocation.get_width());
			int item_y = int(sim_data->get_height()*event->y/allocation.get_height());
			std::cout << item_x << " " << item_y << "\n";
			
			mouse_button_one_down = (sim_data->get(item_x, item_y)+1)%2 + 1;
				
			sim_data->set(item_x, item_y, (sim_data->get(item_x, item_y)+1)%2);
			
			queue_draw();
		}
		else if(event->button == 3)
		{
			pause_toggle();
		}
	}
	
	return true;
}
示例#2
0
/**
 *
 *  rct2: 0x0068E8DA
 */
void title_load()
{
	log_verbose("loading title");

	if (RCT2_GLOBAL(RCT2_ADDRESS_GAME_PAUSED, uint8) & 1)
		pause_toggle();

	RCT2_GLOBAL(RCT2_ADDRESS_SCREEN_FLAGS, uint8) = SCREEN_FLAGS_TITLE_DEMO;

	reset_park_entrances();
	user_string_clear_all();
	reset_sprite_list();
	ride_init_all();
	window_guest_list_init_vars_a();
	staff_reset_modes();
	map_init(150);
	park_init();
	date_reset();
	climate_reset(CLIMATE_COOL_AND_WET);
	scenery_set_default_placement_configuration();
	window_new_ride_init_vars();
	window_guest_list_init_vars_b();
	window_staff_list_init_vars();
	map_update_tile_pointers();
	reset_0x69EBE4();
	stop_ride_music();
	stop_crowd_sound();
	//stop_other_sounds();
	viewport_init_all();
	news_item_init_queue();
	title_create_windows();
	title_init_showcase();
	gfx_invalidate_screen();
	RCT2_GLOBAL(RCT2_ADDRESS_SCREEN_AGE, uint16) = 0;
#ifndef DISABLE_NETWORK
	network_close();
#endif

	if (gOpenRCT2ShowChangelog) {
		gOpenRCT2ShowChangelog = false;
		window_changelog_open();
	}

	log_verbose("loading title finished");
}
//Figure out what has been types/clicks and act accordingly
bool Simple_GOL_Area::on_key_press_event(GdkEventKey* event)
{
	if(event->keyval == GDK_KEY_space)
	{
		pause_toggle();
	}
	else if(event->keyval == GDK_KEY_g)
	{
		grid_toggle();
		queue_draw();
	}
	else if(event->keyval == GDK_KEY_Right)
	{
		if(itteration_time >=10)
		{	
			itteration_time -= 10; 
		}
		override_timeout_connection(itteration_time);
	}
	else if(event->keyval == GDK_KEY_Left)
	{
		itteration_time += 10;
		override_timeout_connection(itteration_time); 
	}
	else if(event->keyval == GDK_KEY_r)
	{
		sim_data->random_reset();
		queue_draw();
	}
	else if(event->keyval == GDK_KEY_Return)
	{
		sim_data->itterate_under_conway();
		queue_draw();
	}
	else if(event->keyval == GDK_KEY_c)
	{
		sim_data->zero();
		queue_draw();
	}
	return Gtk::DrawingArea::on_key_release_event(event);
}
示例#4
0
   void Scheduler::run()
   {
      avlock.lock();
      auto event = next_event();
      avlock.unlock();

      if (!is_active)
      {
         sync_sleep(0.01);
         return;
      }

      show_info();

      switch (event)
      {
         case EventHandler::Event::Quit:
            is_active = false;
            video_thread_active = false;
            audio_thread_active = false;
            return;

         case EventHandler::Event::Pause:
            pause_toggle();
            break;

         case EventHandler::Event::SeekBack10:
            perform_seek(-3.0);
            break;

         case EventHandler::Event::SeekForward10:
            perform_seek(3.0);
            break;

         case EventHandler::Event::SeekBack60:
            perform_seek(-30.0);
            break;

         case EventHandler::Event::SeekForward60:
            perform_seek(30.0);
            break;

         case EventHandler::Event::Fullscreen:
            if (video_thread_active)
               video->toggle_fullscreen();
            break;

         case EventHandler::Event::None:
            break;

         default:
            throw std::runtime_error("Unknown event popped up :V\n");
      }

      if (is_paused)
      {
         sync_sleep(0.01);
         return;
      }

      Packet pkt;

      Packet::Type type = file->packet(pkt);

      switch(type)
      {
         case Packet::Type::Error:
            is_active = false;
            // Signal to threads that there won't be any more data.
            aud_pkt_queue.finalize();
            vid_pkt_queue.finalize();
            return;
            
         case Packet::Type::None:
            return;

         case Packet::Type::Audio:
            while (aud_pkt_queue.size() > 16 && (vid_pkt_queue.size() > 16 || !has_video))
               aud_pkt_queue.wait();

            aud_pkt_queue.push(std::move(pkt));
            break;

         case Packet::Type::Video:
            while (vid_pkt_queue.size() > 16 && (aud_pkt_queue.size() > 16 || !has_audio))
               vid_pkt_queue.wait();

            vid_pkt_queue.push(std::move(pkt));
            break;

         case Packet::Type::Subtitle:
            while (sub_pkt_queue.size() > 64 && (aud_pkt_queue.size() > 16 || !has_audio) && (vid_pkt_queue.size() > 16 || !has_video))
               sub_pkt_queue.wait();

            sub_pkt_queue.push(std::move(pkt));
            break;

         default:
            throw std::runtime_error("What kind of package is this? o.o\n");
      }
   }