147 lines
3.3 KiB
C++
147 lines
3.3 KiB
C++
// Filename:- drag.cpp
|
|
//
|
|
#include "stdafx.h"
|
|
#include "includes.h"
|
|
#include "model.h"
|
|
//
|
|
#include "drag.h"
|
|
|
|
|
|
const float MOUSE_ROT_SCALE = 0.5f;
|
|
const float MOUSE_ZPOS_SCALE = 0.1f;
|
|
const float MOUSE_XPOS_SCALE = 0.1f;
|
|
const float MOUSE_YPOS_SCALE = 0.1f;
|
|
|
|
|
|
|
|
int m_x, m_y;
|
|
|
|
/*! commands to handle mouse dragging, uses key_flags defines above */
|
|
void start_drag( mkey_enum keyFlags, int x, int y )
|
|
{
|
|
m_x = x;
|
|
m_y = y;
|
|
}
|
|
|
|
static bool drag_actual( mkey_enum keyFlags, int x, int y )
|
|
{
|
|
bool bRepaintAndSetCursor = false;
|
|
|
|
|
|
if ( keyFlags != 0 )
|
|
{
|
|
if ( keyFlags & KEY_LBUTTON )
|
|
{
|
|
if ((x != m_x) || (y != m_y))
|
|
{
|
|
short s = GetAsyncKeyState(VK_MENU);
|
|
if (s & 0x8000)
|
|
{
|
|
AppVars.xPos += ((float)(x - m_x)/10.f) * MOUSE_XPOS_SCALE;
|
|
AppVars.yPos -= ((float)(y - m_y)/10.f) * MOUSE_YPOS_SCALE;
|
|
}
|
|
else
|
|
{
|
|
s = GetAsyncKeyState(0x5A); // Z key
|
|
if ( s&0x8000)
|
|
{
|
|
AppVars.rotAngleZ += (float)(x - m_x) * MOUSE_ROT_SCALE;
|
|
// AppVars.rotAngleZ += (float)(y - m_y) * MOUSE_ROT_SCALE;
|
|
if (AppVars.rotAngleZ> 360.0f) AppVars.rotAngleZ=AppVars.rotAngleZ-360.0f;
|
|
if (AppVars.rotAngleZ<-360.0f) AppVars.rotAngleZ=AppVars.rotAngleZ+360.0f;
|
|
}
|
|
else
|
|
{
|
|
AppVars.rotAngleY += (float)(x - m_x) * MOUSE_ROT_SCALE;
|
|
AppVars.rotAngleX += (float)(y - m_y) * MOUSE_ROT_SCALE;
|
|
if (AppVars.rotAngleY> 360.0f) AppVars.rotAngleY=AppVars.rotAngleY-360.0f;
|
|
if (AppVars.rotAngleY<-360.0f) AppVars.rotAngleY=AppVars.rotAngleY+360.0f;
|
|
if (AppVars.rotAngleX> 360.0f) AppVars.rotAngleX=AppVars.rotAngleX-360.0f;
|
|
if (AppVars.rotAngleX<-360.0f) AppVars.rotAngleX=AppVars.rotAngleX+360.0f;
|
|
}
|
|
}
|
|
bRepaintAndSetCursor = true;
|
|
}
|
|
} else
|
|
if ( keyFlags & KEY_RBUTTON )
|
|
{
|
|
if ( y != m_y )
|
|
{
|
|
AppVars.zPos += ((float)(y - m_y)/10.f) * MOUSE_ZPOS_SCALE;
|
|
|
|
if (AppVars.zPos<-1000.f) AppVars.zPos=-1000.f;
|
|
if (AppVars.zPos> 1000.f) AppVars.zPos= 1000.f;
|
|
|
|
bRepaintAndSetCursor = true;
|
|
}
|
|
}
|
|
}
|
|
|
|
return bRepaintAndSetCursor;
|
|
}
|
|
|
|
|
|
bool gbScrollLockActive = false;
|
|
bool drag( mkey_enum keyFlags, int x, int y )
|
|
{
|
|
bool bRepaintAndSetCursor = false;
|
|
|
|
float xPos = AppVars.xPos;
|
|
float yPos = AppVars.yPos;
|
|
float zPos = AppVars.zPos;
|
|
float rotAngleX = AppVars.rotAngleX;
|
|
float rotAngleY = AppVars.rotAngleY;
|
|
float rotAngleZ = AppVars.rotAngleZ;
|
|
|
|
SHORT s = GetKeyState(VK_SCROLL);
|
|
if (s&1)
|
|
{
|
|
// OutputDebugString("scroll lock ON\n");
|
|
|
|
if (!gbScrollLockActive)
|
|
{
|
|
// reset vars when first activating...
|
|
AppVars.xPos_SCROLL = AppVars.yPos_SCROLL = AppVars.zPos_SCROLL = 0.0f;
|
|
AppVars.rotAngleX_SCROLL = AppVars.rotAngleY_SCROLL = AppVars.rotAngleZ_SCROLL = 0.0f;
|
|
|
|
AppVars.xPos_SCROLL = AppVars.xPos;
|
|
AppVars.yPos_SCROLL = AppVars.yPos;
|
|
AppVars.zPos_SCROLL = AppVars.zPos;
|
|
|
|
//gbScrollLockActive = true;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
// OutputDebugString("scroll lock OFF\n");
|
|
|
|
gbScrollLockActive = false;
|
|
}
|
|
|
|
bool b = drag_actual( keyFlags, x, y );
|
|
|
|
if (gbScrollLockActive)
|
|
{
|
|
#define BLAHBLAH(arg) AppVars.arg ## _SCROLL += (AppVars.arg - arg); AppVars.arg = arg;
|
|
|
|
BLAHBLAH(xPos);
|
|
BLAHBLAH(yPos);
|
|
BLAHBLAH(zPos);
|
|
// BLAHBLAH(rotAngleX);
|
|
// BLAHBLAH(rotAngleY);
|
|
// BLAHBLAH(rotAngleZ);
|
|
}
|
|
|
|
return b;
|
|
}
|
|
|
|
|
|
void end_drag( mkey_enum keyFlags, int x, int y )
|
|
{
|
|
}
|
|
|
|
|
|
|
|
///////////////////// eof /////////////////////
|
|
|