Player.cpp 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169
  1. #include "Player.h"
  2. #include "Game.h"
  3. Player::Player( Framework::Vec3<float> location, int dimensionId, int entityId )
  4. : Entity( PlayerEntityType::INSTANCE, location, dimensionId, entityId )
  5. {
  6. maxHP = 10;
  7. currentHP = 10;
  8. stamina = 10;
  9. maxStamina = 10;
  10. hunger = 10;
  11. maxHunger = 10;
  12. thirst = 10;
  13. maxThirst = 10;
  14. keyState = 0;
  15. jumping = 0;
  16. }
  17. void Player::setName( Framework::Text name )
  18. {
  19. this->name = name;
  20. }
  21. const char* Player::getName() const
  22. {
  23. return name;
  24. }
  25. void Player::tick( const Dimension* zDimension, Game* zGame )
  26. {
  27. speed = { 0, 0, speed.z };
  28. if( (keyState | Key::MOVE_FRONT) == keyState )
  29. speed += {faceDir.x * 1.5f, faceDir.y * 1.5f, 0};
  30. if( (keyState | Key::MOVE_BACK) == keyState )
  31. speed += {-faceDir.x * 1.5f, -faceDir.y * 1.5f, 0};
  32. if( (keyState | Key::MOVE_RIGHT) == keyState )
  33. {
  34. Vec3<float> right = Vec3<float>( faceDir ).rotateZ( (float)PI / 2.f );
  35. speed += {right.x * 1.5f, right.y * 1.5f, 0};
  36. }
  37. if( (keyState | Key::MOVE_LEFT) == keyState )
  38. {
  39. Vec3<float> left = Vec3<float>( faceDir ).rotateZ( -(float)PI / 2.f );
  40. speed += {left.x * 1.5f, left.y * 1.5f, 0};
  41. }
  42. if( (keyState | Key::MOVE_DOWN) == keyState && !jumping )
  43. speed.z = -1.5f;
  44. return Entity::tick( zDimension, zGame );
  45. }
  46. void Player::api( Framework::StreamReader* zRequest, NetworkResponse* zResponse )
  47. {
  48. char byte;
  49. zRequest->lese( &byte, 1 );
  50. switch( byte )
  51. {
  52. case 0:
  53. zRequest->lese( &byte, 1 );
  54. switch( byte )
  55. {
  56. case 0:
  57. keyState = keyState & ~Key::MOVE_FRONT;
  58. break;
  59. case 1:
  60. keyState = keyState & ~Key::MOVE_LEFT;
  61. break;
  62. case 2:
  63. keyState = keyState & ~Key::MOVE_BACK;
  64. break;
  65. case 3:
  66. keyState = keyState & ~Key::MOVE_RIGHT;
  67. break;
  68. case 4:
  69. if( gravityMultiplier == 0.f )
  70. speed.z = 0;
  71. keyState = keyState & ~Key::MOVE_DOWN;
  72. break;
  73. case 5:
  74. keyState = keyState & ~Key::ROTATE_LEFT;
  75. break;
  76. case 6:
  77. keyState = keyState & ~Key::ROTATE_RIGHT;
  78. break;
  79. case 7:
  80. if( gravityMultiplier == 0.f )
  81. speed.z = 0;
  82. keyState = keyState & ~Key::MOVE_UP;
  83. break;
  84. }
  85. break;
  86. case 1:
  87. zRequest->lese( &byte, 1 );
  88. switch( byte )
  89. {
  90. case 0:
  91. keyState = keyState | Key::MOVE_FRONT;
  92. break;
  93. case 1:
  94. keyState = keyState | Key::MOVE_LEFT;
  95. break;
  96. case 2:
  97. keyState = keyState | Key::MOVE_BACK;
  98. break;
  99. case 3:
  100. keyState = keyState | Key::MOVE_RIGHT;
  101. break;
  102. case 4:
  103. keyState = keyState | Key::MOVE_DOWN;
  104. break;
  105. case 5:
  106. keyState = keyState | Key::ROTATE_LEFT;
  107. break;
  108. case 6:
  109. keyState = keyState | Key::ROTATE_RIGHT;
  110. break;
  111. case 7:
  112. if( (keyState | Key::MOVE_UP) != keyState )
  113. {
  114. if( gravityMultiplier > 0 )
  115. {
  116. if( jumping )
  117. {
  118. // TODO: check if flight is enabled
  119. gravityMultiplier = 0;
  120. jumping = 0;
  121. speed.z = 1.5f;
  122. }
  123. else
  124. {
  125. jumping = 1;
  126. speed.z = 5.f;
  127. }
  128. }
  129. else
  130. speed.z = 1.5f;
  131. }
  132. keyState = keyState | Key::MOVE_UP;
  133. break;
  134. }
  135. break;
  136. case 2
  137. :
  138. zRequest->lese( (char*)&faceDir.x, 4 );
  139. zRequest->lese( (char*)&faceDir.y, 4 );
  140. zRequest->lese( (char*)&faceDir.z, 4 );
  141. }
  142. }
  143. void Player::onFall( float collisionSpeed )
  144. {
  145. Entity::onFall( collisionSpeed );
  146. gravityMultiplier = 1.f;
  147. jumping = 0;
  148. }
  149. PlayerEntityType::PlayerEntityType()
  150. : EntityType( ID )
  151. {}
  152. void PlayerEntityType::loadSuperEntity( Entity* zEntity, Framework::StreamReader* zReader ) const
  153. {}
  154. void PlayerEntityType::saveSuperEntity( Entity* zEntity, Framework::StreamWriter* zWriter ) const
  155. {}
  156. Entity* PlayerEntityType::createEntity( Framework::Vec3<float> position, int dimensionId, Game* zTarget, int entityId ) const
  157. {
  158. return new Player( position, dimensionId, entityId );
  159. }