00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
#include "WalkNavigation.h"
00013
using namespace OpenCAL::Utils;
00014
00015
#include <math.h>
00016
00017
using namespace std;
00018
00019
00020
00021
00022
00023
00024 WalkNavigation::WalkNavigation(
float walkSpeed,
float runSpeed,
float turnSpeed)
00025 :
Navigation(), m_walkSpeed(walkSpeed), m_runSpeed(runSpeed), m_turnSpeed(turnSpeed)
00026 {
00027 reset();
00028 }
00029
00030 WalkNavigation::~WalkNavigation()
00031 {
00032 }
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042
00043
00044
00045
00046
00047
00048
00049
00050
00051
00052
00053
00054
00055
00056
00057
00058
00059
00060
void WalkNavigation::reset()
00061 {
00062 m_turnAngle = m_lookAngle = 0.0f;
00063 m_position.set(0.0f, 1.8f, 0.0f);
00064 }
00065
00066
00067
00068
00069
00070
00071
void WalkNavigation::move(
float distance)
00072 {
00073 m_position += Vector3(
00074 sinf(Math::degToRad(m_turnAngle)) * distance,
00075 0.0f,
00076 -cosf(Math::degToRad(m_turnAngle)) * distance);
00077 }
00078
00079
void WalkNavigation::strafe(
float distance)
00080 {
00081 m_position += Vector3(
00082 cosf(Math::degToRad(m_turnAngle)) * distance,
00083 0.0f,
00084 sinf(Math::degToRad(m_turnAngle)) * distance);
00085 }
00086
00087
void WalkNavigation::rotate(
float angle)
00088 {
00089 m_turnAngle += angle;
00090
00091
if(m_turnAngle <= 0.0f)
00092 m_turnAngle += 360.0f;
00093
else if(m_turnAngle >= 360.0f)
00094 m_turnAngle -= 360.0f;
00095 }
00096
00097
void WalkNavigation::look(
float angle)
00098 {
00099 m_lookAngle += angle;
00100
00101
if(m_lookAngle < -90.0f)
00102 m_lookAngle = -90.0f;
00103
00104
if(m_lookAngle > 90.0f)
00105 m_lookAngle = 90.0f;
00106 }
00107
00108
void WalkNavigation::walkForward(
float deltaSeconds)
00109 {
00110 move(m_walkSpeed * deltaSeconds);
00111 }
00112
00113
void WalkNavigation::walkBackward(
float deltaSeconds)
00114 {
00115 move(-m_walkSpeed * deltaSeconds);
00116 }
00117
00118
void WalkNavigation::runForward(
float deltaSeconds)
00119 {
00120 move(m_runSpeed * deltaSeconds);
00121 }
00122
00123
void WalkNavigation::runBackward(
float deltaSeconds)
00124 {
00125 move(-m_runSpeed * deltaSeconds);
00126 }
00127
00128
void WalkNavigation::strafeLeft(
float deltaSeconds)
00129 {
00130 strafe(-m_walkSpeed * deltaSeconds);
00131 }
00132
00133
void WalkNavigation::strafeRight(
float deltaSeconds)
00134 {
00135 strafe(m_walkSpeed * deltaSeconds);
00136 }
00137
00138
void WalkNavigation::rotateLeft(
float deltaSeconds)
00139 {
00140 rotate(-m_turnSpeed * deltaSeconds);
00141 }
00142
00143
void WalkNavigation::rotateRight(
float deltaSeconds)
00144 {
00145 rotate(m_turnSpeed * deltaSeconds);
00146 }
00147
00148
void WalkNavigation::lookUp(
float deltaSeconds)
00149 {
00150 look(m_turnSpeed * deltaSeconds);
00151 }
00152
00153
void WalkNavigation::lookDown(
float deltaSeconds)
00154 {
00155 look(-m_turnSpeed * deltaSeconds);
00156 }