X-Git-Url: https://git.octo.it/?a=blobdiff_plain;ds=sidebyside;f=src%2Fsprite%2Fsprite.hpp;h=6e90a8471fb544d5eb0f5aed187ab7d03c918d23;hb=077b13f4ba2f22325152e2025d613cddaa433d4a;hp=9c138e200029ff503ef9a44d0b04906a556746d5;hpb=93a74f493825b4a4c76774f190b2fc39b2488d8f;p=supertux.git diff --git a/src/sprite/sprite.hpp b/src/sprite/sprite.hpp index 9c138e200..6e90a8471 100644 --- a/src/sprite/sprite.hpp +++ b/src/sprite/sprite.hpp @@ -1,12 +1,10 @@ -// $Id$ -// // SuperTux // Copyright (C) 2006 Matthias Braun // -// This program is free software; you can redistribute it and/or -// modify it under the terms of the GNU General Public License -// as published by the Free Software Foundation; either version 2 -// of the License, or (at your option) any later version. +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of @@ -14,21 +12,17 @@ // GNU General Public License for more details. // // 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. - -#ifndef SUPERTUX_SPRITE_H -#define SUPERTUX_SPRITE_H +// along with this program. If not, see . -#include -#include -#include +#ifndef HEADER_SUPERTUX_SPRITE_SPRITE_HPP +#define HEADER_SUPERTUX_SPRITE_SPRITE_HPP -#include "video/surface.hpp" -#include "math/vector.hpp" -#include "sprite_data.hpp" +#include "sprite/sprite_data.hpp" +#include "video/drawing_context.hpp" +class Surface; class DrawingContext; +class Blend; class Sprite { @@ -41,10 +35,17 @@ public: void draw(DrawingContext& context, const Vector& pos, int layer); void draw_part(DrawingContext& context, const Vector& source, - const Vector& size, const Vector& pos, int layer); + const Vector& size, const Vector& pos, int layer); /** Set action (or state) */ - void set_action(const std::string& act, int loops = -1); + void set_action(const std::string& name, int loops = -1); + + /** Set action (or state), but keep current frame number, loop counter, etc. */ + void set_action_continued(const std::string& name); + + /** Set number of animation cycles until animation stops */ + void set_animation_loops(int loops = -1) + { animation_loops = loops; } /** Set framerate */ void set_fps(float new_fps); @@ -78,20 +79,36 @@ public: float get_current_hitbox_width() const; /** return height of current action's hitbox */ float get_current_hitbox_height() const; + /** return current action's hitbox, relative to 0,0 */ + Rect get_current_hitbox() const; + + /** Set the angle of the sprite rotation in degree */ + void set_angle(float angle); + + /** Get the angle of the sprite rotation in degree */ + float get_angle() const; + + void set_color(const Color& color); + + Color get_color() const; + + void set_blend(const Blend& blend); + + Blend get_blend() const; /** Get current frame */ int get_frame() const { return (int)frame; } /** Set current frame */ - void set_frame(int frame) - { - this->frame = (frame % get_frames()); + void set_frame(int frame_) + { + this->frame = (float) (frame_ % get_frames()); } - Surface* get_frame(unsigned int frame) + Surface* get_frame(unsigned int frame_) { - assert(frame < action->surfaces.size()); - return action->surfaces[frame]; - } + assert(frame_ < action->surfaces.size()); + return action->surfaces[frame_]; + } private: void update(); @@ -99,11 +116,18 @@ private: SpriteData& data; float frame; - int animation_loops; + int animation_loops; float last_ticks; + float angle; + Color color; + Blend blend; SpriteData::Action* action; + +private: + Sprite& operator=(const Sprite&); }; #endif +/* EOF */