undoQueue.h 1021 B

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. #pragma once
  2. #include "packet.h"
  3. #include <deque>
  4. #include <vector>
  5. #include <blocks.h>
  6. struct UndoQueueEvent
  7. {
  8. EventId eventId = {};
  9. glm::ivec3 blockPos = {};
  10. glm::dvec3 doublePos = {};
  11. Block originalBlock = {};
  12. Block newBlock = {};
  13. std::uint64_t entityId = 0;
  14. std::uint64_t createTime = 0;
  15. std::vector<unsigned char> blockData;
  16. int type = 0;
  17. enum
  18. {
  19. doNothing = 0, //this happens when the server overwrides your block placement
  20. iPlacedBlock,
  21. iDroppedItemFromInventory,
  22. changedBlockData,
  23. };
  24. void setTimer()
  25. {
  26. createTime = getTimer();
  27. }
  28. };
  29. struct UndoQueue
  30. {
  31. EventId currentEventId = {1, 1};
  32. std::deque<UndoQueueEvent> events;
  33. void addPlaceBlockEvent(glm::ivec3 pos, Block old, Block newType, std::vector<unsigned char> data);
  34. void changedBlockDataEvent(glm::ivec3 pos, Block block, std::vector<unsigned char> &dataToSteal);
  35. void addDataToLastBlockEvent(std::vector<unsigned char> &dataToSteal);
  36. void addDropItemFromInventoryEvent(glm::dvec3 pos, std::uint64_t entityId);
  37. };