Du kannst nicht mehr als 25 Themen auswählen Themen müssen mit entweder einem Buchstaben oder einer Ziffer beginnen. Sie können Bindestriche („-“) enthalten und bis zu 35 Zeichen lang sein.

chunk.cpp 2.1KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. /*
  2. * =====================================================================================
  3. *
  4. * Filename: chunk.cpp
  5. *
  6. * Description: Chunk
  7. *
  8. * Version: 1.0
  9. * Created: 04/04/2014 09:44:36 PM
  10. * Revision: none
  11. * Compiler: gcc
  12. *
  13. * Author: YOUR NAME (),
  14. * Organization:
  15. *
  16. * =====================================================================================
  17. */
  18. #include "chunk.h"
  19. #include "world.h"
  20. #include <iostream>
  21. namespace vtk {
  22. Chunk::Chunk(World& world) :
  23. mLinkedWorld(world)
  24. {
  25. mPos = glm::ivec3(0,0,0);
  26. renderer.linkedChunk = this;
  27. //fill voxels with 0
  28. for (unsigned i = 0; i < 4096; i++) {
  29. voxels[i] = 0;
  30. }
  31. }
  32. bool Chunk::isVoxelSolid(const int& x, const int& y, const int& z) {
  33. if (x < 0 || x > 15 ||
  34. y < 0 || y > 15 ||
  35. z < 0 || z > 15 )
  36. { //position is outside of the chunk
  37. return mLinkedWorld.isVoxelSolid(mPos.x * 16 + x,
  38. mPos.y * 16 + y,
  39. mPos.z * 16 + z);
  40. }
  41. return (getVoxelType((unsigned)x,(unsigned)y,(unsigned)z) != 0);
  42. }
  43. void Chunk::setVoxelType(const int& x, const int& y, const int& z, const unsigned& type) {
  44. auto index = x + 16 * (y + 16 * z);
  45. if (index > 4095) {
  46. std::cout << "CHUNK ACCESS ERROR (set voxel): Out of range, doing nothing\n";
  47. return;
  48. }
  49. voxels[index] = type;
  50. }
  51. unsigned Chunk::getVoxelType(const unsigned& x, const unsigned& y, const unsigned& z) {
  52. auto index = x + 16 * (y + 16 * z);
  53. if (index > 4095) {
  54. std::cout << "CHUNK ACCESS ERROR (get voxel): Out of range, returning type 0\n";
  55. return 0;
  56. }
  57. return voxels[index];
  58. }
  59. glm::ivec3 Chunk::getWorldCoords(const int& x, const int& y, const int& z) {
  60. return glm::ivec3(mPos.x * 16 + x,
  61. mPos.y * 16 + y,
  62. mPos.z * 16 + z);
  63. }
  64. void Chunk::setPos(const glm::ivec3& pos) {
  65. mPos = pos;
  66. }
  67. glm::ivec3 Chunk::getPos() {
  68. return mPos;
  69. }
  70. World& Chunk::getWorld() {
  71. return mLinkedWorld;
  72. }
  73. }