#pragma once #include "Item.h" #include "safemap.h" #include "DEFINES.h" #include "Crawler.h" INCLUDE_game INCLUDE_DATA INCLUDE_GFX safemapITEM_DATA; safemap>ITEM_SCRIPTS; safemap>ITEM_CATEGORIES; typedef std::string IT; ItemInfo::ItemInfo() :customProps({nullptr,nullptr}){} void ItemInfo::InitializeItems(){ InitializeScripts(); for(auto&key:DATA["ItemCategory"].GetKeys()){ ITEM_CATEGORIES[key.first]; } for(auto&key:DATA["ItemDatabase"].GetKeys()){ std::string imgPath="assets/"+"item_img_directory"_S+key.first+".png"; Renderable&img=GFX["item_img_directory"_S+key.first+".png"]; img.Load(imgPath); std::string scriptName="",description="",category=""; for(auto&itemKey:DATA["ItemDatabase"][key.first].GetKeys()){ std::string keyName=itemKey.first; if(keyName=="Description"){ description=DATA["ItemDatabase"][key.first][keyName].GetString(); }else if(keyName=="ItemCategory"){ category=DATA["ItemDatabase"][key.first][keyName].GetString(); }else if(keyName=="ItemScript"){ scriptName=DATA["ItemDatabase"][key.first][keyName].GetString(); }else{ //THis is a custom override modifier for a script. NO-OP } } if(scriptName!=""){ if(!ITEM_SCRIPTS.count(scriptName)){ std::cout<<"Could not load script "<HasProperty(prop)) return (*customProps)[prop].GetInt(); else return (*scriptProps)[prop].GetInt(); }; float ItemProps::GetFloatProp(std::string prop){ if(customProps->HasProperty(prop)) return (*customProps)[prop].GetReal(); else return (*scriptProps)[prop].GetReal(); }; std::string ItemProps::GetStringProp(std::string prop){ if(customProps->HasProperty(prop)) return (*customProps)[prop].GetString(); else return (*scriptProps)[prop].GetString(); }; void ItemInfo::InitializeScripts(){ ITEM_SCRIPTS["Restore"]=[](Crawler*game,ItemProps props){ game->GetPlayer()->Heal(props.GetIntProp("HP Restore")); game->GetPlayer()->Heal(game->GetPlayer()->GetMaxHealth()*props.GetIntProp("HP % Restore")/100.f); game->GetPlayer()->RestoreMana(props.GetIntProp("MP Restore")); game->GetPlayer()->RestoreMana(game->GetPlayer()->GetMaxMana()*props.GetIntProp("MP % Restore")/100.f); return true; }; ITEM_SCRIPTS.SetInitialized(); std::cout<