mirror of
https://github.com/vcmi/vcmi.git
synced 2024-12-26 22:57:00 +02:00
Refactor CArtPlace + use it for commanders
This commit is contained in:
parent
08252a1282
commit
baeb3c9e55
@ -2540,7 +2540,7 @@ void CPlayerInterface::askToAssembleArtifact(const ArtifactLocation &al)
|
|||||||
al.slot.num);
|
al.slot.num);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
CArtPlace::askToAssemble(art, al.slot, hero);
|
CHeroArtPlace::askToAssemble(art, al.slot, hero);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -31,15 +31,13 @@
|
|||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
CArtPlace::CArtPlace(Point position, const CArtifactInstance * Art):
|
CHeroArtPlace::CHeroArtPlace(Point position, const CArtifactInstance * Art): CArtPlace(position, Art),
|
||||||
locked(false), picked(false), marked(false), ourArt(Art)
|
locked(false), picked(false), marked(false)
|
||||||
{
|
{
|
||||||
pos += position;
|
|
||||||
pos.w = pos.h = 44;
|
|
||||||
createImage();
|
createImage();
|
||||||
}
|
}
|
||||||
|
|
||||||
void CArtPlace::createImage()
|
void CHeroArtPlace::createImage()
|
||||||
{
|
{
|
||||||
OBJ_CONSTRUCTION_CAPTURING_ALL;
|
OBJ_CONSTRUCTION_CAPTURING_ALL;
|
||||||
|
|
||||||
@ -57,7 +55,7 @@ void CArtPlace::createImage()
|
|||||||
selection->disable();
|
selection->disable();
|
||||||
}
|
}
|
||||||
|
|
||||||
void CArtPlace::lockSlot(bool on)
|
void CHeroArtPlace::lockSlot(bool on)
|
||||||
{
|
{
|
||||||
if (locked == on)
|
if (locked == on)
|
||||||
return;
|
return;
|
||||||
@ -70,7 +68,7 @@ void CArtPlace::lockSlot(bool on)
|
|||||||
image->setFrame(ourArt->artType->iconIndex);
|
image->setFrame(ourArt->artType->iconIndex);
|
||||||
}
|
}
|
||||||
|
|
||||||
void CArtPlace::pickSlot(bool on)
|
void CHeroArtPlace::pickSlot(bool on)
|
||||||
{
|
{
|
||||||
if (picked == on)
|
if (picked == on)
|
||||||
return;
|
return;
|
||||||
@ -82,7 +80,7 @@ void CArtPlace::pickSlot(bool on)
|
|||||||
image->enable();
|
image->enable();
|
||||||
}
|
}
|
||||||
|
|
||||||
void CArtPlace::selectSlot(bool on)
|
void CHeroArtPlace::selectSlot(bool on)
|
||||||
{
|
{
|
||||||
if (marked == on)
|
if (marked == on)
|
||||||
return;
|
return;
|
||||||
@ -94,7 +92,7 @@ void CArtPlace::selectSlot(bool on)
|
|||||||
selection->disable();
|
selection->disable();
|
||||||
}
|
}
|
||||||
|
|
||||||
void CArtPlace::clickLeft(tribool down, bool previousState)
|
void CHeroArtPlace::clickLeft(tribool down, bool previousState)
|
||||||
{
|
{
|
||||||
//LRClickableAreaWTextComp::clickLeft(down);
|
//LRClickableAreaWTextComp::clickLeft(down);
|
||||||
bool inBackpack = slotID >= GameConstants::BACKPACK_START,
|
bool inBackpack = slotID >= GameConstants::BACKPACK_START,
|
||||||
@ -211,7 +209,7 @@ void CArtPlace::clickLeft(tribool down, bool previousState)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
bool CArtPlace::askToAssemble(const CArtifactInstance *art, ArtifactPosition slot,
|
bool CHeroArtPlace::askToAssemble(const CArtifactInstance *art, ArtifactPosition slot,
|
||||||
const CGHeroInstance *hero)
|
const CGHeroInstance *hero)
|
||||||
{
|
{
|
||||||
assert(art != nullptr);
|
assert(art != nullptr);
|
||||||
@ -239,7 +237,7 @@ bool CArtPlace::askToAssemble(const CArtifactInstance *art, ArtifactPosition slo
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
void CArtPlace::clickRight(tribool down, bool previousState)
|
void CHeroArtPlace::clickRight(tribool down, bool previousState)
|
||||||
{
|
{
|
||||||
if(down && ourArt && !locked && text.size() && !picked) //if there is no description or it's a lock, do nothing ;]
|
if(down && ourArt && !locked && text.size() && !picked) //if there is no description or it's a lock, do nothing ;]
|
||||||
{
|
{
|
||||||
@ -277,7 +275,7 @@ void CArtPlace::clickRight(tribool down, bool previousState)
|
|||||||
/**
|
/**
|
||||||
* Selects artifact slot so that the containing artifact looks like it's picked up.
|
* Selects artifact slot so that the containing artifact looks like it's picked up.
|
||||||
*/
|
*/
|
||||||
void CArtPlace::select ()
|
void CHeroArtPlace::select ()
|
||||||
{
|
{
|
||||||
if (locked)
|
if (locked)
|
||||||
return;
|
return;
|
||||||
@ -288,7 +286,7 @@ void CArtPlace::select ()
|
|||||||
{
|
{
|
||||||
for(int i = 0; i < GameConstants::BACKPACK_START; i++)
|
for(int i = 0; i < GameConstants::BACKPACK_START; i++)
|
||||||
{
|
{
|
||||||
CArtPlace * ap = ourOwner->getArtPlace(i);
|
CHeroArtPlace * ap = ourOwner->getArtPlace(i);
|
||||||
if(nullptr != ap)//getArtPlace may return null
|
if(nullptr != ap)//getArtPlace may return null
|
||||||
ap->pickSlot(ourArt->isPart(ap->ourArt));
|
ap->pickSlot(ourArt->isPart(ap->ourArt));
|
||||||
}
|
}
|
||||||
@ -308,7 +306,7 @@ void CArtPlace::select ()
|
|||||||
/**
|
/**
|
||||||
* Deselects the artifact slot.
|
* Deselects the artifact slot.
|
||||||
*/
|
*/
|
||||||
void CArtPlace::deselect ()
|
void CHeroArtPlace::deselect ()
|
||||||
{
|
{
|
||||||
pickSlot(false);
|
pickSlot(false);
|
||||||
if(ourArt && ourArt->canBeDisassembled()) //combined art returned to its slot -> restore locks
|
if(ourArt && ourArt->canBeDisassembled()) //combined art returned to its slot -> restore locks
|
||||||
@ -333,7 +331,7 @@ void CArtPlace::deselect ()
|
|||||||
ourOwner->safeRedraw();
|
ourOwner->safeRedraw();
|
||||||
}
|
}
|
||||||
|
|
||||||
void CArtPlace::showAll(SDL_Surface * to)
|
void CHeroArtPlace::showAll(SDL_Surface * to)
|
||||||
{
|
{
|
||||||
if (ourArt && !picked && ourArt == ourOwner->curHero->getArt(slotID, false)) //last condition is needed for disassembling -> artifact may be gone, but we don't know yet TODO: real, nice solution
|
if (ourArt && !picked && ourArt == ourOwner->curHero->getArt(slotID, false)) //last condition is needed for disassembling -> artifact may be gone, but we don't know yet TODO: real, nice solution
|
||||||
{
|
{
|
||||||
@ -358,7 +356,7 @@ void CArtPlace::showAll(SDL_Surface * to)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
bool CArtPlace::fitsHere(const CArtifactInstance * art) const
|
bool CHeroArtPlace::fitsHere(const CArtifactInstance * art) const
|
||||||
{
|
{
|
||||||
// You can place 'no artifact' anywhere.
|
// You can place 'no artifact' anywhere.
|
||||||
if(!art)
|
if(!art)
|
||||||
@ -371,12 +369,12 @@ bool CArtPlace::fitsHere(const CArtifactInstance * art) const
|
|||||||
return art->canBePutAt(ArtifactLocation(ourOwner->curHero, slotID), true);
|
return art->canBePutAt(ArtifactLocation(ourOwner->curHero, slotID), true);
|
||||||
}
|
}
|
||||||
|
|
||||||
void CArtPlace::setMeAsDest(bool backpackAsVoid /*= true*/)
|
void CHeroArtPlace::setMeAsDest(bool backpackAsVoid /*= true*/)
|
||||||
{
|
{
|
||||||
ourOwner->commonInfo->dst.setTo(this, backpackAsVoid);
|
ourOwner->commonInfo->dst.setTo(this, backpackAsVoid);
|
||||||
}
|
}
|
||||||
|
|
||||||
void CArtPlace::setArtifact(const CArtifactInstance *art)
|
void CHeroArtPlace::setArtifact(const CArtifactInstance *art)
|
||||||
{
|
{
|
||||||
baseType = -1; //by default we don't store any component
|
baseType = -1; //by default we don't store any component
|
||||||
ourArt = art;
|
ourArt = art;
|
||||||
@ -544,7 +542,7 @@ void CArtifactsOfHero::unmarkLocalSlots(bool withRedraw /*= true*/)
|
|||||||
{
|
{
|
||||||
for(auto p : artWorn)
|
for(auto p : artWorn)
|
||||||
p.second->selectSlot(false);
|
p.second->selectSlot(false);
|
||||||
for(CArtPlace *place : backpack)
|
for(CHeroArtPlace *place : backpack)
|
||||||
place->selectSlot(false);
|
place->selectSlot(false);
|
||||||
|
|
||||||
if(withRedraw)
|
if(withRedraw)
|
||||||
@ -554,7 +552,7 @@ void CArtifactsOfHero::unmarkLocalSlots(bool withRedraw /*= true*/)
|
|||||||
/**
|
/**
|
||||||
* Assigns an artifacts to an artifact place depending on it's new slot ID.
|
* Assigns an artifacts to an artifact place depending on it's new slot ID.
|
||||||
*/
|
*/
|
||||||
void CArtifactsOfHero::setSlotData(CArtPlace* artPlace, ArtifactPosition slotID)
|
void CArtifactsOfHero::setSlotData(CHeroArtPlace* artPlace, ArtifactPosition slotID)
|
||||||
{
|
{
|
||||||
if(!artPlace && slotID >= GameConstants::BACKPACK_START) //spurious call from artifactMoved in attempt to update hidden backpack slot
|
if(!artPlace && slotID >= GameConstants::BACKPACK_START) //spurious call from artifactMoved in attempt to update hidden backpack slot
|
||||||
{
|
{
|
||||||
@ -576,14 +574,14 @@ void CArtifactsOfHero::setSlotData(CArtPlace* artPlace, ArtifactPosition slotID)
|
|||||||
/**
|
/**
|
||||||
* Makes given artifact slot appear as empty with a certain slot ID.
|
* Makes given artifact slot appear as empty with a certain slot ID.
|
||||||
*/
|
*/
|
||||||
void CArtifactsOfHero::eraseSlotData (CArtPlace* artPlace, ArtifactPosition slotID)
|
void CArtifactsOfHero::eraseSlotData (CHeroArtPlace* artPlace, ArtifactPosition slotID)
|
||||||
{
|
{
|
||||||
artPlace->pickSlot(false);
|
artPlace->pickSlot(false);
|
||||||
artPlace->slotID = slotID;
|
artPlace->slotID = slotID;
|
||||||
artPlace->setArtifact(nullptr);
|
artPlace->setArtifact(nullptr);
|
||||||
}
|
}
|
||||||
|
|
||||||
CArtifactsOfHero::CArtifactsOfHero(std::map<ArtifactPosition, CArtPlace *> ArtWorn, std::vector<CArtPlace *> Backpack,
|
CArtifactsOfHero::CArtifactsOfHero(std::map<ArtifactPosition, CHeroArtPlace *> ArtWorn, std::vector<CHeroArtPlace *> Backpack,
|
||||||
CButton *leftScroll, CButton *rightScroll, bool createCommonPart):
|
CButton *leftScroll, CButton *rightScroll, bool createCommonPart):
|
||||||
|
|
||||||
curHero(nullptr),
|
curHero(nullptr),
|
||||||
@ -642,7 +640,7 @@ CArtifactsOfHero::CArtifactsOfHero(const Point& position, bool createCommonPart
|
|||||||
// Create slots for worn artifacts.
|
// Create slots for worn artifacts.
|
||||||
for (size_t g = 0; g < GameConstants::BACKPACK_START ; g++)
|
for (size_t g = 0; g < GameConstants::BACKPACK_START ; g++)
|
||||||
{
|
{
|
||||||
artWorn[ArtifactPosition(g)] = new CArtPlace(slotPos[g]);
|
artWorn[ArtifactPosition(g)] = new CHeroArtPlace(slotPos[g]);
|
||||||
artWorn[ArtifactPosition(g)]->ourOwner = this;
|
artWorn[ArtifactPosition(g)]->ourOwner = this;
|
||||||
eraseSlotData(artWorn[ArtifactPosition(g)], ArtifactPosition(g));
|
eraseSlotData(artWorn[ArtifactPosition(g)], ArtifactPosition(g));
|
||||||
}
|
}
|
||||||
@ -650,7 +648,7 @@ CArtifactsOfHero::CArtifactsOfHero(const Point& position, bool createCommonPart
|
|||||||
// Create slots for the backpack.
|
// Create slots for the backpack.
|
||||||
for(size_t s=0; s<5; ++s)
|
for(size_t s=0; s<5; ++s)
|
||||||
{
|
{
|
||||||
auto add = new CArtPlace(Point(403 + 46 * s, 365));
|
auto add = new CHeroArtPlace(Point(403 + 46 * s, 365));
|
||||||
|
|
||||||
add->ourOwner = this;
|
add->ourOwner = this;
|
||||||
eraseSlotData(add, ArtifactPosition(GameConstants::BACKPACK_START + s));
|
eraseSlotData(add, ArtifactPosition(GameConstants::BACKPACK_START + s));
|
||||||
@ -750,7 +748,7 @@ void CArtifactsOfHero::artifactMoved(const ArtifactLocation &src, const Artifact
|
|||||||
assert(dst.slot >= GameConstants::BACKPACK_START);
|
assert(dst.slot >= GameConstants::BACKPACK_START);
|
||||||
commonInfo->reset();
|
commonInfo->reset();
|
||||||
|
|
||||||
CArtPlace *ap = nullptr;
|
CHeroArtPlace *ap = nullptr;
|
||||||
for(CArtifactsOfHero *aoh : commonInfo->participants)
|
for(CArtifactsOfHero *aoh : commonInfo->participants)
|
||||||
{
|
{
|
||||||
if(dst.isHolder(aoh->curHero))
|
if(dst.isHolder(aoh->curHero))
|
||||||
@ -815,7 +813,7 @@ void CArtifactsOfHero::artifactRemoved(const ArtifactLocation &al)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
CArtPlace * CArtifactsOfHero::getArtPlace(int slot)
|
CHeroArtPlace * CArtifactsOfHero::getArtPlace(int slot)
|
||||||
{
|
{
|
||||||
if(slot < GameConstants::BACKPACK_START)
|
if(slot < GameConstants::BACKPACK_START)
|
||||||
{
|
{
|
||||||
@ -829,7 +827,7 @@ CArtPlace * CArtifactsOfHero::getArtPlace(int slot)
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
for(CArtPlace *ap : backpack)
|
for(CHeroArtPlace *ap : backpack)
|
||||||
if(ap->slotID == slot)
|
if(ap->slotID == slot)
|
||||||
return ap;
|
return ap;
|
||||||
return nullptr;
|
return nullptr;
|
||||||
@ -919,7 +917,7 @@ CArtifactsOfHero::SCommonPart::Artpos::Artpos()
|
|||||||
clear();
|
clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
void CArtifactsOfHero::SCommonPart::Artpos::setTo(const CArtPlace *place, bool dontTakeBackpack)
|
void CArtifactsOfHero::SCommonPart::Artpos::setTo(const CHeroArtPlace *place, bool dontTakeBackpack)
|
||||||
{
|
{
|
||||||
slotID = place->slotID;
|
slotID = place->slotID;
|
||||||
AOH = place->ourOwner;
|
AOH = place->ourOwner;
|
||||||
@ -945,3 +943,85 @@ bool CArtifactsOfHero::SCommonPart::Artpos::valid()
|
|||||||
assert(AOH && art);
|
assert(AOH && art);
|
||||||
return art == AOH->curHero->getArt(slotID);
|
return art == AOH->curHero->getArt(slotID);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
CArtPlace::CArtPlace(Point position, const CArtifactInstance * Art) : ourArt(Art)
|
||||||
|
{
|
||||||
|
pos += position;
|
||||||
|
pos.w = pos.h = 44;
|
||||||
|
}
|
||||||
|
|
||||||
|
void CArtPlace::clickLeft(tribool down, bool previousState)
|
||||||
|
{
|
||||||
|
LRClickableAreaWTextComp::clickLeft(down, previousState);
|
||||||
|
}
|
||||||
|
|
||||||
|
void CArtPlace::clickRight(tribool down, bool previousState)
|
||||||
|
{
|
||||||
|
LRClickableAreaWTextComp::clickRight(down, previousState);
|
||||||
|
}
|
||||||
|
|
||||||
|
CCommanderArtPlace::CCommanderArtPlace(Point position, const CArtifactInstance * Art) : CArtPlace(position, Art)
|
||||||
|
{
|
||||||
|
createImage();
|
||||||
|
setArtifact(Art);
|
||||||
|
}
|
||||||
|
|
||||||
|
void CCommanderArtPlace::clickLeft(tribool down, bool previousState)
|
||||||
|
{
|
||||||
|
if(ourArt && text.size())
|
||||||
|
CArtPlace::clickLeft(down, previousState);
|
||||||
|
}
|
||||||
|
|
||||||
|
void CCommanderArtPlace::clickRight(tribool down, bool previousState)
|
||||||
|
{
|
||||||
|
if (down && ourArt && text.size())
|
||||||
|
CArtPlace::clickRight(down, previousState);
|
||||||
|
}
|
||||||
|
|
||||||
|
void CCommanderArtPlace::createImage()
|
||||||
|
{
|
||||||
|
OBJ_CONSTRUCTION_CAPTURING_ALL;
|
||||||
|
|
||||||
|
int graphic = 0;
|
||||||
|
if (ourArt)
|
||||||
|
graphic = ourArt->artType->iconIndex;
|
||||||
|
|
||||||
|
image = new CAnimImage("artifact", graphic);
|
||||||
|
if (!ourArt)
|
||||||
|
image->disable();
|
||||||
|
}
|
||||||
|
|
||||||
|
void CCommanderArtPlace::setArtifact(const CArtifactInstance * art)
|
||||||
|
{
|
||||||
|
baseType = -1; //by default we don't store any component
|
||||||
|
ourArt = art;
|
||||||
|
if (!art)
|
||||||
|
{
|
||||||
|
image->disable();
|
||||||
|
text = std::string();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
image->enable();
|
||||||
|
image->setFrame(art->artType->iconIndex);
|
||||||
|
|
||||||
|
text = art->getEffectiveDescription();
|
||||||
|
|
||||||
|
if (art->artType->id == ArtifactID::SPELL_SCROLL)
|
||||||
|
{
|
||||||
|
int spellID = art->getGivenSpellID();
|
||||||
|
if (spellID >= 0)
|
||||||
|
{
|
||||||
|
//add spell component info (used to provide a pic in r-click popup)
|
||||||
|
baseType = CComponent::spell;
|
||||||
|
type = spellID;
|
||||||
|
bonusValue = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
baseType = CComponent::artifact;
|
||||||
|
type = art->artType->id;
|
||||||
|
bonusValue = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@ -41,13 +41,40 @@ public:
|
|||||||
void artifactAssembled(const ArtifactLocation &artLoc) override;
|
void artifactAssembled(const ArtifactLocation &artLoc) override;
|
||||||
};
|
};
|
||||||
|
|
||||||
/// Artifacts can be placed there. Gets shown at the hero window
|
class CArtPlace : public LRClickableAreaWTextComp
|
||||||
class CArtPlace: public LRClickableAreaWTextComp
|
|
||||||
{
|
{
|
||||||
|
protected:
|
||||||
CAnimImage *image;
|
CAnimImage *image;
|
||||||
|
virtual void createImage()=0;
|
||||||
|
public:
|
||||||
|
const CArtifactInstance * ourArt; // should be changed only with setArtifact()
|
||||||
|
|
||||||
|
CArtPlace(Point position, const CArtifactInstance * Art = nullptr); //c-tor
|
||||||
|
void clickLeft(tribool down, bool previousState) override;
|
||||||
|
void clickRight(tribool down, bool previousState) override;
|
||||||
|
|
||||||
|
virtual void setArtifact(const CArtifactInstance *art)=0;
|
||||||
|
};
|
||||||
|
|
||||||
|
class CCommanderArtPlace : public CArtPlace
|
||||||
|
{
|
||||||
|
protected:
|
||||||
|
void createImage() override;
|
||||||
|
public:
|
||||||
|
CCommanderArtPlace(Point position, const CArtifactInstance * Art = nullptr); //c-tor
|
||||||
|
void clickLeft(tribool down, bool previousState) override;
|
||||||
|
void clickRight(tribool down, bool previousState) override;
|
||||||
|
|
||||||
|
virtual void setArtifact(const CArtifactInstance * art) override;
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
/// Artifacts can be placed there. Gets shown at the hero window
|
||||||
|
class CHeroArtPlace: public CArtPlace
|
||||||
|
{
|
||||||
CAnimImage *selection;
|
CAnimImage *selection;
|
||||||
|
|
||||||
void createImage();
|
void createImage() override;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
// consider these members as const - change them only with appropriate methods e.g. lockSlot()
|
// consider these members as const - change them only with appropriate methods e.g. lockSlot()
|
||||||
@ -62,18 +89,17 @@ public:
|
|||||||
void selectSlot(bool on);
|
void selectSlot(bool on);
|
||||||
|
|
||||||
CArtifactsOfHero * ourOwner;
|
CArtifactsOfHero * ourOwner;
|
||||||
const CArtifactInstance * ourArt; // should be changed only with setArtifact()
|
|
||||||
|
|
||||||
CArtPlace(Point position, const CArtifactInstance * Art = nullptr); //c-tor
|
CHeroArtPlace(Point position, const CArtifactInstance * Art = nullptr); //c-tor
|
||||||
void clickLeft(tribool down, bool previousState) override;
|
void clickLeft(tribool down, bool previousState) override;
|
||||||
void clickRight(tribool down, bool previousState) override;
|
void clickRight(tribool down, bool previousState) override;
|
||||||
void select ();
|
void select();
|
||||||
void deselect ();
|
void deselect();
|
||||||
void showAll(SDL_Surface * to) override;
|
void showAll(SDL_Surface * to) override;
|
||||||
bool fitsHere (const CArtifactInstance * art) const; //returns true if given artifact can be placed here
|
bool fitsHere (const CArtifactInstance * art) const; //returns true if given artifact can be placed here
|
||||||
|
|
||||||
void setMeAsDest(bool backpackAsVoid = true);
|
void setMeAsDest(bool backpackAsVoid = true);
|
||||||
void setArtifact(const CArtifactInstance *art);
|
void setArtifact(const CArtifactInstance *art) override;
|
||||||
static bool askToAssemble(const CArtifactInstance *art, ArtifactPosition slot,
|
static bool askToAssemble(const CArtifactInstance *art, ArtifactPosition slot,
|
||||||
const CGHeroInstance *hero);
|
const CGHeroInstance *hero);
|
||||||
};
|
};
|
||||||
@ -83,9 +109,9 @@ class CArtifactsOfHero : public CIntObject
|
|||||||
{
|
{
|
||||||
const CGHeroInstance * curHero;
|
const CGHeroInstance * curHero;
|
||||||
|
|
||||||
std::map<ArtifactPosition, CArtPlace *> artWorn;
|
std::map<ArtifactPosition, CHeroArtPlace *> artWorn;
|
||||||
|
|
||||||
std::vector<CArtPlace *> backpack; //hero's visible backpack (only 5 elements!)
|
std::vector<CHeroArtPlace *> backpack; //hero's visible backpack (only 5 elements!)
|
||||||
int backpackPos; //number of first art visible in backpack (in hero's vector)
|
int backpackPos; //number of first art visible in backpack (in hero's vector)
|
||||||
|
|
||||||
public:
|
public:
|
||||||
@ -99,7 +125,7 @@ public:
|
|||||||
|
|
||||||
Artpos();
|
Artpos();
|
||||||
void clear();
|
void clear();
|
||||||
void setTo(const CArtPlace *place, bool dontTakeBackpack);
|
void setTo(const CHeroArtPlace *place, bool dontTakeBackpack);
|
||||||
bool valid();
|
bool valid();
|
||||||
bool operator==(const ArtifactLocation &al) const;
|
bool operator==(const ArtifactLocation &al) const;
|
||||||
} src, dst;
|
} src, dst;
|
||||||
@ -115,14 +141,14 @@ public:
|
|||||||
CButton * leftArtRoll, * rightArtRoll;
|
CButton * leftArtRoll, * rightArtRoll;
|
||||||
bool allowedAssembling;
|
bool allowedAssembling;
|
||||||
std::multiset<const CArtifactInstance*> artifactsOnAltar; //artifacts id that are technically present in backpack but in GUI are moved to the altar - they'll be omitted in backpack slots
|
std::multiset<const CArtifactInstance*> artifactsOnAltar; //artifacts id that are technically present in backpack but in GUI are moved to the altar - they'll be omitted in backpack slots
|
||||||
std::function<void(CArtPlace*)> highlightModeCallback; //if set, clicking on art place doesn't pick artifact but highlights the slot and calls this function
|
std::function<void(CHeroArtPlace*)> highlightModeCallback; //if set, clicking on art place doesn't pick artifact but highlights the slot and calls this function
|
||||||
|
|
||||||
void realizeCurrentTransaction(); //calls callback with parameters stored in commonInfo
|
void realizeCurrentTransaction(); //calls callback with parameters stored in commonInfo
|
||||||
void artifactMoved(const ArtifactLocation &src, const ArtifactLocation &dst);
|
void artifactMoved(const ArtifactLocation &src, const ArtifactLocation &dst);
|
||||||
void artifactRemoved(const ArtifactLocation &al);
|
void artifactRemoved(const ArtifactLocation &al);
|
||||||
void artifactAssembled(const ArtifactLocation &al);
|
void artifactAssembled(const ArtifactLocation &al);
|
||||||
void artifactDisassembled(const ArtifactLocation &al);
|
void artifactDisassembled(const ArtifactLocation &al);
|
||||||
CArtPlace *getArtPlace(int slot);//may return null
|
CHeroArtPlace *getArtPlace(int slot);//may return null
|
||||||
|
|
||||||
void setHero(const CGHeroInstance * hero);
|
void setHero(const CGHeroInstance * hero);
|
||||||
const CGHeroInstance *getHero() const;
|
const CGHeroInstance *getHero() const;
|
||||||
@ -133,17 +159,17 @@ public:
|
|||||||
void markPossibleSlots(const CArtifactInstance* art);
|
void markPossibleSlots(const CArtifactInstance* art);
|
||||||
void unmarkSlots(bool withRedraw = true); //unmarks slots in all visible AOHs
|
void unmarkSlots(bool withRedraw = true); //unmarks slots in all visible AOHs
|
||||||
void unmarkLocalSlots(bool withRedraw = true); //unmarks slots in that particular AOH
|
void unmarkLocalSlots(bool withRedraw = true); //unmarks slots in that particular AOH
|
||||||
void setSlotData (CArtPlace* artPlace, ArtifactPosition slotID);
|
void setSlotData (CHeroArtPlace* artPlace, ArtifactPosition slotID);
|
||||||
void updateWornSlots (bool redrawParent = true);
|
void updateWornSlots (bool redrawParent = true);
|
||||||
|
|
||||||
void updateSlot(ArtifactPosition i);
|
void updateSlot(ArtifactPosition i);
|
||||||
void eraseSlotData (CArtPlace* artPlace, ArtifactPosition slotID);
|
void eraseSlotData (CHeroArtPlace* artPlace, ArtifactPosition slotID);
|
||||||
|
|
||||||
CArtifactsOfHero(const Point& position, bool createCommonPart = false);
|
CArtifactsOfHero(const Point& position, bool createCommonPart = false);
|
||||||
//Alternative constructor, used if custom artifacts positioning required (Kingdom interface)
|
//Alternative constructor, used if custom artifacts positioning required (Kingdom interface)
|
||||||
CArtifactsOfHero(std::map<ArtifactPosition, CArtPlace *> ArtWorn, std::vector<CArtPlace *> Backpack,
|
CArtifactsOfHero(std::map<ArtifactPosition, CHeroArtPlace *> ArtWorn, std::vector<CHeroArtPlace *> Backpack,
|
||||||
CButton *leftScroll, CButton *rightScroll, bool createCommonPart = false);
|
CButton *leftScroll, CButton *rightScroll, bool createCommonPart = false);
|
||||||
~CArtifactsOfHero(); //d-tor
|
~CArtifactsOfHero(); //d-tor
|
||||||
void updateParentWindow();
|
void updateParentWindow();
|
||||||
friend class CArtPlace;
|
friend class CHeroArtPlace;
|
||||||
};
|
};
|
||||||
|
@ -4,6 +4,7 @@
|
|||||||
#include "../CGameInfo.h"
|
#include "../CGameInfo.h"
|
||||||
#include "../CPlayerInterface.h"
|
#include "../CPlayerInterface.h"
|
||||||
#include "../widgets/Buttons.h"
|
#include "../widgets/Buttons.h"
|
||||||
|
#include "../widgets/CArtifactHolder.h"
|
||||||
#include "../widgets/CComponent.h"
|
#include "../widgets/CComponent.h"
|
||||||
#include "../widgets/Images.h"
|
#include "../widgets/Images.h"
|
||||||
#include "../widgets/TextControls.h"
|
#include "../widgets/TextControls.h"
|
||||||
@ -456,11 +457,11 @@ void CStackWindow::CWindowSection::createCommander()
|
|||||||
{
|
{
|
||||||
return Point(269 + 47 * (index % 3), 22 + 47 * (index / 3));
|
return Point(269 + 47 * (index % 3), 22 + 47 * (index / 3));
|
||||||
};
|
};
|
||||||
|
|
||||||
for (auto equippedArtifact : parent->info->commander->artifactsWorn)
|
for (auto equippedArtifact : parent->info->commander->artifactsWorn)
|
||||||
{
|
{
|
||||||
Point artPos = getArtifactPos(equippedArtifact.first);
|
Point artPos = getArtifactPos(equippedArtifact.first);
|
||||||
auto icon = new CClickableObject(new CAnimImage("artifact", equippedArtifact.second.artifact.get()->artType.get()->iconIndex, 0, artPos.x, artPos.y), [=] {});
|
//auto icon = new CClickableObject(new CAnimImage("artifact", equippedArtifact.second.artifact.get()->artType.get()->iconIndex, 0, artPos.x, artPos.y), [=] {});
|
||||||
|
auto icon = new CCommanderArtPlace(artPos, equippedArtifact.second.artifact);
|
||||||
|
|
||||||
//TODO: Use CArtPlace or equivalent instead of CClickableObject and handle commander artifact actions to match WOG (return artifact to hero etc.)
|
//TODO: Use CArtPlace or equivalent instead of CClickableObject and handle commander artifact actions to match WOG (return artifact to hero etc.)
|
||||||
}
|
}
|
||||||
|
@ -93,6 +93,6 @@ public:
|
|||||||
virtual void updateGarrisons() override; //updates the morale widget and calls the parent
|
virtual void updateGarrisons() override; //updates the morale widget and calls the parent
|
||||||
|
|
||||||
//friends
|
//friends
|
||||||
friend void CArtPlace::clickLeft(tribool down, bool previousState);
|
friend void CHeroArtPlace::clickLeft(tribool down, bool previousState);
|
||||||
friend class CPlayerInterface;
|
friend class CPlayerInterface;
|
||||||
};
|
};
|
||||||
|
@ -828,7 +828,7 @@ class ArtSlotsTab : public CIntObject
|
|||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
CAnimImage * background;
|
CAnimImage * background;
|
||||||
std::vector<CArtPlace*> arts;
|
std::vector<CHeroArtPlace*> arts;
|
||||||
|
|
||||||
ArtSlotsTab()
|
ArtSlotsTab()
|
||||||
{
|
{
|
||||||
@ -836,7 +836,7 @@ public:
|
|||||||
background = new CAnimImage("OVSLOT", 4);
|
background = new CAnimImage("OVSLOT", 4);
|
||||||
pos = background->pos;
|
pos = background->pos;
|
||||||
for (size_t i=0; i<9; i++)
|
for (size_t i=0; i<9; i++)
|
||||||
arts.push_back(new CArtPlace(Point(270+i*48, 65)));
|
arts.push_back(new CHeroArtPlace(Point(270+i*48, 65)));
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -844,7 +844,7 @@ class BackpackTab : public CIntObject
|
|||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
CAnimImage * background;
|
CAnimImage * background;
|
||||||
std::vector<CArtPlace*> arts;
|
std::vector<CHeroArtPlace*> arts;
|
||||||
CButton *btnLeft;
|
CButton *btnLeft;
|
||||||
CButton *btnRight;
|
CButton *btnRight;
|
||||||
|
|
||||||
@ -856,7 +856,7 @@ public:
|
|||||||
btnLeft = new CButton(Point(269, 66), "HSBTNS3", CButton::tooltip(), 0);
|
btnLeft = new CButton(Point(269, 66), "HSBTNS3", CButton::tooltip(), 0);
|
||||||
btnRight = new CButton(Point(675, 66), "HSBTNS5", CButton::tooltip(), 0);
|
btnRight = new CButton(Point(675, 66), "HSBTNS5", CButton::tooltip(), 0);
|
||||||
for (size_t i=0; i<8; i++)
|
for (size_t i=0; i<8; i++)
|
||||||
arts.push_back(new CArtPlace(Point(295+i*48, 65)));
|
arts.push_back(new CHeroArtPlace(Point(295+i*48, 65)));
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -882,7 +882,7 @@ CHeroItem::CHeroItem(const CGHeroInstance* Hero):
|
|||||||
assert(arts1->arts.size() == 9);
|
assert(arts1->arts.size() == 9);
|
||||||
assert(arts2->arts.size() == 9);
|
assert(arts2->arts.size() == 9);
|
||||||
|
|
||||||
std::map<ArtifactPosition, CArtPlace*> arts =
|
std::map<ArtifactPosition, CHeroArtPlace*> arts =
|
||||||
{
|
{
|
||||||
{ArtifactPosition::HEAD, arts1->arts[0]},
|
{ArtifactPosition::HEAD, arts1->arts[0]},
|
||||||
{ArtifactPosition::SHOULDERS,arts1->arts[1]},
|
{ArtifactPosition::SHOULDERS,arts1->arts[1]},
|
||||||
|
@ -625,7 +625,7 @@ void CTradeWindow::setMode(EMarketMode::EMarketMode Mode)
|
|||||||
GH.pushInt(nwindow);
|
GH.pushInt(nwindow);
|
||||||
}
|
}
|
||||||
|
|
||||||
void CTradeWindow::artifactSelected(CArtPlace *slot)
|
void CTradeWindow::artifactSelected(CHeroArtPlace *slot)
|
||||||
{
|
{
|
||||||
assert(mode == EMarketMode::ARTIFACT_RESOURCE);
|
assert(mode == EMarketMode::ARTIFACT_RESOURCE);
|
||||||
items[1][0]->setArtInstance(slot->ourArt);
|
items[1][0]->setArtInstance(slot->ourArt);
|
||||||
|
@ -86,7 +86,7 @@ public:
|
|||||||
void getEmptySlots(std::set<CTradeableItem *> &toRemove);
|
void getEmptySlots(std::set<CTradeableItem *> &toRemove);
|
||||||
void setMode(EMarketMode::EMarketMode Mode); //mode setter
|
void setMode(EMarketMode::EMarketMode Mode); //mode setter
|
||||||
|
|
||||||
void artifactSelected(CArtPlace *slot); //used when selling artifacts -> called when user clicked on artifact slot
|
void artifactSelected(CHeroArtPlace *slot); //used when selling artifacts -> called when user clicked on artifact slot
|
||||||
|
|
||||||
virtual void getBaseForPositions(EType type, int &dx, int &dy, int &x, int &y, int &h, int &w, bool Right, int &leftToRightOffset) const = 0;
|
virtual void getBaseForPositions(EType type, int &dx, int &dy, int &x, int &y, int &h, int &w, bool Right, int &leftToRightOffset) const = 0;
|
||||||
virtual void selectionChanged(bool side) = 0; //true == left
|
virtual void selectionChanged(bool side) = 0; //true == left
|
||||||
|
Loading…
Reference in New Issue
Block a user