Moved free camera controls to numpad; added 'camtype %d', 'camspeed %f', 'freecam'
parent
2fe8fc5a91
commit
e956311626
|
@ -132,6 +132,13 @@ void CInput::EventProcess(Event& event)
|
|||
if (data->slot == INPUT_SLOT_RIGHT) m_keyMotion.x = 1.0f;
|
||||
if (data->slot == INPUT_SLOT_GUP ) m_keyMotion.z = 1.0f;
|
||||
if (data->slot == INPUT_SLOT_GDOWN) m_keyMotion.z = -1.0f;
|
||||
|
||||
if (data->slot == INPUT_SLOT_CAMERA_UP ) m_cameraKeyMotion.z = 1.0f;
|
||||
if (data->slot == INPUT_SLOT_CAMERA_DOWN) m_cameraKeyMotion.z = -1.0f;
|
||||
if (data->key == KEY(KP4) ) m_cameraKeyMotion.x = -1.0f;
|
||||
if (data->key == KEY(KP6) ) m_cameraKeyMotion.x = 1.0f;
|
||||
if (data->key == KEY(KP8) ) m_cameraKeyMotion.y = 1.0f;
|
||||
if (data->key == KEY(KP2) ) m_cameraKeyMotion.y = -1.0f;
|
||||
}
|
||||
else if (event.type == EVENT_KEY_UP)
|
||||
{
|
||||
|
@ -143,6 +150,13 @@ void CInput::EventProcess(Event& event)
|
|||
if (data->slot == INPUT_SLOT_RIGHT) m_keyMotion.x = 0.0f;
|
||||
if (data->slot == INPUT_SLOT_GUP ) m_keyMotion.z = 0.0f;
|
||||
if (data->slot == INPUT_SLOT_GDOWN) m_keyMotion.z = 0.0f;
|
||||
|
||||
if (data->slot == INPUT_SLOT_CAMERA_UP ) m_cameraKeyMotion.z = 0.0f;
|
||||
if (data->slot == INPUT_SLOT_CAMERA_DOWN) m_cameraKeyMotion.z = 0.0f;
|
||||
if (data->key == KEY(KP4) ) m_cameraKeyMotion.x = 0.0f;
|
||||
if (data->key == KEY(KP6) ) m_cameraKeyMotion.x = 0.0f;
|
||||
if (data->key == KEY(KP8) ) m_cameraKeyMotion.y = 0.0f;
|
||||
if (data->key == KEY(KP2) ) m_cameraKeyMotion.y = 0.0f;
|
||||
}
|
||||
else if (event.type == EVENT_JOY_AXIS)
|
||||
{
|
||||
|
@ -171,6 +185,7 @@ void CInput::EventProcess(Event& event)
|
|||
}
|
||||
|
||||
event.motionInput = Math::Clamp(m_joyMotion + m_keyMotion, Math::Vector(-1.0f, -1.0f, -1.0f), Math::Vector(1.0f, 1.0f, 1.0f));
|
||||
event.cameraInput = m_cameraKeyMotion;
|
||||
}
|
||||
|
||||
void CInput::MouseMove(Math::IntPoint pos)
|
||||
|
@ -204,6 +219,7 @@ void CInput::ResetKeyStates()
|
|||
m_kmodState = 0;
|
||||
m_keyMotion = Math::Vector(0.0f, 0.0f, 0.0f);
|
||||
m_joyMotion = Math::Vector(0.0f, 0.0f, 0.0f);
|
||||
m_cameraKeyMotion = Math::Vector(0.0f, 0.0f, 0.0f);
|
||||
for(int i=0; i<INPUT_SLOT_MAX; i++)
|
||||
m_keyPresses[i] = false;
|
||||
}
|
||||
|
|
|
@ -154,6 +154,8 @@ private:
|
|||
//! Motion vector set by joystick axes
|
||||
Math::Vector m_joyMotion;
|
||||
|
||||
//! Camera controls on the numpad
|
||||
Math::Vector m_cameraKeyMotion;
|
||||
|
||||
//! Bindings for user inputs
|
||||
InputBinding m_inputBindings[INPUT_SLOT_MAX];
|
||||
|
|
|
@ -720,6 +720,7 @@ struct Event
|
|||
: type(std::move(other.type)),
|
||||
rTime(std::move(other.rTime)),
|
||||
motionInput(std::move(other.motionInput)),
|
||||
cameraInput(std::move(other.cameraInput)),
|
||||
kmodState(std::move(other.kmodState)),
|
||||
mousePos(std::move(other.mousePos)),
|
||||
mouseButtonsState(std::move(other.mouseButtonsState)),
|
||||
|
@ -732,6 +733,7 @@ struct Event
|
|||
type = std::move(other.type);
|
||||
rTime = std::move(other.rTime);
|
||||
motionInput = std::move(other.motionInput);
|
||||
cameraInput = std::move(other.cameraInput);
|
||||
kmodState = std::move(other.kmodState);
|
||||
mousePos = std::move(other.mousePos);
|
||||
mouseButtonsState = std::move(other.mouseButtonsState);
|
||||
|
@ -762,6 +764,7 @@ struct Event
|
|||
clone.type = type;
|
||||
clone.rTime = rTime;
|
||||
clone.motionInput = motionInput;
|
||||
clone.cameraInput = cameraInput;
|
||||
clone.kmodState = kmodState;
|
||||
clone.mousePos = mousePos;
|
||||
clone.mouseButtonsState = mouseButtonsState;
|
||||
|
@ -787,6 +790,10 @@ struct Event
|
|||
//! Scope: all system events
|
||||
Math::Vector motionInput;
|
||||
|
||||
//! Motion vector set by numeric keyboard (managed by CInput)
|
||||
//! Scope: all system events
|
||||
Math::Vector cameraInput;
|
||||
|
||||
//! Current state of keyboard modifier keys: bitmask made of KEY_MOD(...) macro values (from common/key.h)
|
||||
//! Scope: all system events
|
||||
unsigned int kmodState;
|
||||
|
|
|
@ -1234,19 +1234,19 @@ bool CCamera::EventFrameFree(const Event &event)
|
|||
m_eyePt = Math::LookatPoint(m_eyePt, m_directionH, m_directionV, m_mouseDirV * event.rTime * factor * m_speed);
|
||||
|
||||
// Up/Down
|
||||
m_eyePt = Math::LookatPoint(m_eyePt, m_directionH, m_directionV, event.motionInput.y * event.rTime * factor * m_speed);
|
||||
m_eyePt = Math::LookatPoint(m_eyePt, m_directionH, m_directionV, event.cameraInput.y * event.rTime * factor * m_speed);
|
||||
|
||||
// Left/Right
|
||||
if ( event.kmodState & KEY_MOD(CTRL) )
|
||||
{
|
||||
if ( event.motionInput.x < 0.0f )
|
||||
m_eyePt = Math::LookatPoint(m_eyePt, m_directionH + Math::PI / 2.0f, m_directionV, -event.motionInput.x * event.rTime * factor * m_speed);
|
||||
if ( event.motionInput.x > 0.0f )
|
||||
m_eyePt = Math::LookatPoint(m_eyePt, m_directionH - Math::PI / 2.0f, m_directionV, event.motionInput.x * event.rTime * factor * m_speed);
|
||||
if ( event.cameraInput.x < 0.0f )
|
||||
m_eyePt = Math::LookatPoint(m_eyePt, m_directionH + Math::PI / 2.0f, m_directionV, -event.cameraInput.x * event.rTime * factor * m_speed);
|
||||
if ( event.cameraInput.x > 0.0f )
|
||||
m_eyePt = Math::LookatPoint(m_eyePt, m_directionH - Math::PI / 2.0f, m_directionV, event.cameraInput.x * event.rTime * factor * m_speed);
|
||||
}
|
||||
else
|
||||
{
|
||||
m_directionH -= event.motionInput.x * event.rTime * 0.7f * m_speed;
|
||||
m_directionH -= event.cameraInput.x * event.rTime * 0.7f * m_speed;
|
||||
}
|
||||
|
||||
// PageUp/PageDown
|
||||
|
@ -1711,5 +1711,10 @@ Math::Vector CCamera::ExcludeObject(Math::Vector eye, Math::Vector lookat,
|
|||
return eye;*/
|
||||
}
|
||||
|
||||
void CCamera::SetCameraSpeed(float speed)
|
||||
{
|
||||
m_speed = speed;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
|
|
@ -218,6 +218,8 @@ public:
|
|||
//! Returns the default sprite to use for the mouse
|
||||
EngineMouseType GetMouseDef(Math::Point pos);
|
||||
|
||||
void SetCameraSpeed(float speed);
|
||||
|
||||
protected:
|
||||
//! Changes the camera according to the mouse moved
|
||||
bool EventMouseMove(const Event &event);
|
||||
|
|
|
@ -1204,6 +1204,26 @@ void CRobotMain::ExecuteCmd(char *cmd)
|
|||
return;
|
||||
}
|
||||
|
||||
int camtype;
|
||||
if (sscanf(cmd, "camtype %d", &camtype) > 0)
|
||||
{
|
||||
m_camera->SetType(static_cast<Gfx::CameraType>(camtype));
|
||||
return;
|
||||
}
|
||||
|
||||
float camspeed;
|
||||
if (sscanf(cmd, "camspeed %f", &camspeed) > 0)
|
||||
{
|
||||
m_camera->SetCameraSpeed(camspeed);
|
||||
return;
|
||||
}
|
||||
|
||||
if (strcmp(cmd, "freecam") == 0)
|
||||
{
|
||||
m_camera->SetType(Gfx::CAM_TYPE_FREE);
|
||||
return;
|
||||
}
|
||||
|
||||
if (strcmp(cmd, "noclip") == 0)
|
||||
{
|
||||
CObject* object = GetSelect();
|
||||
|
|
Loading…
Reference in New Issue