LightSources.h 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112
  1. #pragma once
  2. #include "BasicBlocks.h"
  3. #include "Block.h"
  4. #include "BlockType.h"
  5. class BasicLightSourceBlockType;
  6. class LightSourceItemType;
  7. class LightSourceItem : public BasicBlockItem
  8. {
  9. protected:
  10. int color;
  11. public:
  12. LightSourceItem(int itemType, int blockType, Framework::Text name);
  13. virtual bool canBeStackedWith(const Item* zItem) const override;
  14. friend LightSourceItemType;
  15. friend BasicLightSourceBlockType;
  16. };
  17. class LightSourceItemType : public BasicBlockItemType
  18. {
  19. private:
  20. int color;
  21. public:
  22. LightSourceItemType(Framework::Text name,
  23. ModelInfo* model,
  24. Framework::Text blockTypeName,
  25. int maxStackSize);
  26. protected:
  27. virtual void loadSuperItem(
  28. Item* zItem, Framework::StreamReader* zReader) const override;
  29. virtual void saveSuperItem(
  30. const Item* zItem, Framework::StreamWriter* zWriter) const override;
  31. virtual Item* createItem() const override;
  32. public:
  33. LightSourceItemType* setColor(int color);
  34. };
  35. class BasicLightSource : public Block
  36. {
  37. public:
  38. BasicLightSource(int typeId, Framework::Vec3<int> pos, int dimensionId);
  39. protected:
  40. void setLight(int light);
  41. public:
  42. virtual bool onTick(
  43. TickQueue* zQueue, int numTicks, bool& blocked) override;
  44. virtual void onPostTick() override;
  45. friend BasicLightSourceBlockType;
  46. };
  47. class BasicLightSourceBlockType : public BlockType
  48. {
  49. private:
  50. Framework::Text itemTypeName;
  51. int itemTypeId;
  52. bool transparent;
  53. bool passable;
  54. bool interactable;
  55. int lightColor;
  56. public:
  57. BasicLightSourceBlockType(Framework::Text itemTypeName,
  58. ModelInfo* model,
  59. Framework::Text name,
  60. float hardness,
  61. int mapColor,
  62. int lightColor,
  63. Framework::RCArray<Framework::Text> groupNames);
  64. protected:
  65. virtual void createSuperBlock(Block* zBlock, Item* zItem) const override;
  66. virtual void loadSuperBlock(Block* zBlock,
  67. Framework::StreamReader* zReader,
  68. int dimensionId) const override;
  69. virtual void saveSuperBlock(
  70. Block* zBlock, Framework::StreamWriter* zWriter) const override;
  71. public:
  72. virtual bool initialize(Game* zGame) override;
  73. virtual Block* createBlock(
  74. Framework::Vec3<int> position, int dimensionId) const override;
  75. virtual Item* createItem() const override;
  76. int getLightColor() const;
  77. Framework::Text getItemTypeName() const;
  78. virtual ItemType* createItemType() const override;
  79. };
  80. class BasicLightSourceBlockTypeFactory
  81. : public SubTypeFactory<BlockType, BasicLightSourceBlockType>
  82. {
  83. public:
  84. BasicLightSourceBlockTypeFactory();
  85. BasicLightSourceBlockType* fromJson(
  86. Framework::JSON::JSONObject* zJson) const override;
  87. Framework::JSON::JSONObject* toJson(
  88. BasicLightSourceBlockType* zObject) const override;
  89. Framework::JSON::Validator::JSONValidator* getValidator(
  90. Framework::JSON::Validator::ObjectValidationBuilder<
  91. Framework::JSON::Validator::JSONValidator>* builder) const override;
  92. Framework::Text getTypeToken() const override;
  93. };