ServerPlayer.cpp 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. #include "server/entities/ServerPlayer.h"
  2. #include "utils/Logger.h"
  3. ServerPlayer::ServerPlayer(Server::Client& client) : client(client) {
  4. }
  5. void ServerPlayer::tick() {
  6. if(!history.canRead()) {
  7. skip = true;
  8. return;
  9. }
  10. skip = false;
  11. Entity::tick();
  12. ControllerPacket cp = history.read();
  13. Quaternion q = getRotation();
  14. Vector3 up(0.0f, 1.0f, 0.0f);
  15. Vector3 back = q * Vector3(0.0f, 0.0f, -1.0f);
  16. back[1] = 0.0f;
  17. back.normalize();
  18. Vector3 right = back.cross(up);
  19. constexpr float speed = 0.1f;
  20. if(cp.has(ControllerPacket::Type::DOWN)) {
  21. addForce(back * speed);
  22. }
  23. if(cp.has(ControllerPacket::Type::UP)) {
  24. addForce(back * -speed);
  25. }
  26. if(cp.has(ControllerPacket::Type::LEFT)) {
  27. addForce(right * -speed);
  28. }
  29. if(cp.has(ControllerPacket::Type::RIGHT)) {
  30. addForce(right * speed);
  31. }
  32. if(cp.has(ControllerPacket::Type::JUMP) && isOnGround()) {
  33. addForce(up * 0.5f);
  34. }
  35. if(cp.has(ControllerPacket::Type::SNEAK)) {
  36. addForce(up * -speed);
  37. }
  38. constexpr float rotationSpeed = 4.0f;
  39. if(cp.has(ControllerPacket::Type::CAM_LEFT)) {
  40. addLengthAngle(-rotationSpeed);
  41. }
  42. if(cp.has(ControllerPacket::Type::CAM_RIGHT)) {
  43. addLengthAngle(rotationSpeed);
  44. }
  45. if(cp.has(ControllerPacket::Type::CAM_UP)) {
  46. addWidthAngle(-rotationSpeed * 0.5f);
  47. }
  48. if(cp.has(ControllerPacket::Type::CAM_DOWN)) {
  49. addWidthAngle(rotationSpeed * 0.5f);
  50. }
  51. }
  52. void ServerPlayer::onChat(InPacket& in) {
  53. (void)in;
  54. }
  55. void ServerPlayer::send(OutPacket& out) {
  56. client.send(out);
  57. }
  58. void ServerPlayer::onControllerPacket(const ControllerPacket& cp) {
  59. history.write(cp);
  60. }