#include #include #include "player.h" #include "network/tcpsocket.h" unsigned int Player::_next_player_id = 0; Player::Player(BettolaLib::Network::TCPSocket* socket) : _socket(socket), _has_udp_addr(false) { /* Try and set a player id to 0 now you audacious pr.ck! */ if(_next_player_id == 0) { _next_player_id = 1; } _id = _next_player_id++; _x = 0.0f; _y = 0.0f; _vx = 0.0f; _vy = 0.0f; _yaw = 0.0f; _speed = 10.0f; /* Must match client! */ _last_processed_sequence = 0; memset(&_udp_addr, 0, sizeof(_udp_addr)); } void Player::update(double dt) { _x += _vx * dt; _y += _vy * dt; } void Player::set_velocity_direction(const InputState& input , const BettolaMath::Vec3& cam_front) { BettolaMath::Vec3 forward = { cam_front.x, 0.0f, cam_front.z }; float f_mag = sqrt(forward.x*forward.x + forward.z*forward.z); if(f_mag > 0.0f) { forward.x /= f_mag; forward.z /= f_mag; } BettolaMath::Vec3 right = { -forward.z, 0.0f, forward.x }; BettolaMath::Vec3 move_dir = { 0.0f, 0.0f, 0.0f }; if(input.up) move_dir = move_dir + forward; if(input.down) move_dir = move_dir + BettolaMath::Vec3{-forward.x, 0.0f, -forward.z}; if(input.left) move_dir = move_dir + BettolaMath::Vec3{-right.x, 0.0f, -right.z}; if(input.right) move_dir = move_dir + right; float move_mag = sqrt(move_dir.x*move_dir.x + move_dir.z*move_dir.z); if(move_mag > 0.0f) { _vx = (move_dir.x / move_mag) * _speed; _vy = (move_dir.z / move_mag) * _speed; /* vy controls Z-axis movement. */ } else { _vx = 0.0f; _vy = 0.0f; } }