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; }
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; }