The open source repository for the action RPG game in development by Sig Productions titled 'Adventures in Lestoria'!
https://forums.lestoria.net
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
91 lines
2.1 KiB
91 lines
2.1 KiB
#pragma once
|
|
|
|
#include <string>
|
|
#include <functional>
|
|
#include <map>
|
|
#include "olcPixelGameEngine.h"
|
|
#include "olcUTIL_DataFile.h"
|
|
|
|
class Crawler;
|
|
class ItemInfo;
|
|
class ItemProps;
|
|
|
|
typedef std::string IT;
|
|
typedef std::string ITCategory;
|
|
|
|
typedef std::function<bool(Crawler*,ItemProps)> ItemScript;
|
|
|
|
class Item{
|
|
friend class Inventory;
|
|
private:
|
|
uint32_t amt;
|
|
ItemInfo*it;
|
|
public:
|
|
Item();
|
|
Item(uint32_t amt,IT item);
|
|
uint32_t Amt();
|
|
std::string Name();
|
|
std::string Description();
|
|
ITCategory Category();
|
|
Decal*Decal();
|
|
ItemScript&OnUseAction();
|
|
bool IsBlank();
|
|
static Item BLANK;
|
|
};
|
|
|
|
class Inventory{
|
|
friend class ItemInfo;
|
|
public:
|
|
static void AddItem(IT it,uint32_t amt=1);
|
|
static uint32_t GetItemCount(IT it);
|
|
static Item GetItem(IT it);
|
|
//Auto-executes its use function and removes the amt specified from the inventory. Multiple amounts will cause the item to execute its useFunc multiple times.
|
|
static void UseItem(IT it,uint32_t amt=1);
|
|
static void RemoveItem(IT it,uint32_t amt=1);
|
|
static std::vector<IT>&get(ITCategory itemCategory);
|
|
|
|
static bool SwapItems(IT it,IT it2);
|
|
private:
|
|
static void InsertIntoSortedInv(IT item);
|
|
static bool ExecuteAction(IT item);
|
|
static std::map<IT,Item>_inventory;
|
|
static std::map<ITCategory,std::vector<IT>>sortedInv;
|
|
};
|
|
|
|
class ItemProps{
|
|
friend class ItemInfo;
|
|
utils::datafile*scriptProps;
|
|
utils::datafile*customProps;
|
|
public:
|
|
ItemProps(utils::datafile*scriptProps,utils::datafile*customProps);
|
|
int GetIntProp(std::string prop);
|
|
float GetFloatProp(std::string prop);
|
|
std::string GetStringProp(std::string prop);
|
|
};
|
|
|
|
class ItemInfo{
|
|
friend class Inventory;
|
|
std::string name;
|
|
std::string description;
|
|
std::string category;
|
|
Decal*img;
|
|
//Returns true if the item can be used, false otherwise
|
|
std::string useFunc="";
|
|
//Custom properties for this specific item's script.
|
|
static utils::datafile NOPROPS;
|
|
ItemProps customProps;
|
|
|
|
private:
|
|
static void InitializeScripts();
|
|
public:
|
|
static void InitializeItems();
|
|
ItemInfo();
|
|
std::string Name();
|
|
std::string Description();
|
|
ITCategory Category();
|
|
Decal*Decal();
|
|
ItemScript&OnUseAction();
|
|
/*
|
|
For the useFunc, return true if the item can be used, false otherwise.
|
|
*/
|
|
}; |