vrfileman

annotate src/user.cc @ 5:d487181ee1d9

fixed movement
author John Tsiombikas <nuclear@member.fsf.org>
date Tue, 03 Feb 2015 03:35:14 +0200
parents 85e26116ba5a
children
rev   line source
nuclear@2 1 #include "user.h"
nuclear@2 2
nuclear@5 3 User::User()
nuclear@2 4 {
nuclear@5 5 hangle = vangle = 0;
nuclear@5 6 }
nuclear@5 7
nuclear@5 8 void User::move(float dfwd, float dright, float dup)
nuclear@5 9 {
nuclear@5 10 float costheta = cos(DEG_TO_RAD(hangle));
nuclear@5 11 float sintheta = sin(DEG_TO_RAD(hangle));
nuclear@5 12
nuclear@5 13 Vector3 dir;
nuclear@5 14
nuclear@5 15 dir.x = dright * costheta - dfwd * sintheta;
nuclear@5 16 dir.y = dup;
nuclear@5 17 dir.z = -dright * sintheta - dfwd * costheta;
nuclear@5 18
nuclear@3 19 pos += dir;
nuclear@2 20 }
nuclear@2 21
nuclear@5 22 void User::rotate(float dhoriz, float dvert)
nuclear@2 23 {
nuclear@5 24 hangle = fmod(hangle - dhoriz, 360.0);
nuclear@5 25 vangle -= dvert;
nuclear@5 26
nuclear@5 27 if(vangle < -90) vangle = -90;
nuclear@5 28 if(vangle > 90) vangle = 90;
nuclear@2 29 }
nuclear@2 30
nuclear@5 31 void User::calc_matrix(Matrix4x4 *res) const
nuclear@2 32 {
nuclear@5 33 Matrix4x4 rmat;
nuclear@5 34 rmat.set_rotation(Vector3(0, DEG_TO_RAD(hangle), 0));
nuclear@5 35 rmat.rotate(Vector3(DEG_TO_RAD(vangle), 0, 0));
nuclear@5 36
nuclear@3 37 Matrix4x4 tmat;
nuclear@3 38 tmat.set_translation(pos);
nuclear@3 39
nuclear@3 40 *res = tmat * rmat;
nuclear@2 41 }
nuclear@2 42
nuclear@5 43 void User::calc_inv_matrix(Matrix4x4 *res) const
nuclear@2 44 {
nuclear@3 45 calc_matrix(res);
nuclear@3 46 *res = res->inverse();
nuclear@4 47 // TODO: optimize
nuclear@2 48 }