Example #1
0
bool ParticleScene::Init()
{
	glClearColor(0.25f, 0.25f, 0.25f, 1.0f);
	glEnable(GL_DEPTH_TEST);
	glEnable(GL_CULL_FACE);

	//_camera = new Camera(glm::pi<float>() * 0.25f, 1280.0f / 720.0f, 0.1f, 1000.0f);
	_camera = new FlyCamera();
	_camera->LookAt(glm::vec3(10.0f), glm::vec3(0.0f));

	// Setup our particle emitter
	_emitter = new ParticleEmitter();
	_emitter->Init(1000, 500,
				   0.5f, 2.0f,
				   1.0f, 5.0f,
				   1.0f, 0.1f,
				   glm::vec4(1, 0, 0, 1), glm::vec4(1, 1, 0, 0.1f));

	// Set up our shaders
	_program = new GL::Program();

	GL::Shader vertShader(GL::ShaderType::VERTEX_SHADER, "./shaders/vertParticle.glsl");
	GL::Shader fragShader(GL::ShaderType::FRAGMENT_SHADER, "./shaders/fragParticle.glsl");

	_program->AddShader(vertShader);
	_program->AddShader(fragShader);
	_program->Link();

	// Setup our particle textures
	Image fire1("textures/fire1.png");
	Image fire2("textures/fire2.png");
	Image fire3("textures/fire3.png");

	// Upload the textures
	_texFire1 = fire1.Upload();
	_texFire2 = fire2.Upload();
	_texFire3 = fire3.Upload();

	return true;
}
Example #2
0
void g1_human_class::think()
{
	i4_bool process_input = i4_T;

	if (playback_think())
	{
		process_input=i4_F;
	}


	g1_player_piece_class * stank = commander();
	if ((g1_current_controller->view.get_view_mode()!=G1_ACTION_MODE &&
		 g1_current_controller->view.get_view_mode()!=G1_FOLLOW_MODE))
	{
		process_input=i4_F;
	}

	if (!process_input) //are we controlling the stank?
	{
		g1_input.deque_time(g1_input_class::LEFT);
		g1_input.deque_time(g1_input_class::RIGHT);
		g1_input.deque_time(g1_input_class::UP);
		g1_input.deque_time(g1_input_class::DOWN);
		g1_input.deque_time(g1_input_class::STRAFE_LEFT);
		g1_input.deque_time(g1_input_class::STRAFE_RIGHT);
		g1_input.deque_time(g1_input_class::STRAFE_UP);
		g1_input.deque_time(g1_input_class::STRAFE_DOWN);
		g1_input.deque_time(g1_input_class::ZOOM_IN);
		g1_input.deque_time(g1_input_class::ZOOM_OUT);
		g1_input.deque_time(g1_input_class::ZOOM_LEFT);
		g1_input.deque_time(g1_input_class::ZOOM_RIGHT);

		g1_input.deque_time(g1_input_class::ZOOM_UP);
		g1_input.deque_time(g1_input_class::ZOOM_DOWN);
//	if (g1_current_controller->view.get_view_mode()==G1_STRATEGY_MODE)
//		{
//		g1_resources.startegy_camera_dist+=(strategy_up-strategy_down)*G1_HZ/1000.0f;
//		if (g1_resources.startegy_camera_dist<=0.1f) g1_resources.startegy_camera_dist=0.1f;
//		g1_resources.startegy_camera_angle+=(strategy_out-strategy_in)*G1_HZ/1000.0f;
//		if (g1_resources.startegy_camera_angle<=0.1f) g1_resources.startegy_camera_angle=0.1f;
//		}
	}
	else
	{
		//keys are buffered in the order pressed, so do a reversed comparison
		if (memcmp(g1_input.grab_cheat_keys(),"DOG",3)==0)
		{
			g1_input.clear_cheat_keys();
			if (stank)
			{
				stank->toggle_stank_flag(g1_player_piece_class::ST_GODMODE);
			}
		}

		//This would actually belong the receive_event() function of
		//the border frame class, but it needs to be executed regardless
		//of wheter an event is outstanding.
		if (g1_border.get())
		{
			i4_float heh;
			i4_float cx=g1_border->last_mouse_x();
			i4_float lx=g1_border->prev_mouse_x();
			i4_float cy=g1_border->last_mouse_y();
			i4_float ly=g1_border->prev_mouse_y();
			if (cy<7)
			{
				heh=-0.2f;
			}
			else if (cy>(g1_border->height()-7))
			{
				heh=0.2f;
			}
			else
			{
				heh = ((cy - ly)*0.01f);
			}
			mouse_look_increment_y += heh;

			//if (mev->x<5)
			//  heh=-1.0f;
			//else if (mev->x>(width()-5))
			//  heh=1.0f;
			//else
			//if (mev->x>20&&mev->x<(width()-20))
			//    heh = (((sw32)mev->x - (sw32)mev->lx)*0.01f);
			//else
			//  heh=0;

			if (cx<20)
			{
				heh=-0.1f;
			}
			else if (cx>(g1_border->width()-20))
			{
				heh=0.1f;
			}
			else
			{
				heh = ((cx - lx)*0.01f);
			}
			mouse_look_increment_x += heh;
			g1_border->clear_mouse_move();
		}
		g1_map_piece_class * whofor=controlled();


		sw32
		left_ms=g1_input.deque_time(g1_input_class::LEFT),
		right_ms=g1_input.deque_time(g1_input_class::RIGHT),
		up_ms=g1_input.deque_time(g1_input_class::UP),
		down_ms=g1_input.deque_time(g1_input_class::DOWN),
		sleft_ms=g1_input.deque_time(g1_input_class::STRAFE_LEFT),
		sright_ms=g1_input.deque_time(g1_input_class::STRAFE_RIGHT);
		sw32 sup_ms=g1_input.deque_time(g1_input_class::STRAFE_UP);
		sw32 sdown_ms=g1_input.deque_time(g1_input_class::STRAFE_DOWN);
		sw32 zoom_in=g1_input.deque_time(g1_input_class::ZOOM_IN),
			 zoom_out=g1_input.deque_time(g1_input_class::ZOOM_OUT),
			 zoom_left=g1_input.deque_time(g1_input_class::ZOOM_LEFT),
			 zoom_right=g1_input.deque_time(g1_input_class::ZOOM_RIGHT),
			 zoom_up=g1_input.deque_time(g1_input_class::ZOOM_UP),
			 zoom_down=g1_input.deque_time(g1_input_class::ZOOM_DOWN);

		look(mouse_look_increment_x, mouse_look_increment_y,whofor);
		mouse_look_increment_y = mouse_look_increment_x = 0;
		turn( g1_resources.player_turn_speed*(left_ms-right_ms)*G1_HZ/1000.0f, whofor );
		accelerate( (up_ms-down_ms)*G1_HZ/1000.0f,whofor);
		strafe( (sright_ms-sleft_ms)*G1_HZ/1000.0f,
			   (sup_ms-sdown_ms)*G1_HZ/1000.0f,whofor);
		if (g1_current_controller->view.get_view_mode()==G1_FOLLOW_MODE)
		{
			g1_resources.follow_camera_dist+=(zoom_out-zoom_in)*G1_HZ/1000.0f;
			if (g1_resources.follow_camera_dist<=0.5f)
			{
				g1_resources.follow_camera_dist=0.5f;
			}
			g1_resources.follow_camera_height+=(zoom_up-zoom_down)*G1_HZ/1000.0f;
			g1_resources.follow_camera_rotation+=(zoom_right-zoom_left)*G1_HZ/1000.0f;
		}

		//if (sright_ms>0)
		//  sright_ms=sright_ms+1;

		if (g1_input.button_1())
		{
			fire0(whofor);
		}
		if (g1_input.button_2())
		{
			fire1(whofor);
		}
		if (g1_input.button_3())
		{
			fire2(whofor);
		}
	}


	if (g1_input.key_pressed)
	{
		continue_game();
	}

	g1_input.key_pressed=i4_F;
}