+void CamWnd_registerCommands(CamWnd &camwnd)
+{
+ GlobalKeyEvents_insert("CameraForward", Accelerator(GDK_KEY_Up),
+ ReferenceCaller<camera_t, void(), Camera_MoveForward_KeyDown>(camwnd.getCamera()),
+ ReferenceCaller<camera_t, void(), Camera_MoveForward_KeyUp>(camwnd.getCamera())
+ );
+ GlobalKeyEvents_insert("CameraBack", Accelerator(GDK_KEY_Down),
+ ReferenceCaller<camera_t, void(), Camera_MoveBack_KeyDown>(camwnd.getCamera()),
+ ReferenceCaller<camera_t, void(), Camera_MoveBack_KeyUp>(camwnd.getCamera())
+ );
+ GlobalKeyEvents_insert("CameraLeft", Accelerator(GDK_KEY_Left),
+ ReferenceCaller<camera_t, void(), Camera_RotateLeft_KeyDown>(camwnd.getCamera()),
+ ReferenceCaller<camera_t, void(), Camera_RotateLeft_KeyUp>(camwnd.getCamera())
+ );
+ GlobalKeyEvents_insert("CameraRight", Accelerator(GDK_KEY_Right),
+ ReferenceCaller<camera_t, void(), Camera_RotateRight_KeyDown>(camwnd.getCamera()),
+ ReferenceCaller<camera_t, void(), Camera_RotateRight_KeyUp>(camwnd.getCamera())
+ );
+ GlobalKeyEvents_insert("CameraStrafeRight", Accelerator(GDK_KEY_period),
+ ReferenceCaller<camera_t, void(), Camera_MoveRight_KeyDown>(camwnd.getCamera()),
+ ReferenceCaller<camera_t, void(), Camera_MoveRight_KeyUp>(camwnd.getCamera())
+ );
+ GlobalKeyEvents_insert("CameraStrafeLeft", Accelerator(GDK_KEY_comma),
+ ReferenceCaller<camera_t, void(), Camera_MoveLeft_KeyDown>(camwnd.getCamera()),
+ ReferenceCaller<camera_t, void(), Camera_MoveLeft_KeyUp>(camwnd.getCamera())
+ );
+ GlobalKeyEvents_insert("CameraUp", Accelerator('D'),
+ ReferenceCaller<camera_t, void(), Camera_MoveUp_KeyDown>(camwnd.getCamera()),
+ ReferenceCaller<camera_t, void(), Camera_MoveUp_KeyUp>(camwnd.getCamera())
+ );
+ GlobalKeyEvents_insert("CameraDown", Accelerator('C'),
+ ReferenceCaller<camera_t, void(), Camera_MoveDown_KeyDown>(camwnd.getCamera()),
+ ReferenceCaller<camera_t, void(), Camera_MoveDown_KeyUp>(camwnd.getCamera())
+ );
+ GlobalKeyEvents_insert("CameraAngleDown", Accelerator('A'),
+ ReferenceCaller<camera_t, void(), Camera_PitchDown_KeyDown>(camwnd.getCamera()),
+ ReferenceCaller<camera_t, void(), Camera_PitchDown_KeyUp>(camwnd.getCamera())
+ );
+ GlobalKeyEvents_insert("CameraAngleUp", Accelerator('Z'),
+ ReferenceCaller<camera_t, void(), Camera_PitchUp_KeyDown>(camwnd.getCamera()),
+ ReferenceCaller<camera_t, void(), Camera_PitchUp_KeyUp>(camwnd.getCamera())
+ );
+
+ GlobalKeyEvents_insert("CameraFreeMoveForward", Accelerator(GDK_KEY_Up),
+ FreeMoveCameraMoveForwardKeyDownCaller(camwnd.getCamera()),
+ FreeMoveCameraMoveForwardKeyUpCaller(camwnd.getCamera())
+ );
+ GlobalKeyEvents_insert("CameraFreeMoveBack", Accelerator(GDK_KEY_Down),
+ FreeMoveCameraMoveBackKeyDownCaller(camwnd.getCamera()),
+ FreeMoveCameraMoveBackKeyUpCaller(camwnd.getCamera())
+ );
+ GlobalKeyEvents_insert("CameraFreeMoveLeft", Accelerator(GDK_KEY_Left),
+ FreeMoveCameraMoveLeftKeyDownCaller(camwnd.getCamera()),
+ FreeMoveCameraMoveLeftKeyUpCaller(camwnd.getCamera())
+ );
+ GlobalKeyEvents_insert("CameraFreeMoveRight", Accelerator(GDK_KEY_Right),
+ FreeMoveCameraMoveRightKeyDownCaller(camwnd.getCamera()),
+ FreeMoveCameraMoveRightKeyUpCaller(camwnd.getCamera())
+ );
+ GlobalKeyEvents_insert("CameraFreeMoveUp", Accelerator('D'),
+ FreeMoveCameraMoveUpKeyDownCaller(camwnd.getCamera()),
+ FreeMoveCameraMoveUpKeyUpCaller(camwnd.getCamera())
+ );
+ GlobalKeyEvents_insert("CameraFreeMoveDown", Accelerator('C'),
+ FreeMoveCameraMoveDownKeyDownCaller(camwnd.getCamera()),
+ FreeMoveCameraMoveDownKeyUpCaller(camwnd.getCamera())
+ );
+
+ GlobalCommands_insert("CameraForward",
+ ReferenceCaller<camera_t, void(), Camera_MoveForward_Discrete>(camwnd.getCamera()),
+ Accelerator(GDK_KEY_Up));
+ GlobalCommands_insert("CameraBack", ReferenceCaller<camera_t, void(), Camera_MoveBack_Discrete>(camwnd.getCamera()),
+ Accelerator(GDK_KEY_Down));
+ GlobalCommands_insert("CameraLeft",
+ ReferenceCaller<camera_t, void(), Camera_RotateLeft_Discrete>(camwnd.getCamera()),
+ Accelerator(GDK_KEY_Left));
+ GlobalCommands_insert("CameraRight",
+ ReferenceCaller<camera_t, void(), Camera_RotateRight_Discrete>(camwnd.getCamera()),
+ Accelerator(GDK_KEY_Right));
+ GlobalCommands_insert("CameraStrafeRight",
+ ReferenceCaller<camera_t, void(), Camera_MoveRight_Discrete>(camwnd.getCamera()),
+ Accelerator(GDK_KEY_period));
+ GlobalCommands_insert("CameraStrafeLeft",
+ ReferenceCaller<camera_t, void(), Camera_MoveLeft_Discrete>(camwnd.getCamera()),
+ Accelerator(GDK_KEY_comma));
+
+ GlobalCommands_insert("CameraUp", ReferenceCaller<camera_t, void(), Camera_MoveUp_Discrete>(camwnd.getCamera()),
+ Accelerator('D'));
+ GlobalCommands_insert("CameraDown", ReferenceCaller<camera_t, void(), Camera_MoveDown_Discrete>(camwnd.getCamera()),
+ Accelerator('C'));
+ GlobalCommands_insert("CameraAngleUp",
+ ReferenceCaller<camera_t, void(), Camera_PitchUp_Discrete>(camwnd.getCamera()),
+ Accelerator('A'));
+ GlobalCommands_insert("CameraAngleDown",
+ ReferenceCaller<camera_t, void(), Camera_PitchDown_Discrete>(camwnd.getCamera()),
+ Accelerator('Z'));
+}
+
+void CamWnd_Move_Enable(CamWnd &camwnd)
+{
+ KeyEvent_connect("CameraForward");
+ KeyEvent_connect("CameraBack");
+ KeyEvent_connect("CameraLeft");
+ KeyEvent_connect("CameraRight");
+ KeyEvent_connect("CameraStrafeRight");
+ KeyEvent_connect("CameraStrafeLeft");
+ KeyEvent_connect("CameraUp");
+ KeyEvent_connect("CameraDown");
+ KeyEvent_connect("CameraAngleUp");
+ KeyEvent_connect("CameraAngleDown");
+}
+
+void CamWnd_Move_Disable(CamWnd &camwnd)
+{
+ KeyEvent_disconnect("CameraForward");
+ KeyEvent_disconnect("CameraBack");
+ KeyEvent_disconnect("CameraLeft");
+ KeyEvent_disconnect("CameraRight");
+ KeyEvent_disconnect("CameraStrafeRight");
+ KeyEvent_disconnect("CameraStrafeLeft");
+ KeyEvent_disconnect("CameraUp");
+ KeyEvent_disconnect("CameraDown");
+ KeyEvent_disconnect("CameraAngleUp");
+ KeyEvent_disconnect("CameraAngleDown");
+}
+
+void CamWnd_Move_Discrete_Enable(CamWnd &camwnd)
+{
+ command_connect_accelerator("CameraForward");
+ command_connect_accelerator("CameraBack");
+ command_connect_accelerator("CameraLeft");
+ command_connect_accelerator("CameraRight");
+ command_connect_accelerator("CameraStrafeRight");
+ command_connect_accelerator("CameraStrafeLeft");
+ command_connect_accelerator("CameraUp");
+ command_connect_accelerator("CameraDown");
+ command_connect_accelerator("CameraAngleUp");
+ command_connect_accelerator("CameraAngleDown");
+}
+
+void CamWnd_Move_Discrete_Disable(CamWnd &camwnd)
+{
+ command_disconnect_accelerator("CameraForward");
+ command_disconnect_accelerator("CameraBack");
+ command_disconnect_accelerator("CameraLeft");
+ command_disconnect_accelerator("CameraRight");
+ command_disconnect_accelerator("CameraStrafeRight");
+ command_disconnect_accelerator("CameraStrafeLeft");
+ command_disconnect_accelerator("CameraUp");
+ command_disconnect_accelerator("CameraDown");
+ command_disconnect_accelerator("CameraAngleUp");
+ command_disconnect_accelerator("CameraAngleDown");
+}
+
+struct CamWnd_Move_Discrete {
+ static void Export(const Callback<void(bool)> &returnz)
+ {
+ returnz(g_camwindow_globals_private.m_bCamDiscrete);
+ }
+
+ static void Import(bool value)
+ {
+ if (g_camwnd) {
+ Import_(*g_camwnd, value);
+ } else {
+ g_camwindow_globals_private.m_bCamDiscrete = value;
+ }
+ }
+
+ static void Import_(CamWnd &camwnd, bool value)
+ {
+ if (g_camwindow_globals_private.m_bCamDiscrete) {
+ CamWnd_Move_Discrete_Disable(camwnd);
+ } else {
+ CamWnd_Move_Disable(camwnd);
+ }
+
+ g_camwindow_globals_private.m_bCamDiscrete = value;
+
+ if (g_camwindow_globals_private.m_bCamDiscrete) {
+ CamWnd_Move_Discrete_Enable(camwnd);
+ } else {
+ CamWnd_Move_Enable(camwnd);
+ }
+ }
+};