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 } |