LightSources.h 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116
  1. #pragma once
  2. #include "Block.h"
  3. #include "BlockType.h"
  4. class BasicLightSourceBlockType;
  5. class LightSourceItemType;
  6. class LightSourceItem : public BasicBlockItem
  7. {
  8. protected:
  9. int color;
  10. public:
  11. LightSourceItem(int itemType, int blockType, Framework::Text name);
  12. virtual bool canBeStackedWith(const Item* zItem) const override;
  13. friend LightSourceItemType;
  14. friend BasicLightSourceBlockType;
  15. };
  16. class LightSourceItemType : public BasicBlockItemType
  17. {
  18. private:
  19. int color;
  20. public:
  21. LightSourceItemType(Framework::Text name,
  22. ModelInfo* model,
  23. Framework::Text blockTypeName,
  24. int maxStackSize,
  25. Framework::RCArray<Framework::Text> groups);
  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();
  58. protected:
  59. virtual void createSuperBlock(Block* zBlock, Item* zItem) const override;
  60. virtual void loadSuperBlock(Block* zBlock,
  61. Framework::StreamReader* zReader,
  62. int dimensionId) const override;
  63. virtual void saveSuperBlock(
  64. Block* zBlock, Framework::StreamWriter* zWriter) const override;
  65. public:
  66. virtual bool initialize(Game* zGame) override;
  67. virtual Block* createBlock(
  68. Framework::Vec3<int> position, int dimensionId) const override;
  69. virtual Item* createItem() const override;
  70. virtual ItemType* createItemType() const override;
  71. void setItemTypeName(Framework::Text itemTypeName);
  72. Framework::Text getItemTypeName() const;
  73. void setTransparent(bool transparent);
  74. bool isTransparent() const;
  75. void setPassable(bool passable);
  76. bool isPassable() const;
  77. void setInteractable(bool interactable);
  78. bool isInteractable() const;
  79. void setLightColor(int lightColor);
  80. int getLightColor() const;
  81. };
  82. class BasicLightSourceBlockTypeFactory
  83. : public BlockTypeFactoryBase<BasicLightSourceBlockType>
  84. {
  85. public:
  86. BasicLightSourceBlockTypeFactory();
  87. BasicLightSourceBlockType* createValue(
  88. Framework::JSON::JSONObject* zJson) const override;
  89. BasicLightSourceBlockType* fromJson(
  90. Framework::JSON::JSONObject* zJson) const override;
  91. Framework::JSON::JSONObject* toJsonObject(
  92. BasicLightSourceBlockType* zObject) const override;
  93. JSONObjectValidationBuilder* addToValidator(
  94. JSONObjectValidationBuilder* builder) const override;
  95. const char* getTypeToken() const override;
  96. };