Main Page | Namespace List | Class Hierarchy | Alphabetical List | Class List | File List | Class Members | Related Pages

WalkNavigation.cpp

00001 /*************************************************************************** 00002 * This file is part of OpenCAL: Open Computer Animation Library * 00003 * I created OpenCAL as my master's thesis Computer Science (multimedia) * 00004 * at the tUL university in Diepenbeek, Belgium * 00005 * * 00006 * Copyright (C) 2003-2004 by Jeroen Dierckx * 00007 * jeroen.dierckx@student.luc.ac.be * 00008 * * 00009 ***************************************************************************/ 00010 00011 // Includes 00012 #include "WalkNavigation.h" 00013 using namespace OpenCAL::Utils; 00014 00015 #include <math.h> 00016 00017 using namespace std; 00018 00019 00020 /****************************** 00021 * Constructors and destructor * 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 * Get and set functions * 00037 ************************/ 00038 00039 00040 /****************** 00041 * Other functions * 00042 ******************/ 00043 00044 /* 00045 #ifdef USE_OPENGL 00046 void WalkNavigation::applyGL() const 00047 { 00048 // Look 00049 glRotatef(-m_lookAngle, 1,0,0); 00050 00051 // Rotate 00052 glRotatef(m_turnAngle, 0,1,0); 00053 00054 // Translate 00055 glTranslatef(-m_position.getX(), -m_position.getY(), -m_position.getZ()); 00056 } 00057 #endif // USE_OPENGL 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 * Speficif navigation functions * 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 }

Generated on Sun Aug 15 19:19:23 2004 for OpenCAL: Open Computer Animation Library by doxygen 1.3.8