From dd6f6e30a0447074c8197934ad0fd8cfcf0e93e4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Georges=20Dup=C3=A9ron?= Date: Fri, 20 Jan 2012 12:31:17 +0100 Subject: [PATCH] Autopilote sur la touche 'E'. --- rules/quartier.cpp | 2 +- view.cpp | 21 ++++++++++++++++++++- view.hh | 1 + 3 files changed, 22 insertions(+), 2 deletions(-) diff --git a/rules/quartier.cpp b/rules/quartier.cpp index d7173a7..d50b487 100644 --- a/rules/quartier.cpp +++ b/rules/quartier.cpp @@ -164,7 +164,7 @@ void QuartierTri::getBoundingBoxPoints() { } bool QuartierTri::split() { - bool small = c.minLength() < 5000; + bool small = c.minLength() < 6000; bool big = c.maxLength() >= 10000; float minAngle = c.minAngle(); float maxAngle = c.maxAngle(); diff --git a/view.cpp b/view.cpp index 058ed92..d1445f9 100644 --- a/view.cpp +++ b/view.cpp @@ -219,7 +219,7 @@ Camera::Camera(Vertex _cameraCenter, float _xAngle, float _yAngle, int _moveSens moveSensitivity(_moveSensitivity), mouseSensitivity(_mouseSensitivity), up(false), down(false), left(false), right(false), - pageUp(false), pageDown(false) + pageUp(false), pageDown(false), autoPilot(false) { } @@ -299,7 +299,11 @@ void Camera::keyboard(const SDL_KeyboardEvent &eventKey) { if (moveSensitivity == 0) moveSensitivity = 300; up = true; break; + case 'e' : + autoPilot = true; + break; case 'z' : + autoPilot = false; up = false; break; case 's': @@ -341,8 +345,23 @@ void Camera::keyboard(const SDL_KeyboardEvent &eventKey) { } void Camera::animation(int elapsedTime) { + static unsigned int frame = 0; + frame++; float diff = ((float)(elapsedTime+1)/1000.f)*(float)moveSensitivity; + if (autoPilot) { + moveSensitivity = 1500; + float dx = floatInRange(frame/16, 42, -0.5, 0.5); + float olddx = floatInRange(frame/16 - 1, 42, -0.5, 0.5); + float mix = ((float)(frame % 16) / 16.f); + xAngle += dx * mix + olddx * (1-mix); + float oldz = cameraCenter.z; + cameraCenter = cameraCenter + Vertex::fromSpherical(diff, yAngle, xAngle); + cameraCenter.z = oldz; + cameraCenter.z += std::min(20.f, std::max(-20.f, 1750 - cameraCenter.z)); + return; + } + if(up) cameraCenter = cameraCenter + Vertex::fromSpherical(diff, yAngle, xAngle); if(down) diff --git a/view.hh b/view.hh index ead2a5b..382ef98 100644 --- a/view.hh +++ b/view.hh @@ -19,6 +19,7 @@ private : bool right; bool pageUp; bool pageDown; + bool autoPilot; public : Camera(Vertex pos, float xA, float yA, int moveSensitivity, float mouseSensitivity);