// $Id$
//
// SuperTux
-// Copyright (C) 2004 Ingo Ruhnke <grumbel@gmx.de>
+// Copyright (C) 2006 Matthias Braun <matze@braunis.de>
//
// This program is free software; you can redistribute it and/or
// modify it under the terms of the GNU General Public License
// You should have received a copy of the GNU General Public License
// along with this program; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
#include <config.h>
#include <iostream>
#include "sprite.hpp"
#include "video/drawing_context.hpp"
-#include "msg.hpp"
+#include "log.hpp"
Sprite::Sprite(SpriteData& newdata)
: data(newdata), frame(0), animation_loops(-1)
SpriteData::Action* newaction = data.get_action(name);
if(!newaction) {
- msg_debug << "Action '" << name << "' not found." << std::endl;
+ log_debug << "Action '" << name << "' not found." << std::endl;
return;
}
update();
if((int)frame >= get_frames() || (int)frame < 0)
- msg_warning << "frame out of range: " << (int)frame << "/" << get_frames() << " at " << get_name() << "/" << get_action_name() << std::endl;
+ log_warning << "frame out of range: " << (int)frame << "/" << get_frames() << " at " << get_name() << "/" << get_action_name() << std::endl;
else
context.draw_surface(action->surfaces[(int)frame],
pos - Vector(action->x_offset, action->y_offset),
assert(action != 0);
update();
- if((int)frame >= get_frames() || (int)frame < 0)
- msg_warning << "frame out of range: " << (int)frame << "/" << get_frames() << " at sprite: " << get_name() << "/" << get_action_name() << std::endl;
- else
- context.draw_surface_part(action->surfaces[(int)frame], source, size,
- pos - Vector(action->x_offset, action->y_offset),
- layer + action->z_order);
+ int frameidx = (int) frame;
+
+ if(frameidx >= get_frames() || frameidx < 0) {
+#ifndef DEBUG
+ // in optimized mode we get some small rounding errors in floating point
+ // number sometimes...
+ log_warning << "frame out of range: " << frameidx << "/" << get_frames() << " at sprite: " << get_name() << "/" << get_action_name() << std::endl;
+#endif
+ frameidx = get_frames() - 1;
+ }
+
+ context.draw_surface_part(action->surfaces[frameidx], source, size,
+ pos - Vector(action->x_offset, action->y_offset),
+ layer + action->z_order);
}
int