+ for(; !lisp_nil_p(cur); cur = lisp_cdr(cur))
+ {
+ std::string token = lisp_symbol(lisp_car(lisp_car(cur)));
+ lisp_object_t* data = lisp_car(lisp_cdr(lisp_car(cur)));
+ LispReader reader(lisp_cdr(lisp_car(cur)));
+
+ if(token == "name")
+ name = lisp_string(data);
+ else if(token == "action")
+ parse_action(reader);
+ else
+ std::cerr << "Warning: Unknown sprite field: " << token << std::endl;
+ }
+
+ if(name.empty())
+ Termination::abort("Error: Sprite wihtout name.", "");
+ if(actions.empty())
+ Termination::abort("Error: Sprite wihtout actions.", "");
+}
+
+Sprite::~Sprite()
+{
+ for(Actions::iterator i_act = actions.begin(); i_act != actions.end(); ++i_act)
+ {
+ for(std::vector<Surface*>::iterator i_sur = i_act->second->surfaces.begin();
+ i_sur != i_act->second->surfaces.end(); ++i_sur)
+ {
+ if(!i_act->second->mirror)
+ delete *i_sur;
+ }
+ delete i_act->second;
+ }
+}
+
+void
+Sprite::parse_action(LispReader& lispreader)
+{
+ action = new Action;
+
+ init_defaults(action);