Close consumables selection window automatically once a loadout item has been selected. Release Build 8038.
This commit is contained in:
parent
72c5a7394b
commit
13854574c9
@ -116,7 +116,7 @@ public:
|
||||
static InputGroup KEY_MOUSE_RIGHT;
|
||||
|
||||
static float SIZE_CHANGE_SPEED;
|
||||
double levelTime;
|
||||
double levelTime=0.;
|
||||
Camera2D camera;
|
||||
std::map<MapName,Map>MAP_DATA;
|
||||
private:
|
||||
|
@ -92,7 +92,7 @@ private:
|
||||
|
||||
struct BGMPlayParams{
|
||||
std::string sound;
|
||||
bool loop;
|
||||
bool loop=false;
|
||||
};
|
||||
class EventData{
|
||||
public:
|
||||
|
@ -217,9 +217,9 @@ void Menu::InitializeCharacterMenuWindow(){
|
||||
game->GetPlayer()->RestoreMana(manaBeforeEquip-game->GetPlayer()->GetMana(),true);
|
||||
}
|
||||
if(!ISBLANK(otherItem)){
|
||||
if(slot==EquipSlot::RING1)Inventory::EquipItem(otherItem,EquipSlot::RING2);
|
||||
if(slot&EquipSlot::RING1)Inventory::EquipItem(otherItem,EquipSlot::RING2);
|
||||
else
|
||||
if(slot==EquipSlot::RING2)Inventory::EquipItem(otherItem,EquipSlot::RING1);
|
||||
if(slot&EquipSlot::RING2)Inventory::EquipItem(otherItem,EquipSlot::RING1);
|
||||
}
|
||||
}
|
||||
}else{
|
||||
|
@ -37,10 +37,10 @@ All rights reserved.
|
||||
#pragma endregion
|
||||
#include "CraftingRequirement.h"
|
||||
|
||||
CraftingRequirement::CraftingRequirement(const std::vector<std::pair<IT,int>>&craftingItems,const uint32_t cost,const uint8_t availableChapter)
|
||||
CraftingRequirement::CraftingRequirement(const std::vector<ItemPair>&craftingItems,const uint32_t cost,const uint8_t availableChapter)
|
||||
:craftingItems(craftingItems),cost(cost),availableChapter(availableChapter){}
|
||||
|
||||
const std::vector<std::pair<IT,int>>&CraftingRequirement::GetItems()const{
|
||||
const std::vector<ItemPair>&CraftingRequirement::GetItems()const{
|
||||
return craftingItems;
|
||||
}
|
||||
const uint32_t CraftingRequirement::GetCost()const{
|
||||
|
@ -39,12 +39,12 @@ All rights reserved.
|
||||
#include "Item.h"
|
||||
|
||||
class CraftingRequirement{
|
||||
std::vector<std::pair<IT,int>>craftingItems;
|
||||
std::vector<ItemPair>craftingItems;
|
||||
uint32_t cost;
|
||||
uint8_t availableChapter;
|
||||
public:
|
||||
CraftingRequirement(const std::vector<std::pair<IT,int>>&craftingItems,const uint32_t cost,const uint8_t availableChapter);
|
||||
const std::vector<std::pair<IT,int>>&GetItems()const;
|
||||
CraftingRequirement(const std::vector<ItemPair>&craftingItems,const uint32_t cost,const uint8_t availableChapter);
|
||||
const std::vector<ItemPair>&GetItems()const;
|
||||
const uint32_t GetCost()const;
|
||||
const uint8_t GetAvailableChapter()const;
|
||||
};
|
@ -65,4 +65,6 @@ struct std::formatter<IT> {
|
||||
auto format(const IT&item,std::format_context&ctx) const {
|
||||
return std::format_to(ctx.out(),"{}",item.itemName);
|
||||
}
|
||||
};
|
||||
};
|
||||
|
||||
using ItemPair=std::pair<IT,uint32_t>;
|
@ -75,6 +75,7 @@ void Menu::InitializeConsumableInventoryWindow(){
|
||||
}
|
||||
button.lock()->selected=data.menu.I(A::LOADOUT_SLOT);
|
||||
data.game->SetLoadoutItem(button.lock()->selected,button.lock()->GetItem().lock()->ActualName());
|
||||
Menu::CloseMenu();
|
||||
return true;
|
||||
},InventoryCreator::Player_InventoryUpdate)END;
|
||||
Menu::AddInventoryListener(consumableWindow,"Consumables");
|
||||
|
@ -189,7 +189,7 @@ void ItemInfo::InitializeItems(){
|
||||
enhancementStats.SetAttribute(enhancementLevel,attr,dat.GetReal(attrIndex));
|
||||
attrIndex++;
|
||||
}
|
||||
std::vector<std::pair<IT,int>>itemsRequired;
|
||||
std::vector<ItemPair>itemsRequired;
|
||||
uint32_t goldCost=0;
|
||||
if(enhancementLevel!=0){ //The first level does not require any crafting, skip this level.
|
||||
while(data[key]["Crafting"][std::format("Level[{}]",enhancementLevel)].HasProperty(std::format("Item[{}]",itemsRequired.size()))){
|
||||
@ -222,7 +222,7 @@ void ItemInfo::InitializeItems(){
|
||||
}
|
||||
|
||||
if(data[key].HasProperty("Crafting")&&!data[key]["Crafting"].HasProperty("Level[1]")){
|
||||
std::vector<std::pair<IT,int>>itemsRequired;
|
||||
std::vector<ItemPair>itemsRequired;
|
||||
uint32_t goldCost=0;
|
||||
uint8_t availableChapter=1;
|
||||
//If the item has a key called "Crafting" but did not specify a level number, then we assume this item just has one base level for normal crafting and thus we will add the requirements to craft this item under enhancement level 1.
|
||||
@ -357,7 +357,7 @@ std::string ItemProps::GetStringProp(const std::string&prop,size_t index)const{
|
||||
|
||||
const uint32_t ItemProps::PropCount(const std::string&prop)const{
|
||||
if(customProps->HasProperty(prop)) return (*customProps)[prop].GetValueCount();
|
||||
else return (*scriptProps)[prop].GetValueCount();
|
||||
else return uint32_t((*scriptProps)[prop].GetValueCount());
|
||||
}
|
||||
|
||||
void ItemInfo::InitializeScripts(){
|
||||
@ -367,7 +367,7 @@ void ItemInfo::InitializeScripts(){
|
||||
int restoreAmt=props.GetIntProp(propName);
|
||||
action(game,restoreAmt);
|
||||
if(restoreAmt>0&&props.PropCount(propName)==3){
|
||||
game->GetPlayer()->AddBuff(RESTORATION,props.GetFloatProp(propName,2),restoreAmt,props.GetFloatProp(propName,1),action);
|
||||
game->GetPlayer()->AddBuff(RESTORATION,props.GetFloatProp(propName,2),float(restoreAmt),props.GetFloatProp(propName,1),action);
|
||||
}
|
||||
};
|
||||
ParseItemScriptData("HP Restore",[&](AiL*game,int restoreAmt){
|
||||
@ -404,7 +404,7 @@ void ItemInfo::InitializeScripts(){
|
||||
int restoreAmt=props.GetIntProp(propName);
|
||||
action(game,restoreAmt);
|
||||
if(restoreAmt>0&&props.PropCount(propName)==3){
|
||||
game->GetPlayer()->AddBuff(RESTORATION_DURING_CAST,props.GetFloatProp(propName,2),restoreAmt,props.GetFloatProp(propName,1),action);
|
||||
game->GetPlayer()->AddBuff(RESTORATION_DURING_CAST,props.GetFloatProp(propName,2),float(restoreAmt),props.GetFloatProp(propName,1),action);
|
||||
}
|
||||
};
|
||||
ParseItemScriptData("HP Restore",[&](AiL*game,int restoreAmt){
|
||||
@ -658,8 +658,11 @@ const std::string Item::Description(CompactText compact)const{
|
||||
}
|
||||
description+='\n';
|
||||
description+=GetStats().GetStatsString(Stats::NO_MAX_HIGHLIGHT,compact);
|
||||
if(ItemSet()){
|
||||
const::ItemSet*const set=ItemSet().value();
|
||||
|
||||
std::optional<const::ItemSet*const>setOpt=ItemSet();
|
||||
|
||||
if(setOpt){
|
||||
const::ItemSet*const set=setOpt.value();
|
||||
if(compact==COMPACT){
|
||||
description+="\n"+set->GetSetName()+" Set - ";
|
||||
}else{
|
||||
@ -688,7 +691,7 @@ const std::string Item::Description(CompactText compact)const{
|
||||
size_t enhanceIndex=std::min(EnhancementLevel()+1,"Item.Item Max Enhancement Level"_I);
|
||||
if(IsEquippable()&&Inventory::GetItemCount(ActualName())==0)enhanceIndex=0;
|
||||
|
||||
const EnhancementLevelInfo&info=GetEnhancementInfo()[enhanceIndex];
|
||||
const EnhancementLevelInfo&info=GetEnhancementInfo()[int(enhanceIndex)];
|
||||
for(const auto&[name,amt]:info.craftingRequirement.GetItems()){
|
||||
description+=std::format("{}{} x{} ({})\n",
|
||||
Inventory::GetItemCount(name)<amt?"#FF0000":"#FFFFFF",
|
||||
@ -818,14 +821,14 @@ const std::optional<const ItemSet *const>ItemInfo::ItemSet()const{
|
||||
};
|
||||
|
||||
const Stats&ItemSet::operator[](int setPieces)const{
|
||||
if(setPieces<=0||setPieces>=9)ERR("Piece count is invalid! Expecting a value (1-8) but got "<<setPieces);
|
||||
return setBonuses[setPieces];
|
||||
if(setPieces-1<=-1||setPieces-1>=setBonuses.size())ERR("Piece count is invalid! Expecting a value (1-8) but got "<<setPieces);
|
||||
return setBonuses[setPieces-1];
|
||||
};
|
||||
|
||||
void ItemSet::AddSetBonus(std::string setName,int pieceCount,Stats&bonuses){
|
||||
if(pieceCount<=0||pieceCount>=9)ERR("Piece count is invalid! Expecting a value (1-8) but got "<<pieceCount);
|
||||
if(pieceCount-1<=-1||pieceCount-1>=sets[setName].setBonuses.size())ERR("Piece count is invalid! Expecting a value (1-8) but got "<<pieceCount);
|
||||
sets[setName].name=setName;
|
||||
for(int i=pieceCount;i<sets[setName].setBonuses.size();i++){
|
||||
for(int i=pieceCount-1;i<sets[setName].setBonuses.size();i++){
|
||||
sets[setName].setBonuses[i]+=bonuses;
|
||||
}
|
||||
sets[setName].setBonusBreakpoints.push_back({pieceCount,bonuses});
|
||||
@ -1078,7 +1081,7 @@ void Stats::InitializeDamageReductionTable(){
|
||||
}
|
||||
}
|
||||
|
||||
void EnhancementInfo::SetCraftingRequirements(const int enhanceLevel,const std::vector<std::pair<IT,int>>&requiredItems,const uint32_t goldCost,const uint8_t availableChapter){
|
||||
void EnhancementInfo::SetCraftingRequirements(const int enhanceLevel,const std::vector<ItemPair>&requiredItems,const uint32_t goldCost,const uint8_t availableChapter){
|
||||
while(craftingRequirements.size()<=enhanceLevel){
|
||||
craftingRequirements.push_back(CraftingRequirement({},0,availableChapter));
|
||||
}
|
||||
|
@ -126,7 +126,7 @@ private:
|
||||
std::vector<CraftingRequirement>craftingRequirements;
|
||||
public:
|
||||
void SetAttribute(int enhanceLevel,ItemAttribute attribute,float value);
|
||||
void SetCraftingRequirements(const int enhanceLevel,const std::vector<std::pair<IT,int>>&requiredItems,const uint32_t goldCost,const uint8_t availableChapter);
|
||||
void SetCraftingRequirements(const int enhanceLevel,const std::vector<ItemPair>&requiredItems,const uint32_t goldCost,const uint8_t availableChapter);
|
||||
const bool CanBeEnhanced()const;
|
||||
const EnhancementLevelInfo operator[](int level)const;
|
||||
const size_t size()const;
|
||||
@ -146,7 +146,7 @@ public:
|
||||
class ItemSet{
|
||||
friend class ItemInfo;
|
||||
static std::map<std::string,ItemSet>sets;
|
||||
std::array<Stats,8>setBonuses;
|
||||
std::array<Stats,8>setBonuses; //Stores the set bonuses with the amount of pieces being the index array - 1 internally. So if we wanted the set bonus for having 1 of this set equipped, we ask for [1] (and it's stored internally at index 0.)
|
||||
std::string name;
|
||||
std::vector<std::pair<int,Stats>>setBonusBreakpoints;
|
||||
public:
|
||||
@ -308,7 +308,7 @@ class ItemInfo{
|
||||
std::string category;
|
||||
float castTime=0;
|
||||
float cooldownTime=0;
|
||||
EquipSlot slot;
|
||||
EquipSlot slot=EquipSlot::NONE;
|
||||
EnhancementInfo enhancement;
|
||||
::Decal*img;
|
||||
EventName useSound="";
|
||||
|
@ -116,11 +116,13 @@ const void SaveFile::SaveGame(){
|
||||
if(unlockName=="WORLD_MAP")continue; //This is a special exception, because the world map is not an actual stage.
|
||||
|
||||
auto opt_cp=State_OverworldMap::ConnectionPointFromString(unlockName);
|
||||
if(!opt_cp.has_value())ERR(std::format("WARNING! Could not find connection point {}! THIS SHOULD NOT BE HAPPENING! Potential invalid unlock name.",unlockName));
|
||||
if(opt_cp.value()->Visited()){
|
||||
saveFile["Unlocks"][unlockName].SetString("True",1U);
|
||||
if(!opt_cp.has_value()){ERR(std::format("WARNING! Could not find connection point {}! THIS SHOULD NOT BE HAPPENING! Potential invalid unlock name.",unlockName));
|
||||
}else{
|
||||
saveFile["Unlocks"][unlockName].SetString("False",1U);
|
||||
if(opt_cp.value()->Visited()){
|
||||
saveFile["Unlocks"][unlockName].SetString("True",1U);
|
||||
}else{
|
||||
saveFile["Unlocks"][unlockName].SetString("False",1U);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -38,8 +38,8 @@ All rights reserved.
|
||||
#pragma once
|
||||
#define VERSION_MAJOR 0
|
||||
#define VERSION_MINOR 5
|
||||
#define VERSION_PATCH 0
|
||||
#define VERSION_BUILD 8023
|
||||
#define VERSION_PATCH 1
|
||||
#define VERSION_BUILD 8038
|
||||
|
||||
#define stringify(a) stringify_(a)
|
||||
#define stringify_(a) #a
|
||||
|
@ -78,7 +78,7 @@ namespace olc {
|
||||
}
|
||||
|
||||
Font(const Font &other) = delete;
|
||||
Font(Font &&other) {
|
||||
Font(Font &&other)noexcept{
|
||||
fontFace = other.fontFace;
|
||||
fontSize = other.fontSize;
|
||||
fallbacks = std::move(other.fallbacks);
|
||||
@ -87,7 +87,7 @@ namespace olc {
|
||||
}
|
||||
|
||||
Font &operator=(const Font &other) = delete;
|
||||
Font &operator=(Font &&other) {
|
||||
Font &operator=(Font &&other)noexcept{
|
||||
fontFace = other.fontFace;
|
||||
fontSize = other.fontSize;
|
||||
fallbacks = std::move(other.fallbacks);
|
||||
@ -109,8 +109,8 @@ namespace olc {
|
||||
pen.y = 0;
|
||||
|
||||
olc::FontRect rect;
|
||||
int intMax = std::numeric_limits<int>::max();
|
||||
int intMin = std::numeric_limits<int>::min();
|
||||
constexpr int intMax = std::numeric_limits<int>::max();
|
||||
constexpr int intMin = std::numeric_limits<int>::min();
|
||||
|
||||
int minX = intMax;
|
||||
int minY = intMax;
|
||||
@ -298,24 +298,26 @@ namespace olc {
|
||||
pen.y += kern.y;
|
||||
}
|
||||
|
||||
FT_Set_Transform(toUse->fontFace, nullptr, &pen);
|
||||
FT_Error error = FT_Load_Char(toUse->fontFace, chr,
|
||||
FT_LOAD_RENDER | FT_LOAD_COLOR);
|
||||
if(toUse!=nullptr){
|
||||
FT_Set_Transform(toUse->fontFace, nullptr, &pen);
|
||||
FT_Error error = FT_Load_Char(toUse->fontFace, chr,
|
||||
FT_LOAD_RENDER | FT_LOAD_COLOR);
|
||||
|
||||
FT_Bitmap bmp = toUse->fontFace->glyph->bitmap;
|
||||
FT_GlyphSlot slot = toUse->fontFace->glyph;
|
||||
FT_Bitmap bmp = toUse->fontFace->glyph->bitmap;
|
||||
FT_GlyphSlot slot = toUse->fontFace->glyph;
|
||||
|
||||
pen.x += toUse->fontFace->glyph->advance.x;
|
||||
pen.y += toUse->fontFace->glyph->advance.y;
|
||||
pen.x += toUse->fontFace->glyph->advance.x;
|
||||
pen.y += toUse->fontFace->glyph->advance.y;
|
||||
|
||||
if(chr=='\n'){
|
||||
int scaled_line_spacing = fontFace->size->metrics.height;
|
||||
pen.y -=scaled_line_spacing;
|
||||
pen.x=rect.offset.x;
|
||||
} else {
|
||||
DrawBitmapTo(slot->bitmap_left,
|
||||
pge->ScreenHeight() - slot->bitmap_top, bmp, textCol,
|
||||
sprite);
|
||||
if(chr=='\n'){
|
||||
int scaled_line_spacing = fontFace->size->metrics.height;
|
||||
pen.y -=scaled_line_spacing;
|
||||
pen.x=rect.offset.x;
|
||||
} else {
|
||||
DrawBitmapTo(slot->bitmap_left,
|
||||
pge->ScreenHeight() - slot->bitmap_top, bmp, textCol,
|
||||
sprite);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -112,13 +112,13 @@ namespace olc::utils
|
||||
}
|
||||
|
||||
// Retrieves the Real Value of a Property (for a given index) or 0.0
|
||||
inline const double GetReal(const size_t nItem = 0) const
|
||||
inline const float GetReal(const size_t nItem = 0) const
|
||||
{
|
||||
return std::atof(GetString(nItem).c_str());
|
||||
}
|
||||
|
||||
// Sets the Real Value of a Property (for a given index)
|
||||
inline void SetReal(const double d, const size_t nItem = 0)
|
||||
inline void SetReal(const float d, const size_t nItem = 0)
|
||||
{
|
||||
SetString(std::to_string(d), nItem);
|
||||
}
|
||||
|
Binary file not shown.
Loading…
x
Reference in New Issue
Block a user