Nimbin[12]?SDL & Graphics / mapcreator / src/vegetables/vegetables.hpp

mapcreator git · master

SDL3 2.5D game and engine using assets, with map editor

sdl3 c++ game engine map-editor cmake · first commit 2025-10-31 · last commit 2026-09-07 (1 month ago) · synced 3 days ago · upstream: git.ide3.de/hsnr/sdl-spieleentwicklung/map_creator

C++ 99.3%
git clone https://git.christianimmanuel.de/sdl-graphics/mapcreator.gitwget https://git.christianimmanuel.de/sdl-graphics/mapcreator/archive/mapcreator.tar.gz
src/vegetables/vegetables.hpp 2.1 KB · 97 lines 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();
};