void EventHandler::MouseFunc(int but, int state, int x, int y) { EventHandler* s_event = EventHandler::GetInstance(); Display* disp; std::list<Player*>::iterator it; ID::Env* env; env = ID::Env::GetInstance(); disp = Display::GetInstance(); it = disp->game->GetPlayerList()->begin(); if (disp->InGame) { if (but == GLUT_LEFT_BUTTON && state == GLUT_DOWN ) { if ((*it)->Get_Weapon()->Get_Charger1()->Get_Nb_Ammo() > 0) { disp->game->S->play_distant_sound(0, 0, 0); (*it)->Fire(0); Ball* ball = new Ball(Vec3f(camera.pos[0] + camera.forward[0], camera.pos[1] - 1.f, camera.pos[2]), Vec3f(0.f, 0.f, 0.f), Vec3f(1.f, 1.f, 1.f), Vec3f(camera.forward[0] * ((GLfloat)rand() / (GLfloat)RAND_MAX / 50.f + 0.99f) * 100.f, camera.forward[1] * 100.f, camera.forward[2] * ((GLfloat)rand() / (GLfloat)RAND_MAX / 50.f + 0.99f) * 100.f), 0.5f, 0.5f * 0.9f); ball->GenerateHitBox(); balls.push_back(ball); g_phys.AddObject((SolidObj*)ball); } else { (*it)->Reload(0); disp->game->S->play_distant_sound(1, 0, 0); } } } else { if (state == GLUT_DOWN) { s_event->__ev.type = ID::EVENT_CLICK_DOWN; s_event->__ev.clickDown.button = (ID::Mouse_Button)but; s_event->__ev.clickDown.x = x; s_event->__ev.clickDown.y = y; env->ClickDown(&(s_event->__ev)); } else if (state == GLUT_UP) { s_event->__ev.type = ID::EVENT_CLICK_UP; s_event->__ev.clickDown.button = (ID::Mouse_Button)but; s_event->__ev.clickDown.x = x; s_event->__ev.clickDown.y = y; env->ClickUp(&(s_event->__ev)); } } }