#include <sstream>
#include <stdexcept>
-#include "sprite_data.h"
-#include "resources.h"
-#include "video/drawing_context.h"
-#include "lisp/list_iterator.h"
+#include "sprite_data.hpp"
+#include "resources.hpp"
+#include "video/drawing_context.hpp"
+#include "lisp/list_iterator.hpp"
+#include "log.hpp"
SpriteData::Action::Action()
{
delete *i;
}
-SpriteData::SpriteData(const lisp::Lisp* lisp)
+SpriteData::SpriteData(const lisp::Lisp* lisp, const std::string& basedir)
{
lisp::ListIterator iter(lisp);
while(iter.next()) {
if(iter.item() == "name") {
iter.value()->get(name);
} else if(iter.item() == "action") {
- parse_action(iter.lisp());
+ parse_action(iter.lisp(), basedir);
} else {
- std::cerr << "Unknown sprite field: " << iter.item() << "\n";
+ log_warning << "Unknown sprite field: " << iter.item() << std::endl;
}
}
- if(name.empty())
- throw std::runtime_error("Error: Sprite wihtout name.");
if(actions.empty())
throw std::runtime_error("Error: Sprite wihtout actions.");
}
}
void
-SpriteData::parse_action(const lisp::Lisp* lisp)
+SpriteData::parse_action(const lisp::Lisp* lisp, const std::string& basedir)
{
Action* action = new Action;
} else {
for(int i = 0; static_cast<unsigned int>(i) < act_tmp->surfaces.size();
i++) {
- Surface* surface = new Surface(sdl_surface_from_sdl_surface(
- act_tmp->surfaces[i]->impl->get_sdl_surface(), true), true);
- surface->apply_filter(HORIZONTAL_FLIP_FILTER);
+ Surface* surface = new Surface(*(act_tmp->surfaces[i]));
+ surface->hflip();
action->surfaces.push_back(surface);
}
}
}
for(std::vector<std::string>::size_type i = 0; i < images.size(); i++) {
- action->surfaces.push_back(new Surface("images/" + images[i], true));
+ action->surfaces.push_back(new Surface(basedir + images[i]));
}
}
actions[action->name] = action;