[colobot] 299/377: Restored old camera scroll as a config option
Didier Raboud
odyx at moszumanska.debian.org
Wed Mar 30 13:34:29 UTC 2016
This is an automated email from the git hooks/post-receive script.
odyx pushed a commit to branch debian/master
in repository colobot.
commit b15666f48e3a53becebaac03765c5ec79c039f6d
Author: krzys-h <krzys_h at interia.pl>
Date: Fri Feb 19 16:46:33 2016 +0100
Restored old camera scroll as a config option
---
po/colobot.pot | 3 +
po/de.po | 9 ++-
po/fr.po | 10 +--
po/pl.po | 10 +--
po/ru.po | 6 +-
src/common/event.cpp | 1 +
src/common/event.h | 1 +
src/common/restext.cpp | 5 +-
src/common/settings.cpp | 4 ++
src/graphics/engine/camera.cpp | 139 ++++++++++++++++++++++++------------
src/graphics/engine/camera.h | 7 +-
src/ui/screen/screen_setup_game.cpp | 15 ++++
12 files changed, 141 insertions(+), 69 deletions(-)
diff --git a/po/colobot.pot b/po/colobot.pot
index e805729..4343aa2 100644
--- a/po/colobot.pot
+++ b/po/colobot.pot
@@ -370,6 +370,9 @@ msgstr ""
msgid "Film sequences\\Films before and after the missions"
msgstr ""
+msgid "Scrolling\\Scrolling when the mouse touches right or left border"
+msgstr ""
+
msgid "Mouse inversion X\\Inversion of the scrolling direction on the X axis"
msgstr ""
diff --git a/po/de.po b/po/de.po
index 7ea5549..3ae02cd 100644
--- a/po/de.po
+++ b/po/de.po
@@ -1311,6 +1311,10 @@ msgstr "Speichern\\Aktuelle Mission speichern"
msgid "Save\\Saves the current mission"
msgstr "Speichern\\Speichert die Mission"
+msgid "Scrolling\\Scrolling when the mouse touches right or left border"
+msgstr ""
+"Kameradrehung mit der Maus\\Die Kamera dreht wenn die Maus den Rand erreicht"
+
msgid "Select the astronaut\\Selects the astronaut"
msgstr "Astronauten auswählen\\Astronauten auswählen"
@@ -1901,11 +1905,6 @@ msgstr "www.epsitec.com"
#~ msgid "Robbie\\Your assistant"
#~ msgstr "Robby\\Ihr Assistent"
-#~ msgid "Scrolling\\Scrolling when the mouse touches right or left border"
-#~ msgstr ""
-#~ "Kameradrehung mit der Maus\\Die Kamera dreht wenn die Maus den Rand "
-#~ "erreicht"
-
#~ msgid "Sky\\Clouds and nebulae"
#~ msgstr "Himmel\\Himmel und Wolken"
diff --git a/po/fr.po b/po/fr.po
index 95cda05..730e849 100644
--- a/po/fr.po
+++ b/po/fr.po
@@ -1299,6 +1299,11 @@ msgstr "Enregistrer\\Enregistrer la mission en cours"
msgid "Save\\Saves the current mission"
msgstr "Enregistrer\\Enregistrer la mission en cours"
+msgid "Scrolling\\Scrolling when the mouse touches right or left border"
+msgstr ""
+"Défilement dans les bords\\Défilement lorsque la souris touches les bords "
+"gauche ou droite"
+
msgid "Select the astronaut\\Selects the astronaut"
msgstr "Sélectionner le cosmonaute\\Sélectionner le cosmonaute"
@@ -1887,11 +1892,6 @@ msgstr "www.epsitec.com"
#~ msgid "Robbie\\Your assistant"
#~ msgstr "Robbie\\Votre assistant"
-#~ msgid "Scrolling\\Scrolling when the mouse touches right or left border"
-#~ msgstr ""
-#~ "Défilement dans les bords\\Défilement lorsque la souris touches les bords "
-#~ "gauche ou droite"
-
#~ msgid "Sky\\Clouds and nebulae"
#~ msgstr "Ciel\\Ciel et nuages"
diff --git a/po/pl.po b/po/pl.po
index 9c509fb..a54a297 100644
--- a/po/pl.po
+++ b/po/pl.po
@@ -1307,6 +1307,11 @@ msgstr "Zapisz\\Zapisuje bieżącą misję"
msgid "Save\\Saves the current mission"
msgstr "Zapisz\\Zapisuje bieżącą misję"
+msgid "Scrolling\\Scrolling when the mouse touches right or left border"
+msgstr ""
+"Przewijanie\\Ekran jest przewijany gdy mysz dotknie prawej lub lewej jego "
+"krawędzi"
+
msgid "Select the astronaut\\Selects the astronaut"
msgstr "Zaznacz astronautę\\Zaznacza astronautę"
@@ -1880,11 +1885,6 @@ msgstr "www.epsitec.com"
#~ msgid "Robbie\\Your assistant"
#~ msgstr "Robbie\\Twój asystent"
-#~ msgid "Scrolling\\Scrolling when the mouse touches right or left border"
-#~ msgstr ""
-#~ "Przewijanie\\Ekran jest przewijany gdy mysz dotknie prawej lub lewej jego "
-#~ "krawędzi"
-
#~ msgid "Sky\\Clouds and nebulae"
#~ msgstr "Niebo\\Chmury i mgławice"
diff --git a/po/ru.po b/po/ru.po
index 3383873..1febf45 100644
--- a/po/ru.po
+++ b/po/ru.po
@@ -1306,6 +1306,9 @@ msgstr "Сохранить\\Сохранить текущую миссию"
msgid "Save\\Saves the current mission"
msgstr "Сохранить\\Сохранить текущую миссию"
+msgid "Scrolling\\Scrolling when the mouse touches right or left border"
+msgstr "Прокрутка\\Прокрутка, когда указатель мыши касается граней экрана"
+
msgid "Select the astronaut\\Selects the astronaut"
msgstr "Выбор астронавта\\Выбор астронавта"
@@ -1893,9 +1896,6 @@ msgstr "www.epsitec.com"
#~ msgid "Robbie\\Your assistant"
#~ msgstr "Робби\\Ваш помощник"
-#~ msgid "Scrolling\\Scrolling when the mouse touches right or left border"
-#~ msgstr "Прокрутка\\Прокрутка, когда указатель мыши касается граней экрана"
-
#~ msgid "Sky\\Clouds and nebulae"
#~ msgstr "Небо\\Облака и туманности"
diff --git a/src/common/event.cpp b/src/common/event.cpp
index b1fb609..ccd7fe8 100644
--- a/src/common/event.cpp
+++ b/src/common/event.cpp
@@ -208,6 +208,7 @@ void InitializeEventTypeTexts()
EVENT_TYPE_TEXT[EVENT_INTERFACE_GLINT] = "EVENT_INTERFACE_GLINT";
EVENT_TYPE_TEXT[EVENT_INTERFACE_TOOLTIP] = "EVENT_INTERFACE_TOOLTIP";
EVENT_TYPE_TEXT[EVENT_INTERFACE_MOVIES] = "EVENT_INTERFACE_MOVIES";
+ EVENT_TYPE_TEXT[EVENT_INTERFACE_SCROLL] = "EVENT_INTERFACE_SCROLL";
EVENT_TYPE_TEXT[EVENT_INTERFACE_INVERTX] = "EVENT_INTERFACE_INVERTX";
EVENT_TYPE_TEXT[EVENT_INTERFACE_INVERTY] = "EVENT_INTERFACE_INVERTY";
EVENT_TYPE_TEXT[EVENT_INTERFACE_EFFECT] = "EVENT_INTERFACE_EFFECT";
diff --git a/src/common/event.h b/src/common/event.h
index f211ba1..50fb0c9 100644
--- a/src/common/event.h
+++ b/src/common/event.h
@@ -237,6 +237,7 @@ enum EventType
EVENT_INTERFACE_GLINT = 463,
EVENT_INTERFACE_TOOLTIP = 464,
EVENT_INTERFACE_MOVIES = 465,
+ EVENT_INTERFACE_SCROLL = 467,
EVENT_INTERFACE_INVERTX = 468,
EVENT_INTERFACE_INVERTY = 469,
EVENT_INTERFACE_EFFECT = 470,
diff --git a/src/common/restext.cpp b/src/common/restext.cpp
index 62a929e..5d3ed29 100644
--- a/src/common/restext.cpp
+++ b/src/common/restext.cpp
@@ -20,8 +20,6 @@
#include "common/restext.h"
-#include "common/config.h"
-
#include "CBot/CBot.h"
#include "app/input.h"
@@ -190,6 +188,7 @@ void InitializeRestext()
stringsEvent[EVENT_INTERFACE_GLINT] = TR("Reflections on the buttons \\Shiny buttons");
stringsEvent[EVENT_INTERFACE_TOOLTIP] = TR("Help balloons\\Explain the function of the buttons");
stringsEvent[EVENT_INTERFACE_MOVIES] = TR("Film sequences\\Films before and after the missions");
+ stringsEvent[EVENT_INTERFACE_SCROLL] = TR("Camera border scrolling\\Scrolling when the mouse touches right or left border");
stringsEvent[EVENT_INTERFACE_INVERTX] = TR("Mouse inversion X\\Inversion of the scrolling direction on the X axis");
stringsEvent[EVENT_INTERFACE_INVERTY] = TR("Mouse inversion Y\\Inversion of the scrolling direction on the Y axis");
stringsEvent[EVENT_INTERFACE_EFFECT] = TR("Quake at explosions\\The screen shakes at explosions");
@@ -764,7 +763,7 @@ void PutKeyName(std::string& dst, const char* src)
src[s+3] == 'y' &&
src[s+4] == ' ' )
{
- int count;
+ unsigned int count;
for(count = 0; src[s+5+count] != ';'; count++);
CInput* input = CInput::GetInstancePointer();
InputSlot key = input->SearchKeyById(std::string(&src[s+5], count));
diff --git a/src/common/settings.cpp b/src/common/settings.cpp
index 2f6ef2c..63258ce 100644
--- a/src/common/settings.cpp
+++ b/src/common/settings.cpp
@@ -80,6 +80,7 @@ void CSettings::SaveSettings()
GetConfigFile().SetBoolProperty("Setup", "Soluce4", m_soluce4);
GetConfigFile().SetBoolProperty("Setup", "Movies", m_movies);
GetConfigFile().SetBoolProperty("Setup", "FocusLostPause", m_focusLostPause);
+ GetConfigFile().SetBoolProperty("Setup", "OldCameraScroll", camera->GetOldCameraScroll());
GetConfigFile().SetBoolProperty("Setup", "CameraInvertX", camera->GetCameraInvertX());
GetConfigFile().SetBoolProperty("Setup", "CameraInvertY", camera->GetCameraInvertY());
GetConfigFile().SetBoolProperty("Setup", "InterfaceEffect", camera->GetEffect());
@@ -151,6 +152,9 @@ void CSettings::LoadSettings()
GetConfigFile().GetBoolProperty("Setup", "Movies", m_movies);
GetConfigFile().GetBoolProperty("Setup", "FocusLostPause", m_focusLostPause);
+ if (GetConfigFile().GetBoolProperty("Setup", "OldCameraScroll", bValue))
+ camera->SetOldCameraScroll(bValue);
+
if (GetConfigFile().GetBoolProperty("Setup", "CameraInvertX", bValue))
camera->SetCameraInvertX(bValue);
diff --git a/src/graphics/engine/camera.cpp b/src/graphics/engine/camera.cpp
index cc1f24d..9c1a76a 100644
--- a/src/graphics/engine/camera.cpp
+++ b/src/graphics/engine/camera.cpp
@@ -50,6 +50,7 @@
namespace Gfx
{
+const float MOUSE_EDGE_MARGIN = 0.01f;
//! Changes the level of transparency of an object and objects transported (battery & cargo)
void SetTransparency(CObject* obj, float value)
@@ -152,6 +153,7 @@ CCamera::CCamera()
m_effect = true;
m_blood = true;
+ m_oldCameraScroll = false;
m_cameraInvertX = false;
m_cameraInvertY = false;
}
@@ -180,6 +182,16 @@ bool CCamera::GetBlood()
return m_blood;
}
+void CCamera::SetOldCameraScroll(bool scroll)
+{
+ m_oldCameraScroll = scroll;
+}
+
+bool CCamera::GetOldCameraScroll()
+{
+ return m_oldCameraScroll;
+}
+
void CCamera::SetCameraInvertX(bool invert)
{
m_cameraInvertX = invert;
@@ -1068,16 +1080,62 @@ bool CCamera::EventProcess(const Event &event)
bool CCamera::EventMouseMove(const Event &event)
{
- m_mouseDelta += (event.mousePos - m_mousePos);
- if (m_cameraInvertX)
- m_mouseDelta.x = -m_mouseDelta.x;
- if (m_cameraInvertY)
- m_mouseDelta.y = -m_mouseDelta.y;
+ if (m_engine->GetMouseType() == ENG_MOUSE_SCROLLR ||
+ m_engine->GetMouseType() == ENG_MOUSE_SCROLLL ||
+ m_engine->GetMouseType() == ENG_MOUSE_SCROLLU ||
+ 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)
+ {
+ Math::Point newDelta = event.mousePos - m_mousePos;
+ if (m_cameraInvertX)
+ newDelta.x = -newDelta.x;
+ if (m_cameraInvertY)
+ newDelta.y = -newDelta.y;
+ m_mouseDelta += newDelta;
- m_mousePos = event.mousePos;
-
- if (m_mouseRightDown)
m_engine->SetMouseType(ENG_MOUSE_MOVE);
+ }
+
+ 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 ||
+ 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_mousePos = event.mousePos;
return true;
}
@@ -1120,13 +1178,10 @@ void CCamera::EventMouseButton(const Event &event)
{
if (event.type == EVENT_MOUSE_BUTTON_DOWN)
{
- m_mouseRightDown = true;
- m_mouseDelta.LoadZero();
m_engine->SetMouseType(ENG_MOUSE_MOVE);
}
else
{
- m_mouseRightDown = false;
m_engine->SetMouseType(ENG_MOUSE_NORM);
}
}
@@ -1134,6 +1189,13 @@ void CCamera::EventMouseButton(const Event &event)
bool CCamera::EventFrame(const Event &event)
{
+ 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);
@@ -1181,12 +1243,9 @@ bool CCamera::EventFrameFree(const Event &event)
float factor = m_heightEye * 0.5f + 30.0f;
- if ( m_mouseRightDown )
- {
- m_directionH -= m_mouseDelta.x * 2*Math::PI;
- m_eyePt = Math::LookatPoint(m_eyePt, m_directionH, m_directionV, m_mouseDelta.y * factor * m_speed);
- m_mouseDelta.LoadZero();
- }
+ m_directionH -= m_mouseDelta.x * 2*Math::PI;
+ m_eyePt = Math::LookatPoint(m_eyePt, m_directionH, m_directionV, m_mouseDelta.y * factor * m_speed);
+ m_mouseDelta.LoadZero();
// Up/Down
m_eyePt = Math::LookatPoint(m_eyePt, m_directionH, m_directionV, cameraInput.y * event.rTime * factor * m_speed);
@@ -1256,12 +1315,10 @@ bool CCamera::EventFrameEdit(const Event &event)
{
float factor = m_editHeight * 0.5f + 30.0f;
- if (m_mouseRightDown)
- {
- m_directionH -= m_mouseDelta.x * 2*Math::PI;
- m_eyePt = Math::LookatPoint(m_eyePt, m_directionH, m_directionV, m_mouseDelta.y * factor * m_speed);
- m_mouseDelta.LoadZero();
- }
+ m_directionH -= m_mouseDelta.x * 2*Math::PI;
+ m_eyePt = Math::LookatPoint(m_eyePt, m_directionH, m_directionV, m_mouseDelta.y * factor * m_speed);
+ m_mouseDelta.LoadZero();
+
m_fixDirectionH = Math::NormAngle(m_fixDirectionH);
m_terrain->AdjustToBounds(m_eyePt, 10.0f);
@@ -1315,13 +1372,11 @@ bool CCamera::EventFrameBack(const Event &event)
if (m_backDist > 200.0f) m_backDist = 200.0f;
}
- if (m_mouseRightDown)
- {
- m_addDirectionH -= m_mouseDelta.x * 2*Math::PI;
- m_addDirectionH = Math::NormAngle(m_addDirectionH);
- m_mouseDelta.LoadZero();
+ m_addDirectionH -= m_mouseDelta.x * 2*Math::PI;
+ m_addDirectionH = Math::NormAngle(m_addDirectionH);
+ if (m_mouseDelta.Length() > 0)
AbortCentering(); // special stops framing
- }
+ m_mouseDelta.LoadZero();
// Increase the special framework
float centeringH = 0.0f;
@@ -1454,12 +1509,10 @@ bool CCamera::EventFrameFix(const Event &event)
if (m_fixDist > 200.0f) m_fixDist = 200.0f;
}
- if (m_mouseRightDown)
- {
- m_fixDirectionH -= m_mouseDelta.x * 2*Math::PI;
- m_mouseDelta.LoadZero();
+ m_fixDirectionH -= m_mouseDelta.x * 2*Math::PI;
+ if (m_mouseDelta.Length() > 0)
AbortCentering(); // special stops framing
- }
+ m_mouseDelta.LoadZero();
// Left/Right
m_fixDirectionH += event.cameraInput.x * event.rTime * 0.7f * m_speed;
@@ -1493,11 +1546,8 @@ bool CCamera::EventFrameFix(const Event &event)
bool CCamera::EventFrameExplo(const Event &event)
{
- if (m_mouseRightDown)
- {
- m_directionH -= m_mouseDelta.x * 2*Math::PI;
- m_mouseDelta.LoadZero();
- }
+ m_directionH -= m_mouseDelta.x * 2*Math::PI;
+ m_mouseDelta.LoadZero();
m_terrain->AdjustToBounds(m_eyePt, 10.0f);
@@ -1578,13 +1628,10 @@ bool CCamera::EventFrameVisit(const Event &event)
if (m_visitDirectionV > 0.0f ) m_visitDirectionV = 0.0f;
}
- if (m_mouseRightDown)
- {
- m_visitDist -= m_mouseDelta.y * 100.0f * m_speed;
- m_mouseDelta.LoadZero();
- if (m_visitDist < 20.0f) m_visitDist = 20.0f;
- if (m_visitDist > 200.0f) m_visitDist = 200.0f;
- }
+ m_visitDist -= m_mouseDelta.y * 100.0f * m_speed;
+ m_mouseDelta.LoadZero();
+ if (m_visitDist < 20.0f) m_visitDist = 20.0f;
+ if (m_visitDist > 200.0f) m_visitDist = 200.0f;
float angleH = (m_visitTime / 10.0f) * (Math::PI * 2.0f);
float angleV = m_visitDirectionV;
diff --git a/src/graphics/engine/camera.h b/src/graphics/engine/camera.h
index 1cb990e..f00332a 100644
--- a/src/graphics/engine/camera.h
+++ b/src/graphics/engine/camera.h
@@ -204,6 +204,8 @@ public:
bool GetEffect();
void SetBlood(bool enable);
bool GetBlood();
+ void SetOldCameraScroll(bool scroll);
+ bool GetOldCameraScroll();
void SetCameraInvertX(bool invert);
bool GetCameraInvertX();
void SetCameraInvertY(bool invert);
@@ -342,9 +344,10 @@ protected:
float m_remotePan;
- bool m_mouseRightDown = false;
+ //! Last known mouse position, used to calculate change since last frame
Math::Point m_mousePos = Math::Point(0.5f, 0.5f);
Math::Point m_mouseDelta = Math::Point(0.0f, 0.0f);
+ Math::Point m_mouseDeltaEdge = Math::Point(0.0f, 0.0f);
CenteringPhase m_centeringPhase;
float m_centeringAngleH;
@@ -378,7 +381,7 @@ protected:
//! Blood?
bool m_blood;
//! Scroll in the edges?
- bool m_cameraScroll;
+ bool m_oldCameraScroll;
//! X inversion in the edges?
bool m_cameraInvertX;
//! Y inversion in the edges?
diff --git a/src/ui/screen/screen_setup_game.cpp b/src/ui/screen/screen_setup_game.cpp
index c1bce9e..d28a5b6 100644
--- a/src/ui/screen/screen_setup_game.cpp
+++ b/src/ui/screen/screen_setup_game.cpp
@@ -69,6 +69,9 @@ void CScreenSetupGame::CreateInterface()
pc = pw->CreateCheck(pos, ddim, -1, EVENT_INTERFACE_MOVIES);
pc->SetState(STATE_SHADOW);
pos.y -= 0.048f;
+ pc = pw->CreateCheck(pos, ddim, -1, EVENT_INTERFACE_SCROLL);
+ pc->SetState(STATE_SHADOW);
+ pos.y -= 0.048f;
pc = pw->CreateCheck(pos, ddim, -1, EVENT_INTERFACE_INVERTX);
pc->SetState(STATE_SHADOW);
pos.y -= 0.048f;
@@ -210,6 +213,12 @@ bool CScreenSetupGame::EventProcess(const Event &event)
UpdateSetupButtons();
break;
+ case EVENT_INTERFACE_SCROLL:
+ m_camera->SetOldCameraScroll(!m_camera->GetOldCameraScroll());
+ ChangeSetupButtons();
+ UpdateSetupButtons();
+ break;
+
case EVENT_INTERFACE_INVERTX:
m_camera->SetCameraInvertX(!m_camera->GetCameraInvertX());
ChangeSetupButtons();
@@ -313,6 +322,12 @@ void CScreenSetupGame::UpdateSetupButtons()
pc->SetState(STATE_CHECK, m_settings->GetMovies());
}
+ pc = static_cast<CCheck*>(pw->SearchControl(EVENT_INTERFACE_SCROLL));
+ if ( pc != nullptr )
+ {
+ pc->SetState(STATE_CHECK, m_camera->GetOldCameraScroll());
+ }
+
pc = static_cast<CCheck*>(pw->SearchControl(EVENT_INTERFACE_INVERTX));
if ( pc != nullptr )
{
--
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-games/colobot.git
More information about the Pkg-games-commits
mailing list