BlockType.h 2.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. #pragma once
  2. #include <Array.h>
  3. #include <Either.h>
  4. #include <Vec3.h>
  5. #include <Writer.h>
  6. #include "ModelInfo.h"
  7. class Item;
  8. class Block;
  9. class Game;
  10. class ItemType;
  11. class BlockTypeEnum
  12. {
  13. public:
  14. static const int NO_BLOCK = 0;
  15. static const int AIR = 1;
  16. };
  17. class BlockType : public virtual Framework::ReferenceCounter
  18. {
  19. private:
  20. int id;
  21. ModelInfo* model;
  22. int initialMaxHP;
  23. const bool needsClientInstance;
  24. bool lightSource;
  25. Framework::Text name;
  26. const bool needModelSubscription;
  27. int initialMapColor;
  28. Block* defaultBlock;
  29. Framework::RCArray<Framework::Text> groupNames;
  30. float hardness;
  31. protected:
  32. BlockType(Block* defaultBlock,
  33. ModelInfo* model,
  34. bool needsClientInstance,
  35. int initialMaxHP,
  36. bool lightSource,
  37. Framework::Text name,
  38. bool needModelSubscription,
  39. int initialMapColor,
  40. Framework::RCArray<Framework::Text> groupNames,
  41. float hardness);
  42. virtual ~BlockType();
  43. virtual void loadSuperBlock(
  44. Block* zBlock, Framework::StreamReader* zReader, int dimensionId) const;
  45. virtual void saveSuperBlock(
  46. Block* zBlock, Framework::StreamWriter* zWriter) const;
  47. virtual void createSuperBlock(Block* zBlock, Item* zItem) const;
  48. virtual void createSuperItem(Block* zBlock, Item* zItem) const;
  49. virtual Block* createBlock(
  50. Framework::Vec3<int> position, int dimensionId) const
  51. = 0;
  52. virtual Item* createItem() const = 0;
  53. public:
  54. virtual bool initialize(Game* zGame);
  55. virtual Framework::Text getTargetUIML() const;
  56. virtual Block* loadBlock(Framework::Vec3<int> position,
  57. Framework::StreamReader* zReader,
  58. int dimensionId) const;
  59. virtual void saveBlock(
  60. Block* zBlock, Framework::StreamWriter* zWriter) const;
  61. virtual Item* getItemFromBlock(Block* zBlock) const;
  62. virtual Block* createBlockAt(
  63. Framework::Vec3<int> position, int dimensionId, Item* zUsedItem) const;
  64. virtual const Block* zDefault() const;
  65. bool doesNeedClientInstance() const;
  66. int getId() const;
  67. int getInitialMaxHP() const;
  68. bool isLightSource() const;
  69. BlockType* initializeDefault();
  70. const char* getName() const;
  71. const bool doesNeedModelSubscription() const;
  72. void writeTypeInfo(Framework::StreamWriter* zWriter) const;
  73. virtual bool isFluid() const;
  74. virtual unsigned char getFlowDistance() const;
  75. void setTypeId(int id);
  76. ModelInfo* zModel() const;
  77. int getMapColor() const;
  78. virtual ItemType* createItemType() const = 0;
  79. const Framework::RCArray<Framework::Text>& getGroupNames() const;
  80. float getHardness() const;
  81. static int getTypeId(const char* name);
  82. static Framework::Text getTypeName(int id);
  83. };
  84. const Block* getDefaultBlock(Framework::Either<Block*, int> b);