#pragma once #include #include "Item.h" #include "ItemSkill.h" class FluidContainerItemType; class FluidContainerItem : public Item { private: int fluidTypeId; int fluidAmount; public: FluidContainerItem(int itemTypeId, const char* name); virtual const BlockType* zPlacedBlockType() const override; virtual bool canBeStackedWith(const Item* zItem) const override; virtual bool canBePlacedAt( int dimensionId, Framework::Vec3 worldPos) const override; virtual void onPlaced(); virtual Framework::Text getTooltipUIML() const override; virtual bool applyFoodEffects(Entity* zTarget) override; virtual bool canApplyFoodEffectsFully(Entity* zTarget) const override; int getAmount() const; void setAmount(int amount); int getFluidTypeId() const; void setFluidTypeId(int fluidTypeId); friend FluidContainerItemType; }; class FluidContainerItemSkillLevelUpRule; class FluidContainerItemSkill : public ItemSkill { int level; float xp; float maxXP; public: FluidContainerItemSkill(int itemTypeId); virtual bool use(Entity* zActor, Item* zUsedItem, Block* zTarget) override; virtual bool use(Entity* zActor, Item* zUsedItem, Entity* zTarget) override; friend FluidContainerItemType; friend FluidContainerItemSkillLevelUpRule; }; class FluidContainerItemSkillLevelUpRule : public ItemSkillLevelUpRule { public: FluidContainerItemSkillLevelUpRule(); void applyOn(ItemSkill* zSkill) override; }; class FluidContainerItemType : public ItemType { private: int maxFluidAmount; protected: virtual void loadSuperItem( Item* zItem, Framework::StreamReader* zReader) const override; virtual void saveSuperItem( const Item* zItem, Framework::StreamWriter* zWriter) const override; virtual void loadSuperItemSkill( ItemSkill* zSkill, Framework::StreamReader* zReader) const override; virtual void saveSuperItemSkill(const ItemSkill* zSkill, Framework::StreamWriter* zWriter) const override; public: FluidContainerItemType(int typeId, const char* name, ModelInfo model); virtual Item* createItem() const override; virtual ItemSkill* createDefaultItemSkill() const override; virtual void setItemAttribute(Item* zItem, Framework::Text name, Framework::JSON::JSONValue* zValue) const override; virtual void addItemAttributes( Item* zItem, Framework::JSON::JSONObject* zItemObjet) const override; int getMaxFluidAmount() const; FluidContainerItemType* setMaxFluidAmount(int maxFluidAmount); };