Player.cpp 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182
  1. #define _USE_MATH_DEFINES
  2. #include <cmath>
  3. #include "Player.h"
  4. #include <GL/freeglut.h>
  5. #include <string>
  6. #include <iostream>
  7. #include <fstream>
  8. Player* Player::instance = NULL;
  9. Player::Player()
  10. {
  11. speed = 10;
  12. maxHp = 100;
  13. health = maxHp;
  14. xp = 0;
  15. maxXp = 100;
  16. level = 1;
  17. crystals = 0;
  18. loadWeapons();
  19. leftWeapon = leftweapons[0];
  20. leftWeapon->rotateWeapon(Vec3f(150, 0, 60));
  21. rightWeapon = rightweapons[0];
  22. rightWeapon->rotateWeapon(Vec3f(150, 0, 60));
  23. }
  24. Player* Player::getInstance()
  25. {
  26. if (instance == nullptr)
  27. instance = new Player();
  28. return instance;
  29. }
  30. void Player::init()
  31. {
  32. instance = new Player();
  33. }
  34. Player::~Player()
  35. {
  36. if (leftWeapon)
  37. delete leftWeapon;
  38. if (rightWeapon)
  39. delete rightWeapon;
  40. }
  41. void Player::setCamera()
  42. {
  43. glRotatef(rotation.x, 1, 0, 0);
  44. glRotatef(rotation.y, 0, 1, 0);
  45. glTranslatef(-position.x, -position.y, -position.z);
  46. leftWeapon->rotate(rotation);
  47. rightWeapon->rotate(rotation);
  48. }
  49. void Player::setPosition(float angle, float fac, bool height)
  50. {
  51. if (height)
  52. position.y += angle*fac;
  53. else
  54. {
  55. position.x -= (float)cos((rotation.y + angle) / 180 * M_PI) * fac;
  56. position.z -= (float)sin((rotation.y + angle) / 180 * M_PI) * fac;
  57. }
  58. leftWeapon->move(position);
  59. rightWeapon->move(position);
  60. }
  61. void Player::draw() {
  62. leftWeapon->draw();
  63. rightWeapon->draw();
  64. }
  65. void Player::HpDown(int damage)
  66. {
  67. int newHealth = health - damage;
  68. if (newHealth <= 0)
  69. {
  70. exit(0);
  71. }
  72. health = newHealth;
  73. }
  74. void Player::HpUp(int hp)
  75. {
  76. if (health != maxHp)
  77. {
  78. int newHealth = health + hp;
  79. if (newHealth >= maxHp)
  80. {
  81. newHealth = maxHp;
  82. }
  83. health = newHealth;
  84. }
  85. }
  86. void Player::XpUp(int xpUp)
  87. {
  88. float newXp = xp + xpUp;
  89. if (newXp >= maxXp)
  90. {
  91. newXp -= maxXp;
  92. levelUp();
  93. }
  94. xp = newXp;
  95. }
  96. void Player::levelUp()
  97. {
  98. level++;
  99. maxXp += 50;
  100. maxHp += 10;
  101. health = maxHp;
  102. }
  103. void Player::loadWeapons()
  104. {
  105. std::string fileName = "weapons.json";
  106. //Open world json file
  107. std::ifstream file(fileName);
  108. if (!file.is_open())
  109. std::cout << "Error, can't open world file - " << fileName << "\n";
  110. json::Value v = json::readJson(file);
  111. file.close();
  112. //Check file
  113. if (v["weapons"].isNull())
  114. std::cout << "Invalid weapons file: " << fileName << "\n";
  115. //Load object templates
  116. for (auto w : v["weapons"])
  117. {
  118. Weapon* lweapon;
  119. Weapon* rweapon;
  120. std::string name = w["name"].asString();
  121. std::string fileN = w["file"].asString();
  122. float damage = w["damage"].asFloat();
  123. Weapon::Element e = Weapon::FIRE;
  124. if(w["element"].asString() == "fire")
  125. e = Weapon::FIRE;
  126. else if (w["element"].asString() == "water")
  127. e = Weapon::WATER;
  128. else if (w["element"].asString() == "earth")
  129. e = Weapon::EARTH;
  130. else if (w["element"].asString() == "air")
  131. e = Weapon::AIR;
  132. else
  133. e = Weapon::FIRE;
  134. Vec3f leftoffset = Vec3f(w["left"]["offset"][0].asFloat(), w["left"]["offset"][1].asFloat(), w["left"]["offset"][2].asFloat());
  135. Vec3f rightoffset = Vec3f(w["right"]["offset"][0].asFloat(), w["right"]["offset"][1].asFloat(), w["right"]["offset"][2].asFloat());
  136. Vec3f anchor = Vec3f(w["anchor"][0].asFloat(), w["anchor"][1].asFloat(), w["anchor"][2].asFloat());
  137. Vec3f collision = Vec3f(w["collision"][0].asFloat(), w["collision"][1].asFloat(), w["collision"][2].asFloat());
  138. Vec2f maxRot = Vec2f(w["maxRotation"][0].asFloat(), w["maxRotation"][1].asFloat());
  139. Vec2f minRot = Vec2f(w["minRotation"][0].asFloat(), w["minRotation"][1].asFloat());
  140. lweapon = new Weapon(name, damage, e, fileN, 1, position, rotation, leftoffset, anchor, maxRot, minRot, collision);
  141. rweapon = new Weapon(name, damage, e, fileN, 1, position, rotation, rightoffset, anchor, maxRot, minRot, collision);
  142. leftweapons.push_back(lweapon);
  143. rightweapons.push_back(rweapon);
  144. }
  145. }