summaryrefslogtreecommitdiffstats
path: root/mazescene.cpp
diff options
context:
space:
mode:
authorSamuel Rødal <sroedal@trolltech.com>2008-11-26 18:36:09 +0100
committerSamuel Rødal <sroedal@trolltech.com>2008-11-26 18:36:09 +0100
commitedc7335943f0758ae8875e42893db1bc5c52d5b2 (patch)
tree0cb8aa58ef9023a13f1a25554998c7f0002ffb37 /mazescene.cpp
parent5d14d37dd49a209e184c023997591d50f1458711 (diff)
Add walking motion.
Diffstat (limited to 'mazescene.cpp')
-rw-r--r--mazescene.cpp16
1 files changed, 12 insertions, 4 deletions
diff --git a/mazescene.cpp b/mazescene.cpp
index addf130..68c2be8 100644
--- a/mazescene.cpp
+++ b/mazescene.cpp
@@ -9,12 +9,15 @@
#include <QTimer>
#include <QWebView>
+#include <qmath.h>
+
MazeScene::MazeScene()
: m_cameraPos(1.5, 1.5)
, m_cameraAngle(0.1)
, m_walkingVelocity(0)
, m_turningVelocity(0)
, m_simulationTime(0)
+ , m_walkTime(0)
, m_dirty(true)
{
m_time.start();
@@ -159,7 +162,7 @@ static inline QTransform rotatingTransform(qreal angle)
return transform;
}
-static void updateTransform(WallItem *item, const QPointF &a, const QPointF &b, const QPointF &cameraPos, qreal cameraAngle)
+static void updateTransform(WallItem *item, const QPointF &a, const QPointF &b, const QPointF &cameraPos, qreal cameraAngle, qreal time)
{
const QTransform rotation = rotatingTransform(cameraAngle);
@@ -177,7 +180,7 @@ static void updateTransform(WallItem *item, const QPointF &a, const QPointF &b,
const qreal tz = 0.5 * (ca.y() + cb.y());
const qreal fov = 0.5;
- QTransform project(mx, 0, mz * fov, 0, 1, 0, tx, 0, tz * fov);
+ QTransform project(mx, 0, mz * fov, 0, 1, 0, tx, 0.04 * qSin(10 * time), tz * fov);
item->setVisible(true);
item->setZValue(-tz);
@@ -230,13 +233,18 @@ void MazeScene::move()
m_cameraPos += m_walkingVelocity * rotatingTransform(-m_cameraAngle).map(QPointF(0, 1));
m_simulationTime += 5;
+ bool walking = m_walkingVelocity != 0;
+ bool turning = m_turningVelocity != 0;
if (!m_dirty)
- m_dirty = (m_turningVelocity != 0 || m_walkingVelocity != 0);
+ m_dirty = turning || walking;
+
+ if (walking)
+ m_walkTime += 5;
}
if (m_dirty) {
foreach (WallItem *item, m_walls)
- updateTransform(item, item->a(), item->b(), m_cameraPos, m_cameraAngle);
+ updateTransform(item, item->a(), item->b(), m_cameraPos, m_cameraAngle, m_walkTime * 0.001);
}
}