CInputManager.cpp
上传用户:jinmajixie
上传日期:2022-07-12
资源大小:435k
文件大小:12k
- #include "main.h"
- /*******************************************************************************
- * INPUT MANAGER
- *******************************************************************************/
- ////////////////////////////////////////////////////////////////////////////////
- CInputManager::CInputManager()
- {
- mouse_initialized = true;
- mouse_active = true;
- filter = true;
- window_center_x = 1024/2;
- window_center_y = 768/2;
- sensitivity = 0.5f;
- yaw = 0.5f;
- pitch = 0.5f;
- action = 0;
- rotation = &nullv;
- position = &nullv;
- lookat = &nullv;
- mcontrol_x = &nullv.x;
- mcontrol_y = &nullv.x;
- // scene_m = NULL;
- // ssp = NULL;
- }
- ////////////////////////////////////////////////////////////////////////////////
- void CInputManager::Init(CTerrainEdit *te)
- {
- if (te != 0)
- mouse_initialized = true;
- tedit = te;
- }
- /*
- void CInputManager::Init(CSceneManager *s, CSystemStuff *sp)
- {
- scene_m = s;
- ssp = sp;
- SetMousePointers(scene_m->cp->rotation_p, &scene_m->cp->look_vector);
- }
- */
- ////////////////////////////////////////////////////////////////////////////////
- void CInputManager::SetMousePointers(CVector *p, CVector *r, CVector *l)
- {
- if (r == NULL || l == NULL || p == NULL)
- {
- err("CInput", "null pointer");
- return;
- }
- position = p;
- rotation = r;
- lookat = l;
- mouse_initialized = true;
- rotate_camera = true;
- }
- ////////////////////////////////////////////////////////////////////////////////
- ////////////////////////////////////////////////////////////////////////////////
- ////////////////////////////////////////////////////////////////////////////////
- void CInputManager::MouseMove()
- {
- if (!mouse_initialized)
- {
- errf("mouse not initialized", "!!!");
- return;
- }
- if (rotate_camera) CameraRotation();
- switch (action)
- {
- case 0:
- FloatModify();
- break;
- case 1:
- MovingObject();
- break;
- default: err("bad action in CInput"); break;
- }
- if (mx || my) SetCursorPos(window_center_x, window_center_y);
- }
- ////////////////////////////////////////////////////////////////////////////////
- void CInputManager::KeyDown(WPARAM k)
- {
- keys[k] = true;
- }
- void CInputManager::KeyUp(WPARAM k)
- {
- keys[k] = false;
- }
- void CInputManager::ProcessInput()
- {
- if (keys['C'])
- {
- rotate_camera = !rotate_camera;
- keys['C'] = false;
- }
- if (keys[VK_ESCAPE]) PostQuitMessage(0);
- }
- ////////////////////////////////////////////////////////////////////////////////
- ////////////////////////////////////////////////////////////////////////////////
- void CInputManager::MovingObject()
- {
- mx = my = 0;
- float mouse_x, mouse_y;
- if (!mouse_active) return;
- if (!GetCursorPos(¤t_pos)) return;
- mx = current_pos.x - window_center_x;
- my = current_pos.y - window_center_y;
- if (filter) // zistit na co to je
- {
- mouse_x = (mx + old_mouse_x) * 0.5f;
- mouse_y = (my + old_mouse_y) * 0.5f;
- }
- else
- {
- mouse_x = mx;
- mouse_y = my;
- }
- old_mouse_x = mx;
- old_mouse_y = my;
- mouse_x *= sensitivity;
- mouse_y *= sensitivity;
- float add_z = yaw * mouse_x;
- if (rotation->y - add_z > 45 && add_z > 0)
- {
- rotation->y -= add_z;
- }
- if (rotation->y - add_z < 135 && add_z < 0)
- {
- rotation->y -= add_z;
- }
- if (rotation->x >= 360) rotation->x -= 360;
- if (rotation->x < 0) rotation->x += 360;
- float add_y = pitch * mouse_y * -1;
- if (rotation->z - add_y > 20 && add_y > 0)
- {
- rotation->z -= add_y;
- }
- if (rotation->z - add_y < 70 && add_y < 0)
- {
- rotation->z -= add_y;
- }
- lookat->x -= add_z;
- lookat->z += add_y;
- /*
- lookat->z = sin(rotation->x/div180byPI);
- lookat->x = cos(rotation->x/div180byPI);
- float xy = sqrt(rotation->x*rotation->x+rotation->y*rotation->y);
- lookat->y = tan(rotation->y/div180byPI);
- */
- // errfi("lookat", lookat->x*1000, lookat->y*1000, lookat->z*1000);
- }
- ////////////////////////////////////////////////////////////////////////////////
- ////////////////////////////////////////////////////////////////////////////////
- ////////////////////////////////////////////////////////////////////////////////
- void CInputManager::CameraRotation()
- {
- mx = my = 0;
- float mouse_x, mouse_y;
- if (!mouse_active) return;
- if (!GetCursorPos(¤t_pos)) return;
- mx = current_pos.x - window_center_x;
- my = current_pos.y - window_center_y;
- if (filter) // zistit na co to je
- {
- mouse_x = (mx + old_mouse_x) * 0.5f;
- mouse_y = (my + old_mouse_y) * 0.5f;
- }
- else
- {
- mouse_x = mx;
- mouse_y = my;
- }
- old_mouse_x = mx;
- old_mouse_y = my;
- mouse_x *= sensitivity;
- mouse_y *= sensitivity;
- float add_x = yaw * mouse_x;
- rotation->x += add_x;
- // errfi("rotation", rotation->x, rotation->y, rotation->z);
- if (rotation->x >= 360) rotation->x -= 360;
- if (rotation->x < 0) rotation->x += 360;
- float add_y = pitch * mouse_y;
- rotation->y -= add_y;
- /*
- if (rotation->y - add_y > -90 && add_y > 0)
- {
- rotation->y -= add_y;
- }
- if (rotation->y - add_y < 90 && add_y < 0)
- {
- rotation->y -= add_y;
- }
- */
- lookat->z = sin(rotation->x/div180byPI);
- lookat->x = cos(rotation->x/div180byPI);
- float xy = sqrt(rotation->x*rotation->x+rotation->y*rotation->y);
- lookat->y = tan(rotation->y/div180byPI);
- // errfi("lookat", lookat->x*1000, lookat->y*1000, lookat->z*1000);
- }
- ////////////////////////////////////////////////////////////////////////////////
- ////////////////////////////////////////////////////////////////////////////////
- ////////////////////////////////////////////////////////////////////////////////
- ////////////////////////////////////////////////////////////////////////////////
- void CInputManager::FloatModify()
- {
- mx = my = 0;
- float mouse_x, mouse_y;
- if (!mouse_active) return;
- if (!GetCursorPos(¤t_pos)) return;
- mx = current_pos.x - window_center_x;
- my = current_pos.y - window_center_y;
- if (filter) // zistit na co to je
- {
- mouse_x = (mx + old_mouse_x) * 0.5f;
- mouse_y = (my + old_mouse_y) * 0.5f;
- }
- else
- {
- mouse_x = mx;
- mouse_y = my;
- }
- old_mouse_x = mx;
- old_mouse_y = my;
- mouse_x *= sensitivity;
- mouse_y *= sensitivity;
- float add_x = yaw * mouse_x * 1;
- float add_y = pitch * mouse_y * -1;
- *mcontrol_x += add_x;
- *mcontrol_y += add_y;
- if (*mcontrol_x < 0) *mcontrol_x = 0;
- if (*mcontrol_y < 0) *mcontrol_y = 0;
- if (*mcontrol_x > 128) *mcontrol_x = 128;
- if (*mcontrol_y > 128) *mcontrol_y = 128;
- }
- ////////////////////////////////////////////////////////////////////////////////
- ////////////////////////////////////////////////////////////////////////////////
- ////////////////////////////////////////////////////////////////////////////////
- //void CInputManager::ProcessInput()
- //{
- /*
- if (keys[VK_ESCAPE])
- {
- menu = !menu;
- if (menu)
- {
- float colour[4] = {-10.0, -10.0, -10.0, 0.5};
- glLightfv(GL_LIGHT0, GL_AMBIENT, colour);
- glEnable(GL_BLEND);
- }
- else
- {
- glLightfv(GL_LIGHT0, GL_AMBIENT, scene.ambient_colour);
- glDisable(GL_BLEND);
- }
- keys[VK_ESCAPE] = false;
- }
- if (keys['7'])
- {
- scene.ambient_colour[0] += 0.05f;
- scene.ambient_colour[1] += 0.05f;
- scene.ambient_colour[2] += 0.05f;
- scene.fog_colour[0] = scene.ambient_colour[0]*dif*0.45;
- scene.fog_colour[1] = scene.ambient_colour[1]*dif*0.55;
- scene.fog_colour[2] = scene.ambient_colour[2]*dif*0.72;
- glFogfv(GL_FOG_COLOR, scene.fog_colour);
- glLightfv(GL_LIGHT0, GL_AMBIENT, scene.ambient_colour);
- }
- if (keys['U'])
- {
- scene.ambient_colour[0] -= 0.05f;
- scene.ambient_colour[1] -= 0.05f;
- scene.ambient_colour[2] -= 0.05f;
- scene.fog_colour[0] = scene.ambient_colour[0]*dif*0.45;
- scene.fog_colour[1] = scene.ambient_colour[1]*dif*0.55;
- scene.fog_colour[2] = scene.ambient_colour[2]*dif*0.72;
- glFogfv(GL_FOG_COLOR, scene.fog_colour);
- glLightfv(GL_LIGHT0, GL_AMBIENT, scene.ambient_colour);
- }
- if (!menu)
- {
- // if (selected)
- // {
- if (keys[VK_UP]) statics.obj[last_collision].position.z += spd/10;
- if (keys[VK_DOWN]) statics.obj[last_collision].position.z -= spd/10;
- if (keys[VK_LEFT]) statics.obj[last_collision].position.x += spd/10;
- if (keys[VK_RIGHT]) statics.obj[last_collision].position.x -= spd/10;
- if (keys[VK_PRIOR]) statics.obj[last_collision].rotation.y += spd/10;
- if (keys[VK_NEXT]) statics.obj[last_collision].rotation.y -= spd/10;
- if (keys[VK_INSERT])
- { }
- if (keys[VK_DELETE])
- { }
- // } // selected
- // else
- {
- // if (keys[VK_UP]) statics.obj[15].rotation.x += spd/10;
- // if (keys[VK_DOWN]) statics.obj[15].rotation.x -= spd/10;
- // if (keys[VK_LEFT]) statics.obj[15].rotation.z += spd/10;
- // if (keys[VK_RIGHT]) statics.obj[15].rotation.z -= spd/10;
- // if (keys[VK_PRIOR]) statics.obj[15].rotation.y += spd/10;
- // if (keys[VK_NEXT]) statics.obj[15].rotation.y -= spd/10;
- }
- if (keys['1']) cam.max_speed = 0.1;
- if (keys['2']) cam.max_speed = 1.0;
- if (keys['3']) cam.max_speed = 5.0;
- if (keys['4']) cam.max_speed = 30.0;
- if (keys['H']) { help = !help; keys['H'] = false; }
- if (keys['R'])
- {
- selected = !selected;
- keys['R'] = false;
- }
- if (keys[VK_F5])
- {
- SaveWorld();
- keys[VK_F5]=false;
- }
- if (keys[VK_F9])
- {
- LoadWorld();
- keys[VK_F9]=false;
- }
- if (keys[' '])
- {
- cam.Jump();
- }
- if (keys['W'])
- {
- cam.Accelerate();
- }
- if (keys['S'])
- {
- cam.Deccelerate();
- }
- if (keys['A'])
- {
- cam.StrafeLeft();
- }
- if (keys['D'])
- {
- cam.StrafeRight();
- }
- if (keys['E']) { cam.velocity.y += spd/1000; }
- if (keys['Q']) { cam.velocity.y -= spd/1000; }
- if (keys['F'])
- {
- for (int i = 0 ; i < 128 ; i++)
- {
- CVector q(cam.GetLookVector());
- CVector vect(q);
- vect.Normal();
- vect.NoiseAngle();
- vect *= 5;
- int idn = 12+rand()%1;
- sel_obj = CreateDynamicObject(idn, cam.position+q, vect, true);
- gui.AddFadeText(dynamics.obj[sel_obj].model_id, 300, 200, 3);
- // sel_obj = CreateDynamicObject("arrow", cam.position+q, vect, false);
- }
- keys['F'] = false;
- }
- if (keys[VK_F15])
- {
- // if (arrow_released)
- // {
- // gui.AddFadeText(":: using arrow", 30, 100, 1);
- CVector q;
- q = 3;
- q *= cam.GetLookVector();
- sel_obj = CreateDynamicObject("arrow", q, q, false);
- // }
- brmbrm();
- arrow_released = false;
- }
- if (!keys[VK_F15])
- {
- // brmbrm();
- arrow_released = true;
- }
- if (keys['G'])
- {
- CVector accel(0.0, 0.01, 0.0);
- dynamics.obj[sel_obj].velocity += accel;
- }
- if (keys[VK_CONTROL])
- {
- cam.ToggleDuck();
- keys[VK_CONTROL] = false;
- }
- if (keys['C'])
- {
- show_collision = !show_collision;
- keys['C'] = false;
- }
- if (keys[VK_TAB])
- {
- culled = !culled;
- for (int i = 0 ; i < dynamics.count ; i++)
- dynamics.obj[i].culled = culled;
- for (int i = 0 ; i < statics.count ; i++)
- statics.obj[i].culled = culled;
- for (int i = 0 ; i < items.count ; i++)
- items.obj[i].culled = culled;
- keys[VK_TAB] = false;
- }
-
- if (keys['N'])
- {
- wireframe = !wireframe;
- for (int i = 0 ; i < statics.count ; i++)
- {
- if (statics.obj[i].pM != NULL)
- {
- if (wireframe)
- statics.obj[i].pM->render_mode = GL_LINES;
- else
- statics.obj[i].pM->render_mode = GL_TRIANGLES;
- }
- }
- for (int i = 0 ; i < dynamics.count ; i++)
- {
- if (dynamics.obj[i].pM != NULL)
- {
- if (wireframe)
- dynamics.obj[i].pM->render_mode = GL_LINES;
- else
- dynamics.obj[i].pM->render_mode = GL_TRIANGLES;
- }
- }
- keys['N'] = false;
- }
- if (keys['B'])
- {
- activated = !activated;
- for (int i = 0 ; i < dynamics.count ; i++)
- dynamics.obj[i].active = activated;
- keys['B'] = false;
- }
- if (keys['X'])
- {
- gui.ClearFadeTexts();
- for (int i=0 ; i < dynamics.count ; i++)
- {
- dynamics.obj[i].pM = NULL;
- }
- dynamics.count = 0;
- keys['X'] = false;
- }
- }
- else
- {
- if (keys['X']) ss.Umri();
- }
- */
- //}