|
@@ -30,9 +30,7 @@ pointIndex(0), moveSpeed(0.125f), movedLength(0.0f), mode(Mode::AUTO) {
|
|
|
q.mul(Quaternion(Vector(r.nextFloat() * 360.0f, r.nextFloat() * -90.0f), -10.0f));
|
|
|
cameraPoints.add( {v, q, 0.0f});
|
|
|
}
|
|
|
- for(uint i = 0; i < cameraPoints.getLength(); i++) {
|
|
|
- cameraPoints[i].distance = distance(i, 10000);
|
|
|
- }
|
|
|
+ updateDistances();
|
|
|
}
|
|
|
|
|
|
void Game::tick() {
|
|
@@ -81,11 +79,18 @@ void Game::tick() {
|
|
|
if(control.keys.camDown.isDown()) {
|
|
|
rotation.mul(Quaternion(right, -rotationSpeed));
|
|
|
}
|
|
|
+
|
|
|
+ if(control.keys.test3.getDownTime() == 1) {
|
|
|
+ cameraPoints.add( {pos, rotation, 0.0f});
|
|
|
+ }
|
|
|
} else if(mode == Mode::AUTO) {
|
|
|
movedLength += moveSpeed;
|
|
|
|
|
|
if(control.keys.camUp.isDown()) {
|
|
|
moveSpeed += 0.0125f;
|
|
|
+ if(moveSpeed > 1.0f) {
|
|
|
+ moveSpeed = 1.0f;
|
|
|
+ }
|
|
|
}
|
|
|
if(control.keys.camDown.isDown()) {
|
|
|
moveSpeed -= 0.0125f;
|
|
@@ -93,15 +98,21 @@ void Game::tick() {
|
|
|
moveSpeed = 0.0f;
|
|
|
}
|
|
|
}
|
|
|
+
|
|
|
+ if(control.keys.test3.isDown()) {
|
|
|
+ mode = Mode::PLAYER;
|
|
|
+ cameraPoints.clear();
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
if(control.keys.test.isDown()) {
|
|
|
mode = Mode::PLAYER;
|
|
|
}
|
|
|
- if(control.keys.test2.isDown()) {
|
|
|
+ if(control.keys.test2.isDown() && cameraPoints.getLength() >= 3) {
|
|
|
mode = Mode::AUTO;
|
|
|
+ movedLength = 0.0f;
|
|
|
+ updateDistances();
|
|
|
}
|
|
|
-
|
|
|
if(control.keys.test4.getDownTime() == 1) {
|
|
|
renderSettings.shadows = !renderSettings.shadows;
|
|
|
}
|
|
@@ -120,18 +131,13 @@ void Game::renderWorld(float lag, Renderer& renderer) const {
|
|
|
}
|
|
|
float t = leftLength / cameraPoints[index].distance;
|
|
|
Vector interpolatedPos = pointUntilDistance(leftLength, index, 4000);
|
|
|
-
|
|
|
-
|
|
|
+
|
|
|
uint a = index == 0 ? cameraPoints.getLength() - 1 : index - 1;
|
|
|
- uint b = (a + 1) % cameraPoints.getLength();
|
|
|
- uint c = (a + 2) % cameraPoints.getLength();
|
|
|
- uint d = (a + 3) % cameraPoints.getLength();
|
|
|
-
|
|
|
+ uint b = (a + 1) % cameraPoints.getLength();
|
|
|
+ uint c = (a + 2) % cameraPoints.getLength();
|
|
|
+ uint d = (a + 3) % cameraPoints.getLength();
|
|
|
+
|
|
|
renderer.update(interpolatedPos, cameraPoints[b].q.squad(t, cameraPoints[a].q, cameraPoints[c].q, cameraPoints[d].q));
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
pos = interpolatedPos;
|
|
|
} else if(mode == Mode::PLAYER) {
|
|
|
Vector v(lastPos);
|
|
@@ -146,11 +152,9 @@ void Game::renderTextOverlay(float lag, Renderer& renderer, FontRenderer& fr) co
|
|
|
renderer.scale(2.0f).update();
|
|
|
|
|
|
String s;
|
|
|
- fr.drawString(10, 10, s.append("FPS: ").append(fps.getUpdatesPerSecond())
|
|
|
- .append(" ").append("%0.8f", renderSettings.testBias).append(" ").append("%0.8f", renderSettings.testRadius));
|
|
|
- fr.drawString(10, 19, s.clear().append("TPS: ").append(tps.getUpdatesPerSecond()));
|
|
|
- s.clear();
|
|
|
- pos.toString(s);
|
|
|
+ fr.drawString(10, 10, s.append("FPS: ").append(fps.getUpdatesPerSecond()).append(" TPS: ").append(tps.getUpdatesPerSecond()));
|
|
|
+ fr.drawString(10, 19, s.clear().append("Speed: ").append(moveSpeed));
|
|
|
+ pos.toString(s.clear());
|
|
|
fr.drawString(10, 28, s);
|
|
|
for(uint i = 0; i < cameraPoints.getLength(); i++) {
|
|
|
s.clear().append(i + 1).append(": ");
|
|
@@ -233,4 +237,10 @@ void Game::getPointsAndTangents(uint index, Vector& a, Vector& b, Vector& tanA,
|
|
|
|
|
|
tanA = splineTangent(cameraPoints[prev].pos, a, b);
|
|
|
tanB = splineTangent(a, b, cameraPoints[next].pos);
|
|
|
+}
|
|
|
+
|
|
|
+void Game::updateDistances() {
|
|
|
+ for(uint i = 0; i < cameraPoints.getLength(); i++) {
|
|
|
+ cameraPoints[i].distance = distance(i, 10000);
|
|
|
+ }
|
|
|
}
|