Some CCamera cleanup and docs
parent
bef27c3b36
commit
646e5104f6
|
@ -18,7 +18,7 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* \file common/pathman.h
|
* \file app/pathman.h
|
||||||
* \brief Class for managing data/lang/save paths
|
* \brief Class for managing data/lang/save paths
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
|
@ -480,10 +480,6 @@ void InitializeEventTypeTexts()
|
||||||
EVENT_TYPE_TEXT[EVENT_OBJECT_CAMERA] = "EVENT_OBJECT_CAMERA";
|
EVENT_TYPE_TEXT[EVENT_OBJECT_CAMERA] = "EVENT_OBJECT_CAMERA";
|
||||||
EVENT_TYPE_TEXT[EVENT_OBJECT_HELP] = "EVENT_OBJECT_HELP";
|
EVENT_TYPE_TEXT[EVENT_OBJECT_HELP] = "EVENT_OBJECT_HELP";
|
||||||
EVENT_TYPE_TEXT[EVENT_OBJECT_SOLUCE] = "EVENT_OBJECT_SOLUCE";
|
EVENT_TYPE_TEXT[EVENT_OBJECT_SOLUCE] = "EVENT_OBJECT_SOLUCE";
|
||||||
EVENT_TYPE_TEXT[EVENT_OBJECT_CAMERAleft] = "EVENT_OBJECT_CAMERAleft";
|
|
||||||
EVENT_TYPE_TEXT[EVENT_OBJECT_CAMERAright]= "EVENT_OBJECT_CAMERAright";
|
|
||||||
EVENT_TYPE_TEXT[EVENT_OBJECT_CAMERAnear] = "EVENT_OBJECT_CAMERAnear";
|
|
||||||
EVENT_TYPE_TEXT[EVENT_OBJECT_CAMERAaway] = "EVENT_OBJECT_CAMERAaway";
|
|
||||||
EVENT_TYPE_TEXT[EVENT_OBJECT_SHORTCUT_MODE] = "EVENT_OBJECT_SHORTCUT_MODE";
|
EVENT_TYPE_TEXT[EVENT_OBJECT_SHORTCUT_MODE] = "EVENT_OBJECT_SHORTCUT_MODE";
|
||||||
EVENT_TYPE_TEXT[EVENT_OBJECT_MOVIELOCK] = "EVENT_OBJECT_MOVIELOCK";
|
EVENT_TYPE_TEXT[EVENT_OBJECT_MOVIELOCK] = "EVENT_OBJECT_MOVIELOCK";
|
||||||
EVENT_TYPE_TEXT[EVENT_OBJECT_EDITLOCK] = "EVENT_OBJECT_EDITLOCK";
|
EVENT_TYPE_TEXT[EVENT_OBJECT_EDITLOCK] = "EVENT_OBJECT_EDITLOCK";
|
||||||
|
|
|
@ -394,10 +394,6 @@ void InitializeRestext()
|
||||||
stringsEvent[EVENT_OBJECT_GINFO] = TR("Transmitted information");
|
stringsEvent[EVENT_OBJECT_GINFO] = TR("Transmitted information");
|
||||||
stringsEvent[EVENT_OBJECT_MAPZOOM] = TR("Zoom mini-map");
|
stringsEvent[EVENT_OBJECT_MAPZOOM] = TR("Zoom mini-map");
|
||||||
stringsEvent[EVENT_OBJECT_CAMERA] = TR("Camera (\\key camera;)");
|
stringsEvent[EVENT_OBJECT_CAMERA] = TR("Camera (\\key camera;)");
|
||||||
stringsEvent[EVENT_OBJECT_CAMERAleft] = TR("Camera to left");
|
|
||||||
stringsEvent[EVENT_OBJECT_CAMERAright] = TR("Camera to right");
|
|
||||||
stringsEvent[EVENT_OBJECT_CAMERAnear] = TR("Camera nearest");
|
|
||||||
stringsEvent[EVENT_OBJECT_CAMERAaway] = TR("Camera awayest");
|
|
||||||
stringsEvent[EVENT_OBJECT_HELP] = TR("Help about selected object");
|
stringsEvent[EVENT_OBJECT_HELP] = TR("Help about selected object");
|
||||||
stringsEvent[EVENT_OBJECT_SOLUCE] = TR("Show the solution");
|
stringsEvent[EVENT_OBJECT_SOLUCE] = TR("Show the solution");
|
||||||
stringsEvent[EVENT_OBJECT_SHORTCUT_MODE]= TR("Switch bots <-> buildings");
|
stringsEvent[EVENT_OBJECT_SHORTCUT_MODE]= TR("Switch bots <-> buildings");
|
||||||
|
|
|
@ -94,8 +94,8 @@ CCamera::CCamera()
|
||||||
m_actualLookat = Math::Vector(0.0f, 0.0f, 0.0f);
|
m_actualLookat = Math::Vector(0.0f, 0.0f, 0.0f);
|
||||||
m_finalEye = Math::Vector(0.0f, 0.0f, 0.0f);
|
m_finalEye = Math::Vector(0.0f, 0.0f, 0.0f);
|
||||||
m_finalLookat = Math::Vector(0.0f, 0.0f, 0.0f);
|
m_finalLookat = Math::Vector(0.0f, 0.0f, 0.0f);
|
||||||
m_normEye = Math::Vector(0.0f, 0.0f, 0.0f);
|
m_prevEye = Math::Vector(0.0f, 0.0f, 0.0f);
|
||||||
m_normLookat = Math::Vector(0.0f, 0.0f, 0.0f);
|
m_prevLookat = Math::Vector(0.0f, 0.0f, 0.0f);
|
||||||
m_focus = 1.0f;
|
m_focus = 1.0f;
|
||||||
|
|
||||||
m_eyePt = Math::Vector(0.0f, 0.0f, 0.0f);
|
m_eyePt = Math::Vector(0.0f, 0.0f, 0.0f);
|
||||||
|
@ -109,7 +109,6 @@ CCamera::CCamera()
|
||||||
m_backMin = 0.0f;
|
m_backMin = 0.0f;
|
||||||
m_addDirectionH = 0.0f;
|
m_addDirectionH = 0.0f;
|
||||||
m_addDirectionV = 0.0f;
|
m_addDirectionV = 0.0f;
|
||||||
m_transparency = false;
|
|
||||||
|
|
||||||
m_fixDist = 0.0f;
|
m_fixDist = 0.0f;
|
||||||
m_fixDirectionH = 0.0f;
|
m_fixDirectionH = 0.0f;
|
||||||
|
@ -121,8 +120,6 @@ CCamera::CCamera()
|
||||||
m_visitType = CAM_TYPE_NULL;
|
m_visitType = CAM_TYPE_NULL;
|
||||||
m_visitDirectionV = 0.0f;
|
m_visitDirectionV = 0.0f;
|
||||||
|
|
||||||
m_remotePan = 0.0f;
|
|
||||||
|
|
||||||
m_centeringPhase = CAM_PHASE_NULL;
|
m_centeringPhase = CAM_PHASE_NULL;
|
||||||
m_centeringAngleH = 0.0f;
|
m_centeringAngleH = 0.0f;
|
||||||
m_centeringAngleV = 0.0f;
|
m_centeringAngleV = 0.0f;
|
||||||
|
@ -238,7 +235,6 @@ void CCamera::Init(Math::Vector eye, Math::Vector lookat, float delay)
|
||||||
m_scriptEye = m_actualEye;
|
m_scriptEye = m_actualEye;
|
||||||
m_scriptLookat = m_actualLookat;
|
m_scriptLookat = m_actualLookat;
|
||||||
m_focus = 1.00f;
|
m_focus = 1.00f;
|
||||||
m_remotePan = 0.0f;
|
|
||||||
|
|
||||||
FlushEffect();
|
FlushEffect();
|
||||||
FlushOver();
|
FlushOver();
|
||||||
|
@ -258,9 +254,7 @@ CObject* CCamera::GetControllingObject()
|
||||||
|
|
||||||
void CCamera::SetType(CameraType type)
|
void CCamera::SetType(CameraType type)
|
||||||
{
|
{
|
||||||
m_remotePan = 0.0f;
|
if ( (m_type == CAM_TYPE_BACK) )
|
||||||
|
|
||||||
if ( (m_type == CAM_TYPE_BACK) && m_transparency )
|
|
||||||
{
|
{
|
||||||
for (CObject* obj : CObjectManager::GetInstancePointer()->GetAllObjects())
|
for (CObject* obj : CObjectManager::GetInstancePointer()->GetAllObjects())
|
||||||
{
|
{
|
||||||
|
@ -270,13 +264,12 @@ void CCamera::SetType(CameraType type)
|
||||||
SetTransparency(obj, 0.0f); // opaque object
|
SetTransparency(obj, 0.0f); // opaque object
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
m_transparency = false;
|
|
||||||
|
|
||||||
if (type == CAM_TYPE_INFO ||
|
if (type == CAM_TYPE_INFO ||
|
||||||
type == CAM_TYPE_VISIT) // xx -> info ?
|
type == CAM_TYPE_VISIT) // xx -> info ?
|
||||||
{
|
{
|
||||||
m_normEye = m_engine->GetEyePt();
|
m_prevEye = m_engine->GetEyePt();
|
||||||
m_normLookat = m_engine->GetLookatPt();
|
m_prevLookat = m_engine->GetLookatPt();
|
||||||
|
|
||||||
m_engine->SetFocus(1.00f); // normal
|
m_engine->SetFocus(1.00f); // normal
|
||||||
m_type = type;
|
m_type = type;
|
||||||
|
@ -290,7 +283,7 @@ void CCamera::SetType(CameraType type)
|
||||||
m_type = type;
|
m_type = type;
|
||||||
|
|
||||||
Math::Vector upVec = Math::Vector(0.0f, 1.0f, 0.0f);
|
Math::Vector upVec = Math::Vector(0.0f, 1.0f, 0.0f);
|
||||||
SetViewParams(m_normEye, m_normLookat, upVec);
|
SetViewParams(m_prevEye, m_prevLookat, upVec);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -386,70 +379,6 @@ CameraSmooth CCamera::GetSmooth()
|
||||||
return m_smooth;
|
return m_smooth;
|
||||||
}
|
}
|
||||||
|
|
||||||
void CCamera::SetDist(float dist)
|
|
||||||
{
|
|
||||||
m_fixDist = dist;
|
|
||||||
}
|
|
||||||
|
|
||||||
float CCamera::GetDist()
|
|
||||||
{
|
|
||||||
return m_fixDist;
|
|
||||||
}
|
|
||||||
|
|
||||||
void CCamera::SetFixDirectionH(float angle)
|
|
||||||
{
|
|
||||||
m_fixDirectionH = angle;
|
|
||||||
}
|
|
||||||
|
|
||||||
float CCamera::GetFixDirectionH()
|
|
||||||
{
|
|
||||||
return m_fixDirectionH;
|
|
||||||
}
|
|
||||||
|
|
||||||
void CCamera::SetFixDirectionV(float angle)
|
|
||||||
{
|
|
||||||
m_fixDirectionV = angle;
|
|
||||||
}
|
|
||||||
|
|
||||||
float CCamera::GetFixDirectionV()
|
|
||||||
{
|
|
||||||
return m_fixDirectionV;
|
|
||||||
}
|
|
||||||
|
|
||||||
void CCamera::SetRemotePan(float value)
|
|
||||||
{
|
|
||||||
m_remotePan = value;
|
|
||||||
}
|
|
||||||
|
|
||||||
float CCamera::GetRemotePan()
|
|
||||||
{
|
|
||||||
return m_remotePan;
|
|
||||||
}
|
|
||||||
|
|
||||||
void CCamera::SetRemoteZoom(float value)
|
|
||||||
{
|
|
||||||
value = Math::Norm(value);
|
|
||||||
|
|
||||||
if ( m_type == CAM_TYPE_BACK )
|
|
||||||
m_backDist = m_backMin + (200.0f - m_backMin) * value;
|
|
||||||
|
|
||||||
if ( m_type == CAM_TYPE_FIX ||
|
|
||||||
m_type == CAM_TYPE_PLANE )
|
|
||||||
m_fixDist = 10.0f + (200.0f - 10.0f) * value;
|
|
||||||
}
|
|
||||||
|
|
||||||
float CCamera::GetRemoteZoom()
|
|
||||||
{
|
|
||||||
if ( m_type == CAM_TYPE_BACK )
|
|
||||||
return (m_backDist - m_backMin) / (200.0f - m_backMin);
|
|
||||||
|
|
||||||
if ( m_type == CAM_TYPE_FIX ||
|
|
||||||
m_type == CAM_TYPE_PLANE )
|
|
||||||
return (m_fixDist - 10.0f) / (200.0f - 10.0f);
|
|
||||||
|
|
||||||
return 0.0f;
|
|
||||||
}
|
|
||||||
|
|
||||||
void CCamera::StartVisit(Math::Vector goal, float dist)
|
void CCamera::StartVisit(Math::Vector goal, float dist)
|
||||||
{
|
{
|
||||||
m_visitType = m_type;
|
m_visitType = m_type;
|
||||||
|
@ -824,98 +753,74 @@ void CCamera::OverFrame(const Event &event)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void CCamera::FixCamera()
|
void CCamera::UpdateCameraAnimation(const Math::Vector &eyePt,
|
||||||
|
const Math::Vector &lookatPt,
|
||||||
|
float rTime)
|
||||||
{
|
{
|
||||||
m_initDelay = 0.0f;
|
if (m_initDelay > 0.0f)
|
||||||
m_actualEye = m_finalEye = m_scriptEye;
|
|
||||||
m_actualLookat = m_finalLookat = m_scriptLookat;
|
|
||||||
SetViewTime(m_scriptEye, m_scriptLookat, 0.0f);
|
|
||||||
}
|
|
||||||
|
|
||||||
void CCamera::SetViewTime(const Math::Vector &eyePt,
|
|
||||||
const Math::Vector &lookatPt,
|
|
||||||
float rTime)
|
|
||||||
{
|
|
||||||
Math::Vector eye, lookat;
|
|
||||||
|
|
||||||
if (m_type == CAM_TYPE_INFO)
|
|
||||||
{
|
{
|
||||||
eye = eyePt;
|
m_initDelay -= rTime;
|
||||||
lookat = lookatPt;
|
if (m_initDelay < 0.0f)
|
||||||
|
m_initDelay = 0.0f;
|
||||||
|
rTime /= 1.0f+m_initDelay;
|
||||||
|
}
|
||||||
|
|
||||||
|
m_finalEye = eyePt;
|
||||||
|
m_finalLookat = lookatPt;
|
||||||
|
IsCollision(m_finalEye, m_finalLookat);
|
||||||
|
|
||||||
|
float prog = 0.0f;
|
||||||
|
float dist = Math::Distance(m_finalEye, m_actualEye);
|
||||||
|
|
||||||
|
if (m_smooth == CAM_SMOOTH_NONE) prog = dist;
|
||||||
|
if (m_smooth == CAM_SMOOTH_NORM) prog = powf(dist, 1.5f) * rTime * 0.75f;
|
||||||
|
if (m_smooth == CAM_SMOOTH_HARD) prog = dist * rTime * 4.0f;
|
||||||
|
if (dist == 0.0f)
|
||||||
|
{
|
||||||
|
m_actualEye = m_finalEye;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (m_initDelay > 0.0f)
|
if (prog > dist)
|
||||||
{
|
prog = dist;
|
||||||
m_initDelay -= rTime;
|
m_actualEye = (m_finalEye - m_actualEye) / dist * prog + m_actualEye;
|
||||||
if (m_initDelay < 0.0f)
|
|
||||||
m_initDelay = 0.0f;
|
|
||||||
rTime /= 1.0f+m_initDelay;
|
|
||||||
}
|
|
||||||
|
|
||||||
eye = eyePt;
|
|
||||||
lookat = lookatPt;
|
|
||||||
if ( !IsCollision(eye, lookat) )
|
|
||||||
{
|
|
||||||
m_finalEye = eye;
|
|
||||||
m_finalLookat = lookat;
|
|
||||||
}
|
|
||||||
|
|
||||||
float prog = 0.0f;
|
|
||||||
float dist = Math::Distance(m_finalEye, m_actualEye);
|
|
||||||
|
|
||||||
if (m_smooth == CAM_SMOOTH_NONE) prog = dist;
|
|
||||||
if (m_smooth == CAM_SMOOTH_NORM) prog = powf(dist, 1.5f) * rTime * 0.75f;
|
|
||||||
if (m_smooth == CAM_SMOOTH_HARD) prog = dist * rTime * 4.0f;
|
|
||||||
if (dist == 0.0f)
|
|
||||||
{
|
|
||||||
m_actualEye = m_finalEye;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
if (prog > dist)
|
|
||||||
prog = dist;
|
|
||||||
m_actualEye = (m_finalEye - m_actualEye) / dist * prog + m_actualEye;
|
|
||||||
}
|
|
||||||
|
|
||||||
dist = Math::Distance(m_finalLookat, m_actualLookat);
|
|
||||||
if ( m_smooth == CAM_SMOOTH_NONE ) prog = dist;
|
|
||||||
if ( m_smooth == CAM_SMOOTH_NORM ) prog = powf(dist, 1.5f) * rTime * 3.0f;
|
|
||||||
if ( m_smooth == CAM_SMOOTH_HARD ) prog = dist * rTime * 4.0f;
|
|
||||||
if ( dist == 0.0f )
|
|
||||||
{
|
|
||||||
m_actualLookat = m_finalLookat;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
if (prog > dist)
|
|
||||||
prog = dist;
|
|
||||||
m_actualLookat = (m_finalLookat - m_actualLookat) / dist * prog + m_actualLookat;
|
|
||||||
}
|
|
||||||
|
|
||||||
eye = m_effectOffset+m_actualEye;
|
|
||||||
m_water->AdjustEye(eye);
|
|
||||||
|
|
||||||
float h = m_terrain->GetFloorLevel(eye);
|
|
||||||
if (eye.y < h + 4.0f)
|
|
||||||
eye.y = h + 4.0f;
|
|
||||||
|
|
||||||
lookat = m_effectOffset+m_actualLookat;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
Math::Vector upVec = Math::Vector(0.0f, 1.0f, 0.0f);
|
dist = Math::Distance(m_finalLookat, m_actualLookat);
|
||||||
SetViewParams(eye, lookat, upVec);
|
if ( m_smooth == CAM_SMOOTH_NONE ) prog = dist;
|
||||||
|
if ( m_smooth == CAM_SMOOTH_NORM ) prog = powf(dist, 1.5f) * rTime * 3.0f;
|
||||||
|
if ( m_smooth == CAM_SMOOTH_HARD ) prog = dist * rTime * 4.0f;
|
||||||
|
if ( dist == 0.0f )
|
||||||
|
{
|
||||||
|
m_actualLookat = m_finalLookat;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (prog > dist)
|
||||||
|
prog = dist;
|
||||||
|
m_actualLookat = (m_finalLookat - m_actualLookat) / dist * prog + m_actualLookat;
|
||||||
|
}
|
||||||
|
|
||||||
|
Math::Vector eye = m_effectOffset+m_actualEye;
|
||||||
|
m_water->AdjustEye(eye);
|
||||||
|
|
||||||
|
float h = m_terrain->GetFloorLevel(eye);
|
||||||
|
if (eye.y < h + 4.0f)
|
||||||
|
eye.y = h + 4.0f;
|
||||||
|
|
||||||
|
Math::Vector lookat = m_effectOffset+m_actualLookat;
|
||||||
|
|
||||||
|
SetViewParams(eye, lookat);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool CCamera::IsCollision(Math::Vector &eye, Math::Vector lookat)
|
void CCamera::IsCollision(Math::Vector &eye, Math::Vector lookat)
|
||||||
{
|
{
|
||||||
if (m_type == CAM_TYPE_BACK ) return IsCollisionBack(eye, lookat);
|
if (m_type == CAM_TYPE_BACK ) IsCollisionBack();
|
||||||
if (m_type == CAM_TYPE_FIX ) return IsCollisionFix (eye, lookat);
|
if (m_type == CAM_TYPE_FIX ) IsCollisionFix (eye, lookat);
|
||||||
if (m_type == CAM_TYPE_PLANE) return IsCollisionFix (eye, lookat);
|
if (m_type == CAM_TYPE_PLANE) IsCollisionFix (eye, lookat);
|
||||||
return false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
bool CCamera::IsCollisionBack(Math::Vector &eye, Math::Vector lookat)
|
void CCamera::IsCollisionBack()
|
||||||
{
|
{
|
||||||
ObjectType iType;
|
ObjectType iType;
|
||||||
if (m_cameraObj == nullptr)
|
if (m_cameraObj == nullptr)
|
||||||
|
@ -933,8 +838,6 @@ bool CCamera::IsCollisionBack(Math::Vector &eye, Math::Vector lookat)
|
||||||
max.y = Math::Max(m_actualEye.y, m_actualLookat.y);
|
max.y = Math::Max(m_actualEye.y, m_actualLookat.y);
|
||||||
max.z = Math::Max(m_actualEye.z, m_actualLookat.z);
|
max.z = Math::Max(m_actualEye.z, m_actualLookat.z);
|
||||||
|
|
||||||
m_transparency = false;
|
|
||||||
|
|
||||||
for (CObject* obj : CObjectManager::GetInstancePointer()->GetAllObjects())
|
for (CObject* obj : CObjectManager::GetInstancePointer()->GetAllObjects())
|
||||||
{
|
{
|
||||||
if (IsObjectBeingTransported(obj))
|
if (IsObjectBeingTransported(obj))
|
||||||
|
@ -1001,12 +904,10 @@ bool CCamera::IsCollisionBack(Math::Vector &eye, Math::Vector lookat)
|
||||||
if (len > del) continue;
|
if (len > del) continue;
|
||||||
|
|
||||||
SetTransparency(obj, 1.0f); // transparent object
|
SetTransparency(obj, 1.0f); // transparent object
|
||||||
m_transparency = true;
|
|
||||||
}
|
}
|
||||||
return false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
bool CCamera::IsCollisionFix(Math::Vector &eye, Math::Vector lookat)
|
void CCamera::IsCollisionFix(Math::Vector &eye, Math::Vector lookat)
|
||||||
{
|
{
|
||||||
for (CObject* obj : CObjectManager::GetInstancePointer()->GetAllObjects())
|
for (CObject* obj : CObjectManager::GetInstancePointer()->GetAllObjects())
|
||||||
{
|
{
|
||||||
|
@ -1041,165 +942,135 @@ bool CCamera::IsCollisionFix(Math::Vector &eye, Math::Vector lookat)
|
||||||
dist = Math::Distance(eye, lookat);
|
dist = Math::Distance(eye, lookat);
|
||||||
Math::Vector proj = Projection(eye, lookat, objPos);
|
Math::Vector proj = Projection(eye, lookat, objPos);
|
||||||
eye = (lookat - eye) * objRadius / dist + proj;
|
eye = (lookat - eye) * objRadius / dist + proj;
|
||||||
return false;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
bool CCamera::EventProcess(const Event &event)
|
bool CCamera::EventProcess(const Event &event)
|
||||||
{
|
{
|
||||||
switch (event.type)
|
if (event.type == EVENT_MOUSE_MOVE)
|
||||||
{
|
{
|
||||||
case EVENT_FRAME:
|
if (m_engine->GetMouseType() == ENG_MOUSE_SCROLLR ||
|
||||||
EventFrame(event);
|
m_engine->GetMouseType() == ENG_MOUSE_SCROLLL ||
|
||||||
break;
|
m_engine->GetMouseType() == ENG_MOUSE_SCROLLU ||
|
||||||
|
m_engine->GetMouseType() == ENG_MOUSE_SCROLLD ||
|
||||||
|
m_engine->GetMouseType() == ENG_MOUSE_MOVE )
|
||||||
|
{
|
||||||
|
m_engine->SetMouseType(ENG_MOUSE_NORM);
|
||||||
|
}
|
||||||
|
|
||||||
case EVENT_MOUSE_BUTTON_DOWN:
|
if ((event.mouseButtonsState & MOUSE_BUTTON_RIGHT) != 0 || (event.mouseButtonsState & MOUSE_BUTTON_MIDDLE) != 0)
|
||||||
case EVENT_MOUSE_BUTTON_UP:
|
{
|
||||||
EventMouseButton(event);
|
Math::Point newDelta = event.mousePos - m_mousePos;
|
||||||
break;
|
if (m_cameraInvertX)
|
||||||
|
newDelta.x = -newDelta.x;
|
||||||
|
if (m_cameraInvertY)
|
||||||
|
newDelta.y = -newDelta.y;
|
||||||
|
m_mouseDelta += newDelta;
|
||||||
|
|
||||||
case EVENT_MOUSE_MOVE:
|
m_engine->SetMouseType(ENG_MOUSE_MOVE);
|
||||||
EventMouseMove(event);
|
}
|
||||||
break;
|
|
||||||
|
|
||||||
case EVENT_MOUSE_WHEEL:
|
m_mouseDeltaEdge.LoadZero();
|
||||||
EventMouseWheel(event);
|
if (m_oldCameraScroll)
|
||||||
break;
|
{
|
||||||
|
if (event.mousePos.x < MOUSE_EDGE_MARGIN)
|
||||||
|
m_mouseDeltaEdge.x = event.mousePos.x / MOUSE_EDGE_MARGIN - 1.0f;
|
||||||
|
if (event.mousePos.x > 1.0f - MOUSE_EDGE_MARGIN)
|
||||||
|
m_mouseDeltaEdge.x = 1.0f - (1.0f - event.mousePos.x) / MOUSE_EDGE_MARGIN;
|
||||||
|
if (event.mousePos.y < MOUSE_EDGE_MARGIN)
|
||||||
|
m_mouseDeltaEdge.y = event.mousePos.y / MOUSE_EDGE_MARGIN - 1.0f;
|
||||||
|
if (event.mousePos.y > 1.0f - MOUSE_EDGE_MARGIN)
|
||||||
|
m_mouseDeltaEdge.y = 1.0f - (1.0f - event.mousePos.y) / MOUSE_EDGE_MARGIN;
|
||||||
|
|
||||||
default:
|
if (m_type == CAM_TYPE_FREE ||
|
||||||
break;
|
m_type == CAM_TYPE_EDIT ||
|
||||||
}
|
m_type == CAM_TYPE_BACK ||
|
||||||
return true;
|
m_type == CAM_TYPE_FIX ||
|
||||||
}
|
m_type == CAM_TYPE_PLANE ||
|
||||||
|
m_type == CAM_TYPE_EXPLO )
|
||||||
|
{
|
||||||
|
if (m_mouseDeltaEdge.x > 0.0f)
|
||||||
|
m_engine->SetMouseType(ENG_MOUSE_SCROLLR);
|
||||||
|
if (m_mouseDeltaEdge.x < 0.0f)
|
||||||
|
m_engine->SetMouseType(ENG_MOUSE_SCROLLL);
|
||||||
|
}
|
||||||
|
if (m_type == CAM_TYPE_FREE ||
|
||||||
|
m_type == CAM_TYPE_EDIT )
|
||||||
|
{
|
||||||
|
if (m_mouseDeltaEdge.y > 0.0f)
|
||||||
|
m_engine->SetMouseType(ENG_MOUSE_SCROLLU);
|
||||||
|
if (m_mouseDeltaEdge.y < 0.0f)
|
||||||
|
m_engine->SetMouseType(ENG_MOUSE_SCROLLD);
|
||||||
|
}
|
||||||
|
|
||||||
bool CCamera::EventMouseMove(const Event &event)
|
m_mouseDeltaEdge.x /= 2*Math::PI;
|
||||||
{
|
m_mouseDeltaEdge.y /= Math::PI;
|
||||||
if (m_engine->GetMouseType() == ENG_MOUSE_SCROLLR ||
|
}
|
||||||
m_engine->GetMouseType() == ENG_MOUSE_SCROLLL ||
|
|
||||||
m_engine->GetMouseType() == ENG_MOUSE_SCROLLU ||
|
m_mousePos = event.mousePos;
|
||||||
m_engine->GetMouseType() == ENG_MOUSE_SCROLLD ||
|
|
||||||
m_engine->GetMouseType() == ENG_MOUSE_MOVE )
|
|
||||||
{
|
|
||||||
m_engine->SetMouseType(ENG_MOUSE_NORM);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((event.mouseButtonsState & MOUSE_BUTTON_RIGHT) != 0 || (event.mouseButtonsState & MOUSE_BUTTON_MIDDLE) != 0)
|
if (event.type == EVENT_MOUSE_WHEEL)
|
||||||
{
|
{
|
||||||
Math::Point newDelta = event.mousePos - m_mousePos;
|
auto dir = event.GetData<MouseWheelEventData>()->y;
|
||||||
|
m_mouseWheelDelta -= dir;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (event.type == EVENT_MOUSE_BUTTON_DOWN || event.type == EVENT_MOUSE_BUTTON_UP)
|
||||||
|
{
|
||||||
|
if (event.GetData<MouseButtonEventData>()->button == MOUSE_BUTTON_RIGHT || event.GetData<MouseButtonEventData>()->button == MOUSE_BUTTON_MIDDLE)
|
||||||
|
{
|
||||||
|
if ((event.mouseButtonsState & MOUSE_BUTTON_RIGHT) != 0 || (event.mouseButtonsState & MOUSE_BUTTON_MIDDLE) != 0)
|
||||||
|
{
|
||||||
|
m_engine->SetMouseType(ENG_MOUSE_MOVE);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
m_engine->SetMouseType(ENG_MOUSE_NORM);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (event.type == EVENT_FRAME && !m_freeze)
|
||||||
|
{
|
||||||
|
Math::Point newDelta = m_mouseDeltaEdge * m_speed * event.rTime;
|
||||||
if (m_cameraInvertX)
|
if (m_cameraInvertX)
|
||||||
newDelta.x = -newDelta.x;
|
newDelta.x = -newDelta.x;
|
||||||
if (m_cameraInvertY)
|
if (m_cameraInvertY)
|
||||||
newDelta.y = -newDelta.y;
|
newDelta.y = -newDelta.y;
|
||||||
m_mouseDelta += newDelta;
|
m_mouseDelta += newDelta;
|
||||||
|
|
||||||
m_engine->SetMouseType(ENG_MOUSE_MOVE);
|
EffectFrame(event);
|
||||||
}
|
OverFrame(event);
|
||||||
|
|
||||||
m_mouseDeltaEdge.LoadZero();
|
|
||||||
if (m_oldCameraScroll)
|
|
||||||
{
|
|
||||||
if (event.mousePos.x < MOUSE_EDGE_MARGIN)
|
|
||||||
m_mouseDeltaEdge.x = event.mousePos.x / MOUSE_EDGE_MARGIN - 1.0f;
|
|
||||||
if (event.mousePos.x > 1.0f - MOUSE_EDGE_MARGIN)
|
|
||||||
m_mouseDeltaEdge.x = 1.0f - (1.0f - event.mousePos.x) / MOUSE_EDGE_MARGIN;
|
|
||||||
if (event.mousePos.y < MOUSE_EDGE_MARGIN)
|
|
||||||
m_mouseDeltaEdge.y = event.mousePos.y / MOUSE_EDGE_MARGIN - 1.0f;
|
|
||||||
if (event.mousePos.y > 1.0f - MOUSE_EDGE_MARGIN)
|
|
||||||
m_mouseDeltaEdge.y = 1.0f - (1.0f - event.mousePos.y) / MOUSE_EDGE_MARGIN;
|
|
||||||
|
|
||||||
if (m_type == CAM_TYPE_FREE ||
|
|
||||||
m_type == CAM_TYPE_EDIT ||
|
|
||||||
m_type == CAM_TYPE_BACK ||
|
|
||||||
m_type == CAM_TYPE_FIX ||
|
|
||||||
m_type == CAM_TYPE_PLANE ||
|
|
||||||
m_type == CAM_TYPE_EXPLO )
|
|
||||||
{
|
|
||||||
if (m_mouseDeltaEdge.x > 0.0f)
|
|
||||||
m_engine->SetMouseType(ENG_MOUSE_SCROLLR);
|
|
||||||
if (m_mouseDeltaEdge.x < 0.0f)
|
|
||||||
m_engine->SetMouseType(ENG_MOUSE_SCROLLL);
|
|
||||||
}
|
|
||||||
if (m_type == CAM_TYPE_FREE ||
|
if (m_type == CAM_TYPE_FREE ||
|
||||||
m_type == CAM_TYPE_EDIT )
|
m_type == CAM_TYPE_EDIT)
|
||||||
{
|
return EventFrameFree(event, m_type != CAM_TYPE_EDIT);
|
||||||
if (m_mouseDeltaEdge.y > 0.0f)
|
|
||||||
m_engine->SetMouseType(ENG_MOUSE_SCROLLU);
|
|
||||||
if (m_mouseDeltaEdge.y < 0.0f)
|
|
||||||
m_engine->SetMouseType(ENG_MOUSE_SCROLLD);
|
|
||||||
}
|
|
||||||
|
|
||||||
m_mouseDeltaEdge.x /= 2*Math::PI;
|
if (m_type == CAM_TYPE_BACK)
|
||||||
m_mouseDeltaEdge.y /= Math::PI;
|
return EventFrameBack(event);
|
||||||
|
|
||||||
|
if (m_type == CAM_TYPE_FIX ||
|
||||||
|
m_type == CAM_TYPE_PLANE)
|
||||||
|
return EventFrameFix(event);
|
||||||
|
|
||||||
|
if (m_type == CAM_TYPE_EXPLO)
|
||||||
|
return EventFrameExplo(event);
|
||||||
|
|
||||||
|
if (m_type == CAM_TYPE_ONBOARD)
|
||||||
|
return EventFrameOnBoard(event);
|
||||||
|
|
||||||
|
if (m_type == CAM_TYPE_SCRIPT)
|
||||||
|
return EventFrameScript(event);
|
||||||
|
|
||||||
|
if (m_type == CAM_TYPE_INFO)
|
||||||
|
return EventFrameInfo(event);
|
||||||
|
|
||||||
|
if (m_type == CAM_TYPE_VISIT)
|
||||||
|
return EventFrameVisit(event);
|
||||||
}
|
}
|
||||||
|
|
||||||
m_mousePos = event.mousePos;
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
void CCamera::EventMouseWheel(const Event &event)
|
|
||||||
{
|
|
||||||
auto dir = event.GetData<MouseWheelEventData>()->y;
|
|
||||||
m_mouseWheelDelta -= dir;
|
|
||||||
}
|
|
||||||
|
|
||||||
void CCamera::EventMouseButton(const Event &event)
|
|
||||||
{
|
|
||||||
if (event.GetData<MouseButtonEventData>()->button == MOUSE_BUTTON_RIGHT || event.GetData<MouseButtonEventData>()->button == MOUSE_BUTTON_MIDDLE)
|
|
||||||
{
|
|
||||||
if ((event.mouseButtonsState & MOUSE_BUTTON_RIGHT) != 0 || (event.mouseButtonsState & MOUSE_BUTTON_MIDDLE) != 0)
|
|
||||||
{
|
|
||||||
m_engine->SetMouseType(ENG_MOUSE_MOVE);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
m_engine->SetMouseType(ENG_MOUSE_NORM);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
bool CCamera::EventFrame(const Event &event)
|
|
||||||
{
|
|
||||||
if (m_freeze)
|
|
||||||
return true;
|
|
||||||
|
|
||||||
Math::Point newDelta = m_mouseDeltaEdge * m_speed * event.rTime;
|
|
||||||
if (m_cameraInvertX)
|
|
||||||
newDelta.x = -newDelta.x;
|
|
||||||
if (m_cameraInvertY)
|
|
||||||
newDelta.y = -newDelta.y;
|
|
||||||
m_mouseDelta += newDelta;
|
|
||||||
|
|
||||||
EffectFrame(event);
|
|
||||||
OverFrame(event);
|
|
||||||
|
|
||||||
if (m_type == CAM_TYPE_FREE ||
|
|
||||||
m_type == CAM_TYPE_EDIT)
|
|
||||||
return EventFrameFree(event, m_type != CAM_TYPE_EDIT);
|
|
||||||
|
|
||||||
if (m_type == CAM_TYPE_BACK)
|
|
||||||
return EventFrameBack(event);
|
|
||||||
|
|
||||||
if (m_type == CAM_TYPE_FIX ||
|
|
||||||
m_type == CAM_TYPE_PLANE)
|
|
||||||
return EventFrameFix(event);
|
|
||||||
|
|
||||||
if (m_type == CAM_TYPE_EXPLO)
|
|
||||||
return EventFrameExplo(event);
|
|
||||||
|
|
||||||
if (m_type == CAM_TYPE_ONBOARD)
|
|
||||||
return EventFrameOnBoard(event);
|
|
||||||
|
|
||||||
if (m_type == CAM_TYPE_SCRIPT)
|
|
||||||
return EventFrameScript(event);
|
|
||||||
|
|
||||||
if (m_type == CAM_TYPE_INFO)
|
|
||||||
return EventFrameInfo(event);
|
|
||||||
|
|
||||||
if (m_type == CAM_TYPE_VISIT)
|
|
||||||
return EventFrameVisit(event);
|
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1255,7 +1126,7 @@ bool CCamera::EventFrameFree(const Event &event, bool keysAllowed)
|
||||||
if (m_terrain->AdjustToFloor(lookatPt, true))
|
if (m_terrain->AdjustToFloor(lookatPt, true))
|
||||||
lookatPt.y += m_heightLookat;
|
lookatPt.y += m_heightLookat;
|
||||||
|
|
||||||
SetViewTime(m_eyePt, lookatPt, event.rTime);
|
UpdateCameraAnimation(m_eyePt, lookatPt, event.rTime);
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
@ -1347,7 +1218,7 @@ bool CCamera::EventFrameBack(const Event &event)
|
||||||
{
|
{
|
||||||
h += Math::PI; // back
|
h += Math::PI; // back
|
||||||
}
|
}
|
||||||
h = Math::NormAngle(h)+m_remotePan;
|
h = Math::NormAngle(h);
|
||||||
float v = 0.0f; //?
|
float v = 0.0f; //?
|
||||||
|
|
||||||
h += m_centeringCurrentH;
|
h += m_centeringCurrentH;
|
||||||
|
@ -1382,7 +1253,7 @@ bool CCamera::EventFrameBack(const Event &event)
|
||||||
m_eyePt = ExcludeTerrain(m_eyePt, lookatPt, h, v);
|
m_eyePt = ExcludeTerrain(m_eyePt, lookatPt, h, v);
|
||||||
m_eyePt = ExcludeObject(m_eyePt, lookatPt, h, v);
|
m_eyePt = ExcludeObject(m_eyePt, lookatPt, h, v);
|
||||||
|
|
||||||
SetViewTime(m_eyePt, lookatPt, event.rTime);
|
UpdateCameraAnimation(m_eyePt, lookatPt, event.rTime);
|
||||||
|
|
||||||
m_directionH = h + Math::PI / 2.0f;
|
m_directionH = h + Math::PI / 2.0f;
|
||||||
m_directionV = v;
|
m_directionV = v;
|
||||||
|
@ -1407,7 +1278,7 @@ bool CCamera::EventFrameFix(const Event &event)
|
||||||
{
|
{
|
||||||
Math::Vector lookatPt = m_cameraObj->GetPosition();
|
Math::Vector lookatPt = m_cameraObj->GetPosition();
|
||||||
|
|
||||||
float h = m_fixDirectionH + m_remotePan;
|
float h = m_fixDirectionH;
|
||||||
float v = m_fixDirectionV;
|
float v = m_fixDirectionV;
|
||||||
|
|
||||||
float d = m_fixDist;
|
float d = m_fixDist;
|
||||||
|
@ -1416,7 +1287,7 @@ bool CCamera::EventFrameFix(const Event &event)
|
||||||
m_eyePt = ExcludeTerrain(m_eyePt, lookatPt, h, v);
|
m_eyePt = ExcludeTerrain(m_eyePt, lookatPt, h, v);
|
||||||
m_eyePt = ExcludeObject(m_eyePt, lookatPt, h, v);
|
m_eyePt = ExcludeObject(m_eyePt, lookatPt, h, v);
|
||||||
|
|
||||||
SetViewTime(m_eyePt, lookatPt, event.rTime);
|
UpdateCameraAnimation(m_eyePt, lookatPt, event.rTime);
|
||||||
|
|
||||||
m_directionH = h + Math::PI / 2.0f;
|
m_directionH = h + Math::PI / 2.0f;
|
||||||
m_directionV = v;
|
m_directionV = v;
|
||||||
|
@ -1452,7 +1323,7 @@ bool CCamera::EventFrameExplo(const Event &event)
|
||||||
if (m_terrain->AdjustToFloor(lookatPt, true))
|
if (m_terrain->AdjustToFloor(lookatPt, true))
|
||||||
lookatPt.y += m_heightLookat;
|
lookatPt.y += m_heightLookat;
|
||||||
|
|
||||||
SetViewTime(m_eyePt, lookatPt, event.rTime);
|
UpdateCameraAnimation(m_eyePt, lookatPt, event.rTime);
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
@ -1476,9 +1347,8 @@ bool CCamera::EventFrameOnBoard(const Event &event)
|
||||||
|
|
||||||
bool CCamera::EventFrameInfo(const Event &event)
|
bool CCamera::EventFrameInfo(const Event &event)
|
||||||
{
|
{
|
||||||
SetViewTime(Math::Vector(0.0f, 0.0f, 0.0f),
|
SetViewParams(Math::Vector(0.0f, 0.0f, 0.0f),
|
||||||
Math::Vector(0.0f, 0.0f, 1.0f),
|
Math::Vector(0.0f, 0.0f, 1.0f));
|
||||||
event.rTime);
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1501,28 +1371,43 @@ bool CCamera::EventFrameVisit(const Event &event)
|
||||||
Math::Vector eye = RotateView(m_visitGoal, angleH, angleV, m_visitDist);
|
Math::Vector eye = RotateView(m_visitGoal, angleH, angleV, m_visitDist);
|
||||||
eye = ExcludeTerrain(eye, m_visitGoal, angleH, angleV);
|
eye = ExcludeTerrain(eye, m_visitGoal, angleH, angleV);
|
||||||
eye = ExcludeObject(eye, m_visitGoal, angleH, angleV);
|
eye = ExcludeObject(eye, m_visitGoal, angleH, angleV);
|
||||||
SetViewTime(eye, m_visitGoal, event.rTime);
|
UpdateCameraAnimation(eye, m_visitGoal, event.rTime);
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool CCamera::EventFrameScript(const Event &event)
|
bool CCamera::EventFrameScript(const Event &event)
|
||||||
{
|
{
|
||||||
SetViewTime(m_scriptEye + m_effectOffset,
|
UpdateCameraAnimation(m_scriptEye + m_effectOffset,
|
||||||
m_scriptLookat + m_effectOffset, event.rTime);
|
m_scriptLookat + m_effectOffset, event.rTime);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
void CCamera::SetScriptEye(Math::Vector eye)
|
void CCamera::SetScriptCameraAnimateEye(Math::Vector eye)
|
||||||
{
|
{
|
||||||
m_scriptEye = eye;
|
m_scriptEye = eye;
|
||||||
}
|
}
|
||||||
|
|
||||||
void CCamera::SetScriptLookat(Math::Vector lookat)
|
void CCamera::SetScriptCameraAnimateLookat(Math::Vector lookat)
|
||||||
{
|
{
|
||||||
m_scriptLookat = lookat;
|
m_scriptLookat = lookat;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void CCamera::SetScriptCamera(Math::Vector eye, Math::Vector lookat)
|
||||||
|
{
|
||||||
|
SetScriptCameraAnimate(eye, lookat);
|
||||||
|
|
||||||
|
m_initDelay = 0.0f;
|
||||||
|
m_actualEye = m_finalEye = m_scriptEye;
|
||||||
|
m_actualLookat = m_finalLookat = m_scriptLookat;
|
||||||
|
}
|
||||||
|
|
||||||
|
void CCamera::SetScriptCameraAnimate(Math::Vector eye, Math::Vector lookat)
|
||||||
|
{
|
||||||
|
m_scriptEye = eye;
|
||||||
|
m_scriptLookat = lookat;
|
||||||
|
}
|
||||||
|
|
||||||
void CCamera::SetViewParams(const Math::Vector &eye, const Math::Vector &lookat,
|
void CCamera::SetViewParams(const Math::Vector &eye, const Math::Vector &lookat,
|
||||||
const Math::Vector &up)
|
const Math::Vector &up)
|
||||||
{
|
{
|
||||||
|
|
|
@ -45,7 +45,7 @@ enum CameraType
|
||||||
{
|
{
|
||||||
//! Undefined
|
//! Undefined
|
||||||
CAM_TYPE_NULL = 0,
|
CAM_TYPE_NULL = 0,
|
||||||
//! Free camera (? never in principle ?)
|
//! Free camera
|
||||||
CAM_TYPE_FREE = 1,
|
CAM_TYPE_FREE = 1,
|
||||||
//! Camera while editing a program
|
//! Camera while editing a program
|
||||||
CAM_TYPE_EDIT = 2,
|
CAM_TYPE_EDIT = 2,
|
||||||
|
@ -57,11 +57,11 @@ enum CameraType
|
||||||
CAM_TYPE_FIX = 5,
|
CAM_TYPE_FIX = 5,
|
||||||
//! Camera steady after explosion
|
//! Camera steady after explosion
|
||||||
CAM_TYPE_EXPLO = 6,
|
CAM_TYPE_EXPLO = 6,
|
||||||
//! Camera during a film script
|
//! Camera during a cutscene
|
||||||
CAM_TYPE_SCRIPT = 7,
|
CAM_TYPE_SCRIPT = 7,
|
||||||
//! Camera for displaying information
|
//! Camera for displaying SatCom (???)
|
||||||
CAM_TYPE_INFO = 8,
|
CAM_TYPE_INFO = 8,
|
||||||
//! Visit instead of an error
|
//! Visit camera, rotates around given position
|
||||||
CAM_TYPE_VISIT = 9,
|
CAM_TYPE_VISIT = 9,
|
||||||
//! Static camera height
|
//! Static camera height
|
||||||
CAM_TYPE_PLANE = 11,
|
CAM_TYPE_PLANE = 11,
|
||||||
|
@ -91,15 +91,15 @@ enum CameraEffect
|
||||||
CAM_EFFECT_NULL = 0,
|
CAM_EFFECT_NULL = 0,
|
||||||
//! Digging in
|
//! Digging in
|
||||||
CAM_EFFECT_TERRAFORM = 1,
|
CAM_EFFECT_TERRAFORM = 1,
|
||||||
//! ? Vehicle driving is severely ?
|
//! Hard landing
|
||||||
CAM_EFFECT_CRASH = 2,
|
CAM_EFFECT_CRASH = 2,
|
||||||
//! Explosion
|
//! Explosion
|
||||||
CAM_EFFECT_EXPLO = 3,
|
CAM_EFFECT_EXPLO = 3,
|
||||||
//! ? Not mortal shot ?
|
//! Shot by an enemy
|
||||||
CAM_EFFECT_SHOT = 4,
|
CAM_EFFECT_SHOT = 4,
|
||||||
//! Vibration during construction
|
//! Vibration during construction
|
||||||
CAM_EFFECT_VIBRATION = 5,
|
CAM_EFFECT_VIBRATION = 5,
|
||||||
//! ? Spleen reactor ?
|
//! Overheated reactor
|
||||||
CAM_EFFECT_PET = 6,
|
CAM_EFFECT_PET = 6,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -124,7 +124,9 @@ enum CameraOverEffect
|
||||||
\class CCamera
|
\class CCamera
|
||||||
\brief Camera moving in 3D scene
|
\brief Camera moving in 3D scene
|
||||||
|
|
||||||
... */
|
This class manages everything related to animating the camera in 3D scene.
|
||||||
|
Calculated values are then passed to Gfx::CEngine.
|
||||||
|
*/
|
||||||
class CCamera
|
class CCamera
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
@ -134,70 +136,83 @@ public:
|
||||||
//! Management of an event
|
//! Management of an event
|
||||||
bool EventProcess(const Event &event);
|
bool EventProcess(const Event &event);
|
||||||
|
|
||||||
//! Initializes the camera
|
/**
|
||||||
|
* \brief Initializes the camera
|
||||||
|
* \param eye Initial eye position
|
||||||
|
* \param lookat Initial lookat position
|
||||||
|
* \param delay Time of the initial entry animation
|
||||||
|
*/
|
||||||
void Init(Math::Vector eye, Math::Vector lookat, float delay);
|
void Init(Math::Vector eye, Math::Vector lookat, float delay);
|
||||||
|
|
||||||
//! Sets the object controlling the camera
|
//! Sets the object controlling the camera
|
||||||
void SetControllingObject(CObject* object);
|
void SetControllingObject(CObject* object);
|
||||||
|
//! Gets the object controlling the camera
|
||||||
CObject* GetControllingObject();
|
CObject* GetControllingObject();
|
||||||
|
|
||||||
//! Change the type of camera
|
//! Change the type of camera
|
||||||
void SetType(CameraType type);
|
void SetType(CameraType type);
|
||||||
|
//! Get the type of the camera
|
||||||
CameraType GetType();
|
CameraType GetType();
|
||||||
|
|
||||||
//! Management of the smoothing mode
|
//! Set smoothing mode
|
||||||
void SetSmooth(CameraSmooth type);
|
void SetSmooth(CameraSmooth type);
|
||||||
|
//! Get smoothing mode
|
||||||
CameraSmooth GetSmooth();
|
CameraSmooth GetSmooth();
|
||||||
|
|
||||||
//! Management of the setback distance
|
|
||||||
void SetDist(float dist);
|
|
||||||
float GetDist();
|
|
||||||
|
|
||||||
//! Manage angle mode CAM_TYPE_FIX
|
//! Returns the current point of view of the camera
|
||||||
void SetFixDirectionH(float angle);
|
|
||||||
float GetFixDirectionH();
|
|
||||||
void SetFixDirectionV(float angle);
|
|
||||||
float GetFixDirectionV();
|
|
||||||
|
|
||||||
//! Managing the triggering mode of the camera panning
|
|
||||||
void SetRemotePan(float value);
|
|
||||||
float GetRemotePan();
|
|
||||||
|
|
||||||
//! Management of the remote zoom (0 .. 1) of the camera
|
|
||||||
void SetRemoteZoom(float value);
|
|
||||||
float GetRemoteZoom();
|
|
||||||
|
|
||||||
//! Start with a tour round the camera
|
|
||||||
void StartVisit(Math::Vector goal, float dist);
|
|
||||||
//! Circular end of a visit with the camera
|
|
||||||
void StopVisit();
|
|
||||||
|
|
||||||
//! Returns the point of view of the camera
|
|
||||||
void GetCamera(Math::Vector &eye, Math::Vector &lookat);
|
void GetCamera(Math::Vector &eye, Math::Vector &lookat);
|
||||||
|
|
||||||
//! Specifies a special movement of camera to frame action
|
//! \name Visit camera management (CAM_TYPE_VISIT) - camera in this mode shows a position, constantly rotating around it
|
||||||
|
//@{
|
||||||
|
//! Start visit camera
|
||||||
|
void StartVisit(Math::Vector goal, float dist);
|
||||||
|
//! Stop visit camera
|
||||||
|
void StopVisit();
|
||||||
|
//@}
|
||||||
|
|
||||||
|
//! \name Camera "centering" - moves the camera to show some happening action (e.g. sniffer sniffing)
|
||||||
|
//@{
|
||||||
|
//! Move camera to show happening action
|
||||||
bool StartCentering(CObject *object, float angleH, float angleV, float dist, float time);
|
bool StartCentering(CObject *object, float angleH, float angleV, float dist, float time);
|
||||||
//! Ends a special movement of camera to frame action
|
//! Go back to normal position after showing some happening action
|
||||||
bool StopCentering(CObject *object, float time);
|
bool StopCentering(CObject *object, float time);
|
||||||
//! Stop framing special in the current position
|
//! Abort centering animation in the current position
|
||||||
void AbortCentering();
|
void AbortCentering();
|
||||||
|
//@}
|
||||||
|
|
||||||
//! Removes the special effect with the camera
|
//! \name Camera shake effects
|
||||||
void FlushEffect();
|
//@{
|
||||||
//! Starts a special effect with the camera
|
//! Starts a camera shake effect
|
||||||
void StartEffect(CameraEffect effect, Math::Vector pos, float force);
|
void StartEffect(CameraEffect effect, Math::Vector pos, float force);
|
||||||
|
//! Removes the camera shake effect
|
||||||
|
void FlushEffect();
|
||||||
|
//@}
|
||||||
|
|
||||||
//! Removes the effect of superposition in the foreground
|
//! \name Camera overlay effects
|
||||||
void FlushOver();
|
//@{
|
||||||
//! Specifies the base color
|
//! Starts camera overlay effect
|
||||||
void SetOverBaseColor(Color color);
|
|
||||||
void StartOver(CameraOverEffect effect, Math::Vector pos, float force);
|
void StartOver(CameraOverEffect effect, Math::Vector pos, float force);
|
||||||
|
//! Removes camera overlay effect
|
||||||
|
void FlushOver();
|
||||||
|
//! Specifies camera overlay effect base color
|
||||||
|
void SetOverBaseColor(Color color);
|
||||||
|
//@}
|
||||||
|
|
||||||
//! Sets the soft movement of the camera
|
//! \name Script camera - cutscenes controlled by external code
|
||||||
void FixCamera();
|
//@{
|
||||||
void SetScriptEye(Math::Vector eye);
|
//! Script camera: Set camera position
|
||||||
void SetScriptLookat(Math::Vector lookat);
|
void SetScriptCamera(Math::Vector eye, Math::Vector lookat);
|
||||||
|
//! Script camera: Animate to given camera position
|
||||||
|
void SetScriptCameraAnimate(Math::Vector eye, Math::Vector lookat);
|
||||||
|
//! Script camera: Animate to given eye position
|
||||||
|
void SetScriptCameraAnimateEye(Math::Vector eye);
|
||||||
|
//! Script camera: Animate to given lookat position
|
||||||
|
void SetScriptCameraAnimateLookat(Math::Vector lookat);
|
||||||
|
//@}
|
||||||
|
|
||||||
|
//! \name Configuration settings
|
||||||
|
//@{
|
||||||
void SetEffect(bool enable);
|
void SetEffect(bool enable);
|
||||||
bool GetEffect();
|
bool GetEffect();
|
||||||
void SetBlood(bool enable);
|
void SetBlood(bool enable);
|
||||||
|
@ -208,58 +223,66 @@ public:
|
||||||
bool GetCameraInvertX();
|
bool GetCameraInvertX();
|
||||||
void SetCameraInvertY(bool invert);
|
void SetCameraInvertY(bool invert);
|
||||||
bool GetCameraInvertY();
|
bool GetCameraInvertY();
|
||||||
|
//@}
|
||||||
|
|
||||||
//! Temporarily freeze camera movement
|
//! Temporarily freeze camera movement
|
||||||
void SetFreeze(bool freeze);
|
void SetFreeze(bool freeze);
|
||||||
|
|
||||||
|
//! Set camera speed
|
||||||
void SetCameraSpeed(float speed);
|
void SetCameraSpeed(float speed);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
//! Changes the camera according to the mouse moved
|
//! Advances the effect of the camera
|
||||||
bool EventMouseMove(const Event &event);
|
void EffectFrame(const Event &event);
|
||||||
//! Mouse wheel operation
|
//! Advanced overlay effect in the foreground
|
||||||
void EventMouseWheel(const Event &event);
|
void OverFrame(const Event &event);
|
||||||
//! Mouse button handling
|
|
||||||
void EventMouseButton(const Event &event);
|
|
||||||
//! Changes the camera according to the time elapsed
|
|
||||||
bool EventFrame(const Event &event);
|
|
||||||
//! Moves the point of view
|
|
||||||
bool EventFrameFree(const Event &event, bool keysAllowed);
|
bool EventFrameFree(const Event &event, bool keysAllowed);
|
||||||
//! Moves the point of view
|
|
||||||
bool EventFrameBack(const Event &event);
|
bool EventFrameBack(const Event &event);
|
||||||
//! Moves the point of view
|
|
||||||
bool EventFrameFix(const Event &event);
|
bool EventFrameFix(const Event &event);
|
||||||
//! Moves the point of view
|
|
||||||
bool EventFrameExplo(const Event &event);
|
bool EventFrameExplo(const Event &event);
|
||||||
//! Moves the point of view
|
|
||||||
bool EventFrameOnBoard(const Event &event);
|
bool EventFrameOnBoard(const Event &event);
|
||||||
//! Moves the point of view
|
|
||||||
bool EventFrameInfo(const Event &event);
|
bool EventFrameInfo(const Event &event);
|
||||||
//! Moves the point of view
|
|
||||||
bool EventFrameVisit(const Event &event);
|
bool EventFrameVisit(const Event &event);
|
||||||
//! Moves the point of view
|
|
||||||
bool EventFrameScript(const Event &event);
|
bool EventFrameScript(const Event &event);
|
||||||
|
|
||||||
//! Specifies the location and direction of view to the 3D engine
|
/**
|
||||||
void SetViewTime(const Math::Vector &eyePt, const Math::Vector &lookatPt, float rTime);
|
* \brief Calculates camera animation and sends updated camera position to the 3D engine
|
||||||
//! Avoid the obstacles
|
* \param eyePt Eye point
|
||||||
bool IsCollision(Math::Vector &eye, Math::Vector lookat);
|
* \param lookatPt Lookat point
|
||||||
//! Avoid the obstacles
|
* \param rTime Time since last time this function was called (used to calculate animation)
|
||||||
bool IsCollisionBack(Math::Vector &eye, Math::Vector lookat);
|
* \see SetViewParams
|
||||||
//! Avoid the obstacles
|
*/
|
||||||
bool IsCollisionFix(Math::Vector &eye, Math::Vector lookat);
|
void UpdateCameraAnimation(const Math::Vector &eyePt, const Math::Vector &lookatPt, float rTime);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* \brief Avoid the obstacles
|
||||||
|
*
|
||||||
|
* For CAM_TYPE_BACK: make obstacles transparent
|
||||||
|
* For CAM_TYPE_FIX or CAM_TYPE_PLANE: adjust eye not to hit the obstacles
|
||||||
|
*
|
||||||
|
* \param eye Eye position, may be adjusted
|
||||||
|
* \param lookat Lookat point
|
||||||
|
*/
|
||||||
|
void IsCollision(Math::Vector &eye, Math::Vector lookat);
|
||||||
|
//! Avoid the obstacles (CAM_TYPE_BACK)
|
||||||
|
void IsCollisionBack();
|
||||||
|
//! Avoid the obstacles (CAM_TYPE_FIX or CAM_TYPE_PLANE)
|
||||||
|
void IsCollisionFix(Math::Vector &eye, Math::Vector lookat);
|
||||||
|
|
||||||
//! Adjusts the camera not to enter the ground
|
//! Adjusts the camera not to enter the ground
|
||||||
Math::Vector ExcludeTerrain(Math::Vector eye, Math::Vector lookat, float &angleH, float &angleV);
|
Math::Vector ExcludeTerrain(Math::Vector eye, Math::Vector lookat, float &angleH, float &angleV);
|
||||||
//! Adjusts the camera not to enter an object
|
//! Adjusts the camera not to enter an object
|
||||||
Math::Vector ExcludeObject(Math::Vector eye, Math::Vector lookat, float &angleH, float &angleV);
|
Math::Vector ExcludeObject(Math::Vector eye, Math::Vector lookat, float &angleH, float &angleV);
|
||||||
|
|
||||||
//! Specifies the location and direction of view
|
/**
|
||||||
void SetViewParams(const Math::Vector &eye, const Math::Vector &lookat, const Math::Vector &up);
|
* \brief Updates the location and direction of the camera in the 3D engine
|
||||||
//! Advances the effect of the camera
|
* \param eye Eye point
|
||||||
void EffectFrame(const Event &event);
|
* \param lookat Lookat point
|
||||||
//! Advanced overlay effect in the foreground
|
* \param up Up vector
|
||||||
void OverFrame(const Event &event);
|
* \see CEngine::SetViewParams
|
||||||
|
*/
|
||||||
|
void SetViewParams(const Math::Vector &eye, const Math::Vector &lookat, const Math::Vector &up = Math::Vector(0.0f, 1.0f, 0.0f));
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* \brief Calculate camera movement (from user inputs) to apply
|
* \brief Calculate camera movement (from user inputs) to apply
|
||||||
|
@ -280,10 +303,10 @@ protected:
|
||||||
//! Type of smoothing
|
//! Type of smoothing
|
||||||
CameraSmooth m_smooth;
|
CameraSmooth m_smooth;
|
||||||
//! Object linked to the camera
|
//! Object linked to the camera
|
||||||
CObject* m_cameraObj;
|
CObject* m_cameraObj;
|
||||||
|
|
||||||
//! Time of initial centering
|
//! Remaining time of initial camera entry animation
|
||||||
float m_initDelay;
|
float m_initDelay;
|
||||||
|
|
||||||
//! Current eye
|
//! Current eye
|
||||||
Math::Vector m_actualEye;
|
Math::Vector m_actualEye;
|
||||||
|
@ -294,11 +317,11 @@ protected:
|
||||||
//! Final lookat
|
//! Final lookat
|
||||||
Math::Vector m_finalLookat;
|
Math::Vector m_finalLookat;
|
||||||
//! Eye position at the moment of entering CAM_TYPE_INFO/CAM_TYPE_VISIT
|
//! Eye position at the moment of entering CAM_TYPE_INFO/CAM_TYPE_VISIT
|
||||||
Math::Vector m_normEye;
|
Math::Vector m_prevEye;
|
||||||
//! Lookat position at the moment of entering CAM_TYPE_INFO/CAM_TYPE_VISIT
|
//! Lookat position at the moment of entering CAM_TYPE_INFO/CAM_TYPE_VISIT
|
||||||
Math::Vector m_normLookat;
|
Math::Vector m_prevLookat;
|
||||||
|
|
||||||
float m_focus;
|
float m_focus;
|
||||||
|
|
||||||
//! CAM_TYPE_FREE: eye
|
//! CAM_TYPE_FREE: eye
|
||||||
Math::Vector m_eyePt;
|
Math::Vector m_eyePt;
|
||||||
|
@ -315,19 +338,18 @@ protected:
|
||||||
|
|
||||||
//! CAM_TYPE_BACK: distance
|
//! CAM_TYPE_BACK: distance
|
||||||
float m_backDist;
|
float m_backDist;
|
||||||
//! CAM_TYPE_BACK: distance minimal
|
//! CAM_TYPE_BACK: minimal distance
|
||||||
float m_backMin;
|
float m_backMin;
|
||||||
//! CAM_TYPE_BACK: additional direction
|
//! CAM_TYPE_BACK: additional horizontal direction
|
||||||
float m_addDirectionH;
|
float m_addDirectionH;
|
||||||
//! CAM_TYPE_BACK: additional direction
|
//! CAM_TYPE_BACK: additional vertical direction
|
||||||
float m_addDirectionV;
|
float m_addDirectionV;
|
||||||
bool m_transparency;
|
|
||||||
|
|
||||||
//! CAM_TYPE_FIX: distance
|
//! CAM_TYPE_FIX: distance
|
||||||
float m_fixDist;
|
float m_fixDist;
|
||||||
//! CAM_TYPE_FIX: direction
|
//! CAM_TYPE_FIX: horizontal direction
|
||||||
float m_fixDirectionH;
|
float m_fixDirectionH;
|
||||||
//! CAM_TYPE_FIX: direction
|
//! CAM_TYPE_FIX: vertical direction
|
||||||
float m_fixDirectionV;
|
float m_fixDirectionV;
|
||||||
|
|
||||||
//! CAM_TYPE_VISIT: target position
|
//! CAM_TYPE_VISIT: target position
|
||||||
|
@ -341,12 +363,13 @@ protected:
|
||||||
//! CAM_TYPE_VISIT: direction
|
//! CAM_TYPE_VISIT: direction
|
||||||
float m_visitDirectionV;
|
float m_visitDirectionV;
|
||||||
|
|
||||||
float m_remotePan;
|
|
||||||
|
|
||||||
//! Last known mouse position, used to calculate change since last frame
|
//! Last known mouse position, used to calculate change since last frame
|
||||||
Math::Point m_mousePos = Math::Point(0.5f, 0.5f);
|
Math::Point m_mousePos = Math::Point(0.5f, 0.5f);
|
||||||
|
//! Change of mouse position since last frame
|
||||||
Math::Point m_mouseDelta = Math::Point(0.0f, 0.0f);
|
Math::Point m_mouseDelta = Math::Point(0.0f, 0.0f);
|
||||||
|
//! Change of camera position caused by edge camera
|
||||||
Math::Point m_mouseDeltaEdge = Math::Point(0.0f, 0.0f);
|
Math::Point m_mouseDeltaEdge = Math::Point(0.0f, 0.0f);
|
||||||
|
//! Change of mouse wheel since last frame
|
||||||
float m_mouseWheelDelta = 0.0f;
|
float m_mouseWheelDelta = 0.0f;
|
||||||
|
|
||||||
CenteringPhase m_centeringPhase;
|
CenteringPhase m_centeringPhase;
|
||||||
|
@ -376,19 +399,17 @@ protected:
|
||||||
Math::Vector m_scriptEye;
|
Math::Vector m_scriptEye;
|
||||||
Math::Vector m_scriptLookat;
|
Math::Vector m_scriptLookat;
|
||||||
|
|
||||||
//! Shocks if explosion?
|
|
||||||
bool m_effect;
|
|
||||||
//! Blood?
|
|
||||||
bool m_blood;
|
|
||||||
//! Scroll in the edges?
|
|
||||||
bool m_oldCameraScroll;
|
|
||||||
//! X inversion in the edges?
|
|
||||||
bool m_cameraInvertX;
|
|
||||||
//! Y inversion in the edges?
|
|
||||||
bool m_cameraInvertY;
|
|
||||||
|
|
||||||
//! Is camera frozen?
|
//! Is camera frozen?
|
||||||
bool m_freeze = false;
|
bool m_freeze = false;
|
||||||
|
|
||||||
|
//! \name Configuration settings
|
||||||
|
//@{
|
||||||
|
bool m_effect;
|
||||||
|
bool m_blood;
|
||||||
|
bool m_oldCameraScroll;
|
||||||
|
bool m_cameraInvertX;
|
||||||
|
bool m_cameraInvertY;
|
||||||
|
//@}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -18,7 +18,7 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* \file graphics/opengl/gldevice.h
|
* \file graphics/opengl/gl21device.h
|
||||||
* \brief OpenGL implementation - CGL21Device class
|
* \brief OpenGL implementation - CGL21Device class
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
|
@ -95,9 +95,7 @@ bool CMainMovie::Start(MainMovieType type, float time)
|
||||||
m_camera->GetCamera(m_initialEye, m_initialLookat);
|
m_camera->GetCamera(m_initialEye, m_initialLookat);
|
||||||
m_camera->SetType(Gfx::CAM_TYPE_SCRIPT);
|
m_camera->SetType(Gfx::CAM_TYPE_SCRIPT);
|
||||||
m_camera->SetSmooth(Gfx::CAM_SMOOTH_HARD);
|
m_camera->SetSmooth(Gfx::CAM_SMOOTH_HARD);
|
||||||
m_camera->SetScriptEye(m_initialEye);
|
m_camera->SetScriptCamera(m_initialEye, m_initialLookat);
|
||||||
m_camera->SetScriptLookat(m_initialLookat);
|
|
||||||
m_camera->FixCamera();
|
|
||||||
|
|
||||||
mat = pObj->GetWorldMatrix(0);
|
mat = pObj->GetWorldMatrix(0);
|
||||||
m_finalLookat[0] = Math::Transform(*mat, Math::Vector( 1.6f, 1.0f, 1.2f));
|
m_finalLookat[0] = Math::Transform(*mat, Math::Vector( 1.6f, 1.0f, 1.2f));
|
||||||
|
@ -187,9 +185,7 @@ bool CMainMovie::EventProcess(const Event &event)
|
||||||
|
|
||||||
eye = (finalEye-initialEye)*progress+initialEye;
|
eye = (finalEye-initialEye)*progress+initialEye;
|
||||||
lookat = (finalLookat-initialLookat)*progress+initialLookat;
|
lookat = (finalLookat-initialLookat)*progress+initialLookat;
|
||||||
m_camera->SetScriptEye(eye);
|
m_camera->SetScriptCameraAnimate(eye, lookat);
|
||||||
m_camera->SetScriptLookat(lookat);
|
|
||||||
// m_camera->FixCamera();
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|
|
@ -239,9 +239,6 @@ CRobotMain::CRobotMain()
|
||||||
|
|
||||||
m_shotSaving = 0;
|
m_shotSaving = 0;
|
||||||
|
|
||||||
m_cameraPan = 0.0f;
|
|
||||||
m_cameraZoom = 0.0f;
|
|
||||||
|
|
||||||
m_build = 0;
|
m_build = 0;
|
||||||
m_researchDone.clear(); // no research done
|
m_researchDone.clear(); // no research done
|
||||||
m_researchDone[0] = 0;
|
m_researchDone[0] = 0;
|
||||||
|
@ -459,8 +456,6 @@ void CRobotMain::ChangePhase(Phase phase)
|
||||||
m_camera->SetType(Gfx::CAM_TYPE_NULL);
|
m_camera->SetType(Gfx::CAM_TYPE_NULL);
|
||||||
m_movie->Flush();
|
m_movie->Flush();
|
||||||
m_movieInfoIndex = -1;
|
m_movieInfoIndex = -1;
|
||||||
m_cameraPan = 0.0f;
|
|
||||||
m_cameraZoom = 0.0f;
|
|
||||||
m_shortCut = true;
|
m_shortCut = true;
|
||||||
}
|
}
|
||||||
ClearInterface();
|
ClearInterface();
|
||||||
|
@ -677,7 +672,6 @@ bool CRobotMain::ProcessEvent(Event &event)
|
||||||
}
|
}
|
||||||
|
|
||||||
m_displayText->EventProcess(event);
|
m_displayText->EventProcess(event);
|
||||||
RemoteCamera(m_cameraPan, m_cameraZoom, event.rTime);
|
|
||||||
|
|
||||||
if (m_displayInfo != nullptr) // current edition?
|
if (m_displayInfo != nullptr) // current edition?
|
||||||
m_displayInfo->EventProcess(event);
|
m_displayInfo->EventProcess(event);
|
||||||
|
@ -852,7 +846,6 @@ bool CRobotMain::ProcessEvent(Event &event)
|
||||||
{
|
{
|
||||||
auto data = event.GetData<KeyEventData>();
|
auto data = event.GetData<KeyEventData>();
|
||||||
|
|
||||||
KeyCamera(event.type, data->slot);
|
|
||||||
HiliteClear();
|
HiliteClear();
|
||||||
if (m_editLock) // current edition?
|
if (m_editLock) // current edition?
|
||||||
{
|
{
|
||||||
|
@ -999,13 +992,6 @@ bool CRobotMain::ProcessEvent(Event &event)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
case EVENT_KEY_UP:
|
|
||||||
{
|
|
||||||
auto data = event.GetData<KeyEventData>();
|
|
||||||
KeyCamera(event.type, data->slot);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
case EVENT_MOUSE_BUTTON_DOWN:
|
case EVENT_MOUSE_BUTTON_DOWN:
|
||||||
{
|
{
|
||||||
if (event.GetData<MouseButtonEventData>()->button != MOUSE_BUTTON_LEFT) // only left mouse button
|
if (event.GetData<MouseButtonEventData>()->button != MOUSE_BUTTON_LEFT) // only left mouse button
|
||||||
|
@ -1032,14 +1018,6 @@ bool CRobotMain::ProcessEvent(Event &event)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
case EVENT_MOUSE_BUTTON_UP:
|
|
||||||
if (event.GetData<MouseButtonEventData>()->button != MOUSE_BUTTON_LEFT) // only left mouse button
|
|
||||||
break;
|
|
||||||
|
|
||||||
m_cameraPan = 0.0f;
|
|
||||||
m_cameraZoom = 0.0f;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case EVENT_OBJECT_LIMIT:
|
case EVENT_OBJECT_LIMIT:
|
||||||
StartShowLimit();
|
StartShowLimit();
|
||||||
break;
|
break;
|
||||||
|
@ -1057,19 +1035,6 @@ bool CRobotMain::ProcessEvent(Event &event)
|
||||||
ChangeCamera();
|
ChangeCamera();
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case EVENT_OBJECT_CAMERAleft:
|
|
||||||
m_cameraPan = -1.0f;
|
|
||||||
break;
|
|
||||||
case EVENT_OBJECT_CAMERAright:
|
|
||||||
m_cameraPan = 1.0f;
|
|
||||||
break;
|
|
||||||
case EVENT_OBJECT_CAMERAnear:
|
|
||||||
m_cameraZoom = -1.0f;
|
|
||||||
break;
|
|
||||||
case EVENT_OBJECT_CAMERAaway:
|
|
||||||
m_cameraZoom = 1.0f;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case EVENT_OBJECT_DELETE:
|
case EVENT_OBJECT_DELETE:
|
||||||
m_ui->GetDialog()->StartQuestion(
|
m_ui->GetDialog()->StartQuestion(
|
||||||
RT_DIALOG_DELOBJ, true, false, false,
|
RT_DIALOG_DELOBJ, true, false, false,
|
||||||
|
@ -1851,7 +1816,6 @@ void CRobotMain::SelectOneObject(CObject* obj, bool displayError)
|
||||||
type == OBJECT_APOLLO2 )
|
type == OBJECT_APOLLO2 )
|
||||||
{
|
{
|
||||||
m_camera->SetType(dynamic_cast<CControllableObject*>(obj)->GetCameraType());
|
m_camera->SetType(dynamic_cast<CControllableObject*>(obj)->GetCameraType());
|
||||||
m_camera->SetDist(dynamic_cast<CControllableObject*>(obj)->GetCameraDist());
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -2323,84 +2287,6 @@ void CRobotMain::ChangeCamera()
|
||||||
m_camera->SetType(type);
|
m_camera->SetType(type);
|
||||||
}
|
}
|
||||||
|
|
||||||
//! Remote control the camera using the arrow keys
|
|
||||||
void CRobotMain::KeyCamera(EventType event, InputSlot key)
|
|
||||||
{
|
|
||||||
if (event == EVENT_KEY_UP)
|
|
||||||
{
|
|
||||||
if (key == INPUT_SLOT_LEFT)
|
|
||||||
{
|
|
||||||
m_cameraPan = 0.0f;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (key == INPUT_SLOT_RIGHT)
|
|
||||||
{
|
|
||||||
m_cameraPan = 0.0f;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (key == INPUT_SLOT_UP)
|
|
||||||
{
|
|
||||||
m_cameraZoom = 0.0f;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (key == INPUT_SLOT_DOWN)
|
|
||||||
{
|
|
||||||
m_cameraZoom = 0.0f;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (m_phase != PHASE_SIMUL) return;
|
|
||||||
if (m_editLock) return; // current edition?
|
|
||||||
if (m_trainerPilot) return;
|
|
||||||
|
|
||||||
CObject* obj = GetSelect();
|
|
||||||
if (obj == nullptr) return;
|
|
||||||
assert(obj->Implements(ObjectInterfaceType::Controllable));
|
|
||||||
if (!dynamic_cast<CControllableObject*>(obj)->GetTrainer()) return;
|
|
||||||
|
|
||||||
if (event == EVENT_KEY_DOWN)
|
|
||||||
{
|
|
||||||
if (key == INPUT_SLOT_LEFT)
|
|
||||||
{
|
|
||||||
m_cameraPan = -1.0f;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (key == INPUT_SLOT_RIGHT)
|
|
||||||
{
|
|
||||||
m_cameraPan = 1.0f;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (key == INPUT_SLOT_UP)
|
|
||||||
{
|
|
||||||
m_cameraZoom = -1.0f;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (key == INPUT_SLOT_DOWN)
|
|
||||||
{
|
|
||||||
m_cameraZoom = 1.0f;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
//! Panned with the camera if a button is pressed
|
|
||||||
void CRobotMain::RemoteCamera(float pan, float zoom, float rTime)
|
|
||||||
{
|
|
||||||
if (pan != 0.0f)
|
|
||||||
{
|
|
||||||
float value = m_camera->GetRemotePan();
|
|
||||||
value += pan*rTime*1.5f;
|
|
||||||
m_camera->SetRemotePan(value);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (zoom != 0.0f)
|
|
||||||
{
|
|
||||||
float value = m_camera->GetRemoteZoom();
|
|
||||||
value += zoom*rTime*0.3f;
|
|
||||||
m_camera->SetRemoteZoom(value);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
//! Cancels the current movie
|
//! Cancels the current movie
|
||||||
void CRobotMain::AbortMovie()
|
void CRobotMain::AbortMovie()
|
||||||
|
@ -3660,8 +3546,6 @@ void CRobotMain::CreateScene(bool soluce, bool fixScene, bool resetObject)
|
||||||
|
|
||||||
if (line->GetParam("fadeIn")->AsBool(false))
|
if (line->GetParam("fadeIn")->AsBool(false))
|
||||||
m_camera->StartOver(Gfx::CAM_OVER_EFFECT_FADEIN_WHITE, Math::Vector(0.0f, 0.0f, 0.0f), 1.0f);
|
m_camera->StartOver(Gfx::CAM_OVER_EFFECT_FADEIN_WHITE, Math::Vector(0.0f, 0.0f, 0.0f), 1.0f);
|
||||||
|
|
||||||
m_camera->SetFixDirectionH(line->GetParam("fixDirection")->AsFloat(0.25f)*Math::PI);
|
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -3822,7 +3706,6 @@ void CRobotMain::CreateScene(bool soluce, bool fixScene, bool resetObject)
|
||||||
{
|
{
|
||||||
Math::Vector pos = sel->GetPosition();
|
Math::Vector pos = sel->GetPosition();
|
||||||
m_camera->Init(pos, pos, 0.0f);
|
m_camera->Init(pos, pos, 0.0f);
|
||||||
m_camera->FixCamera();
|
|
||||||
|
|
||||||
SelectObject(sel);
|
SelectObject(sel);
|
||||||
m_camera->SetControllingObject(sel);
|
m_camera->SetControllingObject(sel);
|
||||||
|
@ -5971,9 +5854,6 @@ void CRobotMain::SetCodeBattleSpectatorMode(bool mode)
|
||||||
|
|
||||||
m_codeBattleSpectator = mode;
|
m_codeBattleSpectator = mode;
|
||||||
SelectObject(obj, false); // this uses code battle selection mode already
|
SelectObject(obj, false); // this uses code battle selection mode already
|
||||||
|
|
||||||
if (mode)
|
|
||||||
m_camera->SetFixDirectionV(-0.25f*Math::PI);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void CRobotMain::UpdateDebugCrashSpheres()
|
void CRobotMain::UpdateDebugCrashSpheres()
|
||||||
|
|
|
@ -390,8 +390,6 @@ protected:
|
||||||
void ClearTooltip();
|
void ClearTooltip();
|
||||||
CObject* DetectObject(Math::Point pos);
|
CObject* DetectObject(Math::Point pos);
|
||||||
void ChangeCamera();
|
void ChangeCamera();
|
||||||
void RemoteCamera(float pan, float zoom, float rTime);
|
|
||||||
void KeyCamera(EventType event, InputSlot key);
|
|
||||||
void AbortMovie();
|
void AbortMovie();
|
||||||
void SelectOneObject(CObject* obj, bool displayError=true);
|
void SelectOneObject(CObject* obj, bool displayError=true);
|
||||||
void HelpObject();
|
void HelpObject();
|
||||||
|
@ -535,9 +533,6 @@ protected:
|
||||||
|
|
||||||
std::vector<NewScriptName> m_newScriptName;
|
std::vector<NewScriptName> m_newScriptName;
|
||||||
|
|
||||||
float m_cameraPan = 0.0f;
|
|
||||||
float m_cameraZoom = 0.0f;
|
|
||||||
|
|
||||||
EventType m_visitLast = EVENT_NULL;
|
EventType m_visitLast = EVENT_NULL;
|
||||||
CObject* m_visitObject = nullptr;
|
CObject* m_visitObject = nullptr;
|
||||||
CObject* m_visitArrow = nullptr;
|
CObject* m_visitArrow = nullptr;
|
||||||
|
|
|
@ -170,7 +170,6 @@ begin:
|
||||||
{
|
{
|
||||||
assert(pObj->Implements(ObjectInterfaceType::Controllable));
|
assert(pObj->Implements(ObjectInterfaceType::Controllable));
|
||||||
m_camera->SetType(dynamic_cast<CControllableObject*>(pObj)->GetCameraType());
|
m_camera->SetType(dynamic_cast<CControllableObject*>(pObj)->GetCameraType());
|
||||||
m_camera->SetDist(dynamic_cast<CControllableObject*>(pObj)->GetCameraDist());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
m_main->StartMusic();
|
m_main->StartMusic();
|
||||||
|
@ -203,18 +202,17 @@ begin:
|
||||||
|
|
||||||
m_camera->SetType(Gfx::CAM_TYPE_SCRIPT);
|
m_camera->SetType(Gfx::CAM_TYPE_SCRIPT);
|
||||||
|
|
||||||
pos = m_pos;
|
Math::Vector eye = m_pos;
|
||||||
pos.x -= 150.0f;
|
eye.x -= 150.0f;
|
||||||
m_terrain->AdjustToFloor(pos);
|
m_terrain->AdjustToFloor(eye);
|
||||||
pos.y += 10.0f;
|
eye.y += 10.0f;
|
||||||
m_camera->SetScriptEye(pos);
|
|
||||||
m_posSound = pos;
|
|
||||||
|
|
||||||
pos = m_object->GetPosition();
|
Math::Vector lookat = m_object->GetPosition();
|
||||||
pos.y += 300.0f+50.0f;
|
lookat.y += 300.0f+50.0f;
|
||||||
m_camera->SetScriptLookat(pos);
|
|
||||||
|
m_camera->SetScriptCamera(eye, lookat);
|
||||||
|
m_posSound = eye;
|
||||||
|
|
||||||
m_camera->FixCamera();
|
|
||||||
m_engine->SetFocus(2.0f);
|
m_engine->SetFocus(2.0f);
|
||||||
|
|
||||||
m_engine->SetFogStart(0.9f);
|
m_engine->SetFogStart(0.9f);
|
||||||
|
@ -266,9 +264,8 @@ begin:
|
||||||
pos.x += 1000.0f;
|
pos.x += 1000.0f;
|
||||||
pos.z -= 60.0f;
|
pos.z -= 60.0f;
|
||||||
pos.y += 80.0f;
|
pos.y += 80.0f;
|
||||||
m_camera->SetScriptEye(pos);
|
|
||||||
m_posSound = pos;
|
m_posSound = pos;
|
||||||
m_camera->FixCamera();
|
m_camera->SetScriptCamera(pos, Math::Vector(0.0f, 0.0f, 0.0f));
|
||||||
m_engine->SetFocus(1.0f);
|
m_engine->SetFocus(1.0f);
|
||||||
|
|
||||||
BeginTransit();
|
BeginTransit();
|
||||||
|
@ -345,15 +342,15 @@ begin:
|
||||||
vibCir *= Math::Min(1.0f, (1.0f-m_progress)*3.0f);
|
vibCir *= Math::Min(1.0f, (1.0f-m_progress)*3.0f);
|
||||||
m_object->SetCirVibration(vibCir);
|
m_object->SetCirVibration(vibCir);
|
||||||
|
|
||||||
pos = m_pos;
|
Math::Vector eye = m_pos;
|
||||||
pos.x -= 150.0f;
|
eye.x -= 150.0f;
|
||||||
m_terrain->AdjustToFloor(pos);
|
m_terrain->AdjustToFloor(eye);
|
||||||
pos.y += 10.0f;
|
eye.y += 10.0f;
|
||||||
m_camera->SetScriptEye(pos);
|
|
||||||
|
|
||||||
pos = m_object->GetPosition();
|
Math::Vector lookat = m_object->GetPosition();
|
||||||
pos.y += 50.0f;
|
lookat.y += 50.0f;
|
||||||
m_camera->SetScriptLookat(pos);
|
|
||||||
|
m_camera->SetScriptCameraAnimate(eye, lookat);
|
||||||
|
|
||||||
m_engine->SetFocus(1.0f+(1.0f-m_progress));
|
m_engine->SetFocus(1.0f+(1.0f-m_progress));
|
||||||
|
|
||||||
|
@ -494,7 +491,7 @@ begin:
|
||||||
m_terrain->AdjustToFloor(pos);
|
m_terrain->AdjustToFloor(pos);
|
||||||
pos.y += 10.0f;
|
pos.y += 10.0f;
|
||||||
pos.y += m_progress*40.0f;
|
pos.y += m_progress*40.0f;
|
||||||
m_camera->SetScriptEye(pos);
|
m_camera->SetScriptCameraAnimateEye(pos);
|
||||||
|
|
||||||
m_engine->SetFogStart(0.9f-(0.9f-m_fogStart)*m_progress);
|
m_engine->SetFogStart(0.9f-(0.9f-m_fogStart)*m_progress);
|
||||||
}
|
}
|
||||||
|
@ -556,7 +553,7 @@ begin:
|
||||||
m_terrain->AdjustToFloor(pos);
|
m_terrain->AdjustToFloor(pos);
|
||||||
pos.y += 10.0f;
|
pos.y += 10.0f;
|
||||||
pos.y += m_progress*40.0f;
|
pos.y += m_progress*40.0f;
|
||||||
m_camera->SetScriptEye(pos);
|
m_camera->SetScriptCameraAnimateEye(pos);
|
||||||
|
|
||||||
m_engine->SetFogStart(0.9f-(0.9f-m_fogStart)*m_progress);
|
m_engine->SetFogStart(0.9f-(0.9f-m_fogStart)*m_progress);
|
||||||
}
|
}
|
||||||
|
@ -598,7 +595,6 @@ begin:
|
||||||
{
|
{
|
||||||
assert(pObj->Implements(ObjectInterfaceType::Controllable));
|
assert(pObj->Implements(ObjectInterfaceType::Controllable));
|
||||||
m_camera->SetType(dynamic_cast<CControllableObject*>(pObj)->GetCameraType());
|
m_camera->SetType(dynamic_cast<CControllableObject*>(pObj)->GetCameraType());
|
||||||
m_camera->SetDist(dynamic_cast<CControllableObject*>(pObj)->GetCameraDist());
|
|
||||||
}
|
}
|
||||||
m_sound->Play(SOUND_BOUM, m_object->GetPosition());
|
m_sound->Play(SOUND_BOUM, m_object->GetPosition());
|
||||||
m_soundChannel = -1;
|
m_soundChannel = -1;
|
||||||
|
@ -749,15 +745,15 @@ begin:
|
||||||
vibCir.y = 0.0f;
|
vibCir.y = 0.0f;
|
||||||
m_object->SetCirVibration(vibCir);
|
m_object->SetCirVibration(vibCir);
|
||||||
|
|
||||||
pos = m_pos;
|
Math::Vector eye = m_pos;
|
||||||
pos.x -= 110.0f+m_progress*250.0f;
|
eye.x -= 110.0f+m_progress*250.0f;
|
||||||
m_terrain->AdjustToFloor(pos);
|
m_terrain->AdjustToFloor(eye);
|
||||||
pos.y += 10.0f;
|
eye.y += 10.0f;
|
||||||
m_camera->SetScriptEye(pos);
|
|
||||||
|
|
||||||
pos = m_object->GetPosition();
|
Math::Vector lookat = m_object->GetPosition();
|
||||||
pos.y += 50.0f;
|
lookat.y += 50.0f;
|
||||||
m_camera->SetScriptLookat(pos);
|
|
||||||
|
m_camera->SetScriptCameraAnimate(eye, lookat);
|
||||||
|
|
||||||
m_engine->SetFocus(1.0f+m_progress);
|
m_engine->SetFocus(1.0f+m_progress);
|
||||||
|
|
||||||
|
@ -907,7 +903,7 @@ begin:
|
||||||
pos.x += event.rTime*(2000.0f/BASE_TRANSIT_TIME);
|
pos.x += event.rTime*(2000.0f/BASE_TRANSIT_TIME);
|
||||||
m_object->SetPosition(pos);
|
m_object->SetPosition(pos);
|
||||||
pos.x += 60.0f;
|
pos.x += 60.0f;
|
||||||
m_camera->SetScriptLookat(pos);
|
m_camera->SetScriptCameraAnimateLookat(pos);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -1129,7 +1125,6 @@ bool CAutoBase::Abort()
|
||||||
{
|
{
|
||||||
assert(pObj->Implements(ObjectInterfaceType::Controllable));
|
assert(pObj->Implements(ObjectInterfaceType::Controllable));
|
||||||
m_camera->SetType(dynamic_cast<CControllableObject*>(pObj)->GetCameraType());
|
m_camera->SetType(dynamic_cast<CControllableObject*>(pObj)->GetCameraType());
|
||||||
m_camera->SetDist(dynamic_cast<CControllableObject*>(pObj)->GetCameraDist());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
m_engine->SetFogStart(m_fogStart);
|
m_engine->SetFogStart(m_fogStart);
|
||||||
|
@ -1387,16 +1382,16 @@ Error CAutoBase::TakeOff(bool printMsg)
|
||||||
|
|
||||||
m_camera->SetType(Gfx::CAM_TYPE_SCRIPT);
|
m_camera->SetType(Gfx::CAM_TYPE_SCRIPT);
|
||||||
|
|
||||||
Math::Vector pos = m_pos;
|
Math::Vector eye = m_pos;
|
||||||
pos.x -= 110.0f;
|
eye.x -= 110.0f;
|
||||||
m_terrain->AdjustToFloor(pos);
|
m_terrain->AdjustToFloor(eye);
|
||||||
pos.y += 10.0f;
|
eye.y += 10.0f;
|
||||||
m_camera->SetScriptEye(pos);
|
|
||||||
m_posSound = pos;
|
|
||||||
|
|
||||||
pos = m_object->GetPosition();
|
Math::Vector lookat = m_object->GetPosition();
|
||||||
pos.y += 50.0f;
|
lookat.y += 50.0f;
|
||||||
m_camera->SetScriptLookat(pos);
|
|
||||||
|
m_camera->SetScriptCameraAnimate(eye, lookat);
|
||||||
|
m_posSound = eye;
|
||||||
|
|
||||||
m_engine->SetFocus(1.0f);
|
m_engine->SetFocus(1.0f);
|
||||||
|
|
||||||
|
|
|
@ -164,19 +164,17 @@ bool CAutoPortico::EventProcess(const Event &event)
|
||||||
|
|
||||||
m_camera->SetType(Gfx::CAM_TYPE_SCRIPT);
|
m_camera->SetType(Gfx::CAM_TYPE_SCRIPT);
|
||||||
|
|
||||||
pos = m_startPos;
|
Math::Vector eye = m_startPos;
|
||||||
pos.x += -100.0f;
|
eye.x += -100.0f;
|
||||||
pos.y += 9.0f;
|
eye.y += 9.0f;
|
||||||
pos.z += -200.0f;
|
eye.z += -200.0f;
|
||||||
m_camera->SetScriptEye(pos);
|
|
||||||
|
|
||||||
pos = m_object->GetPosition();
|
Math::Vector lookat = m_object->GetPosition();
|
||||||
pos.x += 0.0f;
|
lookat.x += 0.0f;
|
||||||
pos.y += 10.0f;
|
lookat.y += 10.0f;
|
||||||
pos.z += -40.0f;
|
lookat.z += -40.0f;
|
||||||
m_camera->SetScriptLookat(pos);
|
|
||||||
|
|
||||||
m_camera->FixCamera();
|
m_camera->SetScriptCamera(eye, lookat);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -329,23 +327,20 @@ bool CAutoPortico::EventProcess(const Event &event)
|
||||||
|
|
||||||
if ( m_cameraProgress < 1.0f )
|
if ( m_cameraProgress < 1.0f )
|
||||||
{
|
{
|
||||||
if ( m_cameraProgress < 0.5f )
|
if ( m_cameraProgress >= 0.5f )
|
||||||
{
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
{
|
||||||
pos = m_startPos;
|
pos = m_startPos;
|
||||||
pos.x += -100.0f-(m_cameraProgress-0.5f)*1.0f*120.0f;
|
pos.x += -100.0f-(m_cameraProgress-0.5f)*1.0f*120.0f;
|
||||||
pos.y += 9.0f;
|
pos.y += 9.0f;
|
||||||
pos.z += -200.0f+(m_cameraProgress-0.5f)*1.0f*210.0f;
|
pos.z += -200.0f+(m_cameraProgress-0.5f)*1.0f*210.0f;
|
||||||
m_camera->SetScriptEye(pos);
|
m_camera->SetScriptCameraAnimateEye(pos);
|
||||||
}
|
}
|
||||||
|
|
||||||
pos = m_object->GetPosition();
|
pos = m_object->GetPosition();
|
||||||
pos.x += 0.0f;
|
pos.x += 0.0f;
|
||||||
pos.y += 10.0f;
|
pos.y += 10.0f;
|
||||||
pos.z += -40.0f;
|
pos.z += -40.0f;
|
||||||
m_camera->SetScriptLookat(pos);
|
m_camera->SetScriptCameraAnimateLookat(pos);
|
||||||
}
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
|
|
|
@ -58,10 +58,6 @@ public:
|
||||||
virtual void SetCameraType(Gfx::CameraType type) = 0;
|
virtual void SetCameraType(Gfx::CameraType type) = 0;
|
||||||
//! Return camera type for this object
|
//! Return camera type for this object
|
||||||
virtual Gfx::CameraType GetCameraType() = 0;
|
virtual Gfx::CameraType GetCameraType() = 0;
|
||||||
//! Set camera distance for this object
|
|
||||||
virtual void SetCameraDist(float dist) = 0;
|
|
||||||
//! Return camera distance for this object
|
|
||||||
virtual float GetCameraDist() = 0;
|
|
||||||
//! Disallow camera changes
|
//! Disallow camera changes
|
||||||
virtual void SetCameraLock(bool lock) = 0;
|
virtual void SetCameraLock(bool lock) = 0;
|
||||||
//! Check if camera changes are disallowed
|
//! Check if camera changes are disallowed
|
||||||
|
|
|
@ -150,7 +150,6 @@ COldObject::COldObject(int id)
|
||||||
m_character.wheelRight = 1.0f;
|
m_character.wheelRight = 1.0f;
|
||||||
|
|
||||||
m_cameraType = Gfx::CAM_TYPE_BACK;
|
m_cameraType = Gfx::CAM_TYPE_BACK;
|
||||||
m_cameraDist = 50.0f;
|
|
||||||
m_bCameraLock = false;
|
m_bCameraLock = false;
|
||||||
|
|
||||||
for (int i=0 ; i<OBJECTMAXPART ; i++ )
|
for (int i=0 ; i<OBJECTMAXPART ; i++ )
|
||||||
|
@ -1031,7 +1030,6 @@ void COldObject::Read(CLevelParserLine* line)
|
||||||
|
|
||||||
if (line->GetParam("camera")->IsDefined())
|
if (line->GetParam("camera")->IsDefined())
|
||||||
SetCameraType(line->GetParam("camera")->AsCameraType());
|
SetCameraType(line->GetParam("camera")->AsCameraType());
|
||||||
SetCameraDist(line->GetParam("cameraDist")->AsFloat(50.0f));
|
|
||||||
SetCameraLock(line->GetParam("cameraLock")->AsBool(false));
|
SetCameraLock(line->GetParam("cameraLock")->AsBool(false));
|
||||||
|
|
||||||
if (line->GetParam("pyro")->IsDefined())
|
if (line->GetParam("pyro")->IsDefined())
|
||||||
|
@ -2499,16 +2497,6 @@ Gfx::CameraType COldObject::GetCameraType()
|
||||||
return m_cameraType;
|
return m_cameraType;
|
||||||
}
|
}
|
||||||
|
|
||||||
void COldObject::SetCameraDist(float dist)
|
|
||||||
{
|
|
||||||
m_cameraDist = dist;
|
|
||||||
}
|
|
||||||
|
|
||||||
float COldObject::GetCameraDist()
|
|
||||||
{
|
|
||||||
return m_cameraDist;
|
|
||||||
}
|
|
||||||
|
|
||||||
void COldObject::SetCameraLock(bool lock)
|
void COldObject::SetCameraLock(bool lock)
|
||||||
{
|
{
|
||||||
m_bCameraLock = lock;
|
m_bCameraLock = lock;
|
||||||
|
|
|
@ -218,8 +218,6 @@ public:
|
||||||
|
|
||||||
void SetCameraType(Gfx::CameraType type) override;
|
void SetCameraType(Gfx::CameraType type) override;
|
||||||
Gfx::CameraType GetCameraType() override;
|
Gfx::CameraType GetCameraType() override;
|
||||||
void SetCameraDist(float dist) override;
|
|
||||||
float GetCameraDist() override;
|
|
||||||
void SetCameraLock(bool lock) override;
|
void SetCameraLock(bool lock) override;
|
||||||
bool GetCameraLock() override;
|
bool GetCameraLock() override;
|
||||||
|
|
||||||
|
@ -351,7 +349,6 @@ protected:
|
||||||
float m_gunGoalV;
|
float m_gunGoalV;
|
||||||
float m_gunGoalH;
|
float m_gunGoalH;
|
||||||
Gfx::CameraType m_cameraType;
|
Gfx::CameraType m_cameraType;
|
||||||
float m_cameraDist;
|
|
||||||
bool m_bCameraLock;
|
bool m_bCameraLock;
|
||||||
float m_magnifyDamage;
|
float m_magnifyDamage;
|
||||||
|
|
||||||
|
|
|
@ -1324,26 +1324,6 @@ bool CObjectInterface::CreateInterface(bool bSelect)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( m_object->GetToy() && !m_object->GetManual() )
|
|
||||||
{
|
|
||||||
pos.x = ox+sx*9.0f;
|
|
||||||
pos.y = oy+sy*0;
|
|
||||||
pb = pw->CreateButton(pos, dim, 55, EVENT_OBJECT_CAMERAleft);
|
|
||||||
pb->SetImmediat(true);
|
|
||||||
pos.x = ox+sx*11.0f;
|
|
||||||
pos.y = oy+sy*0;
|
|
||||||
pb = pw->CreateButton(pos, dim, 48, EVENT_OBJECT_CAMERAright);
|
|
||||||
pb->SetImmediat(true);
|
|
||||||
pos.x = ox+sx*10.0f;
|
|
||||||
pos.y = oy+sy*1;
|
|
||||||
pb = pw->CreateButton(pos, dim, 49, EVENT_OBJECT_CAMERAnear);
|
|
||||||
pb->SetImmediat(true);
|
|
||||||
pos.x = ox+sx*10.0f;
|
|
||||||
pos.y = oy+sy*0;
|
|
||||||
pb = pw->CreateButton(pos, dim, 50, EVENT_OBJECT_CAMERAaway);
|
|
||||||
pb->SetImmediat(true);
|
|
||||||
}
|
|
||||||
|
|
||||||
pos.x = ox+sx*13.4f;
|
pos.x = ox+sx*13.4f;
|
||||||
pos.y = oy+sy*0;
|
pos.y = oy+sy*0;
|
||||||
if ( m_object->GetTrainer() ) // Training?
|
if ( m_object->GetTrainer() ) // Training?
|
||||||
|
|
|
@ -619,21 +619,17 @@ void CScreenApperance::CameraPerso()
|
||||||
{
|
{
|
||||||
Gfx::CCamera* camera = m_main->GetCamera();
|
Gfx::CCamera* camera = m_main->GetCamera();
|
||||||
|
|
||||||
|
camera->SetType(Gfx::CAM_TYPE_SCRIPT);
|
||||||
if ( m_apperanceTab == 0 )
|
if ( m_apperanceTab == 0 )
|
||||||
{
|
{
|
||||||
//? camera->Init(Math::Vector(4.0f, 0.0f, 0.0f),
|
camera->SetScriptCamera(Math::Vector(6.0f, 0.0f, 0.0f),
|
||||||
//? Math::Vector(0.0f, 0.0f, 1.0f), 0.0f);
|
Math::Vector(0.0f, 0.2f, 1.5f));
|
||||||
camera->Init(Math::Vector(6.0f, 0.0f, 0.0f),
|
|
||||||
Math::Vector(0.0f, 0.2f, 1.5f), 0.0f);
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
camera->Init(Math::Vector(18.0f, 0.0f, 4.5f),
|
camera->SetScriptCamera(Math::Vector(18.0f, 0.0f, 4.5f),
|
||||||
Math::Vector(0.0f, 1.6f, 4.5f), 0.0f);
|
Math::Vector(0.0f, 1.6f, 4.5f));
|
||||||
}
|
}
|
||||||
|
|
||||||
camera->SetType(Gfx::CAM_TYPE_SCRIPT);
|
|
||||||
camera->FixCamera();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Sets a fixed color.
|
// Sets a fixed color.
|
||||||
|
|
Loading…
Reference in New Issue