1
0
Fork 0
mirror of https://github.com/AquariaOSE/Aquaria.git synced 2024-11-15 05:59:16 +00:00

Fix animation editor problems: Undo buffer memory hoarding, add warning if saving failed.

Thanks to Peri for finally making me fix this.
This commit is contained in:
fgenesis 2013-12-28 04:42:02 +01:00
parent 624744ca99
commit a9712944ed
4 changed files with 17 additions and 6 deletions

View file

@ -516,6 +516,10 @@ void AnimationEditor::pushUndo()
SkeletalSprite sk;
sk.animations = editSprite->animations;
undoHistory.push_back(sk);
if(undoHistory.size() > 50)
undoHistory.pop_front();
undoEntry = undoHistory.size()-1;
}
@ -1328,8 +1332,10 @@ void AnimationEditor::cloneBoneAhead()
void AnimationEditor::saveFile()
{
editSprite->saveSkeletal(editingFile);
dsq->screenMessage("Saved anim: " + editingFile);
if(editSprite->saveSkeletal(editingFile))
dsq->screenMessage("Saved anim: " + editingFile);
else
dsq->screenMessage("FAILED TO SAVE: " + editingFile);
}
void AnimationEditor::loadFile()

View file

@ -204,7 +204,7 @@ public:
void moveNextWidgets(float dt);
std::vector<SkeletalSprite> undoHistory;
std::deque<SkeletalSprite> undoHistory;
int undoEntry;

View file

@ -846,15 +846,20 @@ void AnimationLayer::update(float dt)
}
}
void SkeletalSprite::saveSkeletal(const std::string &fn)
bool SkeletalSprite::saveSkeletal(const std::string &fn)
{
std::string file, filename=fn;
stringToLower(filename);
if (!secondaryAnimationPath.empty())
{
createDir(secondaryAnimationPath);
file = secondaryAnimationPath + filename + ".xml";
}
else
{
file = animationPath + filename + ".xml";
}
int i = 0;
TiXmlDocument& xml = _retrieveSkeletalXML(file);
@ -1032,7 +1037,7 @@ void SkeletalSprite::saveSkeletal(const std::string &fn)
animations.InsertEndChild(animation);
}
xml.InsertEndChild(animations);
xml.SaveFile(file);
return xml.SaveFile(file);
}
int SkeletalSprite::getBoneIdx(Bone *b)

View file

@ -203,7 +203,7 @@ public:
SkeletalSprite();
void loadSkeletal(const std::string &fn);
void saveSkeletal(const std::string &fn);
bool saveSkeletal(const std::string &fn);
void loadSkin(const std::string &fn);
Bone *getBoneByIdx(int idx);