mapcreator git · master
SDL3 2.5D game and engine using assets, with map editor
C++ 99.3%git clone https://git.christianimmanuel.de/sdl-graphics/mapcreator.gitwget https://git.christianimmanuel.de/sdl-graphics/mapcreator/archive/mapcreator.tar.gzsrc/vegetables/vegetables.hpp raw
#pragma once
#include "objects/object.hpp"
class Inventory;
class Messages;
enum class ItemType : uint32_t ;
enum class EquipmentSlot;
class Vegetable;
struct ConsumingStatsBonus {
float health = 0.0f;
float stamina = 0.0f;
float thirst = 0.0f;
float demage = 0.0f;
float duration = 0.0f;
};
namespace VegetableData {
extern std::vector<Vegetable*> all_vegetables;
enum class Type : uint32_t {
NONE,
CARROT,
RADDISH,
CABBAGE,
SALAD,
CAULIFLOWER,
ONION,
COUNT
};
struct CropDefinition {
const char* name;
int start_tile_x;
int start_tile_y;
int grown_tile_x; // last stage before rotten
int grown_tile_y;
int rotten_tile_x;
int rotten_tile_y;
int collectable_tile_x;
int collectable_tile_y;
int icon_tile_x;
int icon_tile_y;
size_t total_stages; // auto-calculated = (grown-start)+1 + rotten
bool is_seed;
ConsumingStatsBonus stats_bonus;
};
extern const CropDefinition crop_defs[(int)Type::COUNT];
const CropDefinition* get_DataByType(Type type);
const SDL_Point get_IconTilePosByType(Type type, bool is_seed = false);
}
class Vegetable : public Object, public IsCollectable {
public:
VegetableData::Type type;
const VegetableData::CropDefinition* definition;
size_t quantity = 2;
bool is_seed = false;
size_t growth_stage; // 0 = planted, last = rotten
double next_update_sec; // seconds since game start
float collecting_duration_max;
int tileset_object_x = 0;
int tileset_object_y = 0;
EquipmentSlot equipement_slot;
Vegetable(VegetableData::Type t, SDL_Point world_pos, bool is_s);
SDL_Point get_SetPosition() override;
const VegetableData::CropDefinition&
get_DataByType();
void Grow(double current_seconds);
bool is_Rotten() const;
bool is_FullyGrown() const;
void pick_Up();
// ICollectable
bool is_Collectable() const override;
void Collect(Inventory*, Messages*) override;
private:
void update_TilesetId();
};