Main Page | Class Hierarchy | Alphabetical List | Data Structures | Directories | File List | Data Fields | Globals

Anim Class Reference

Inheritance diagram for Anim:

Inheritance graph
[legend]
Collaboration diagram for Anim:

Collaboration graph
[legend]

Detailed Description

Animation sprite.

Definition at line 16 of file Anim.h.

Public Types

enum  eSide { SIDE_LEFT = 0, SIDE_RIGHT = 1 }

Public Member Functions

 Anim ()
 Create new animation sprite.
virtual ~Anim ()
void drawAt (SDL_Surface *screen, int x, int y, eSide side)
 Draw anim phase at screen position.
void addAnim (const std::string &name, const Path &picture, eSide side=SIDE_LEFT)
 Add picture to anim, default side is left side.
void runAnim (const std::string &name, int start_phase=0)
 Run this animation.
void setAnim (const std::string &name, int phase)
 Set static visage.
void useSpecialAnim (const std::string &name, int phase)
 Use special efect for one phase.
bool isDisintegrated () const
bool isInvisible () const
void changeEffect (ViewEffect *new_effect)
 Change effect.
void setViewShift (const V2 &shift)
V2 getViewShift () const
int countAnimPhases (const std::string &anim, eSide side=SIDE_LEFT) const


Member Enumeration Documentation

enum Anim::eSide
 

Enumeration values:
SIDE_LEFT 
SIDE_RIGHT 

Definition at line 18 of file Anim.h.

00018                    {
00019             SIDE_LEFT = 0,
00020             SIDE_RIGHT = 1
00021         };


Constructor & Destructor Documentation

Anim::Anim  ) 
 

Create new animation sprite.

Definition at line 21 of file Anim.cpp.

00022 : m_viewShift(0, 0)
00023 {
00024     m_animPack[SIDE_LEFT] = new ResImagePack();
00025     m_animPack[SIDE_RIGHT] = new ResImagePack();
00026 
00027     m_animName = "";
00028     m_animPhase = 0;
00029     m_run = false;
00030     m_specialAnimName = "";
00031     m_specialAnimPhase = 0;
00032     m_effect = new EffectNone();
00033 }

Anim::~Anim  )  [virtual]
 

Definition at line 35 of file Anim.cpp.

00036 {
00037     m_animPack[SIDE_LEFT]->removeAll();
00038     m_animPack[SIDE_RIGHT]->removeAll();
00039     delete m_animPack[SIDE_LEFT];
00040     delete m_animPack[SIDE_RIGHT];
00041     delete m_effect;
00042 }


Member Function Documentation

void Anim::addAnim const std::string &  name,
const Path picture,
eSide  side = SIDE_LEFT
 

Add picture to anim, default side is left side.

Definition at line 78 of file Anim.cpp.

00079 {
00080     m_usedPath = picture.getPosixName();
00081     m_animPack[side]->addImage(name, picture);
00082 }

void Anim::changeEffect ViewEffect new_effect  ) 
 

Change effect.

Exceptions:
LogicException when new_effect is NULL.

Definition at line 157 of file Anim.cpp.

00158 {
00159     if (NULL == new_effect) {
00160         throw LogicException(ExInfo("new_effect is NULL")
00161                 .addInfo("animName", m_animName)
00162                 .addInfo("specialAnimName", m_specialAnimName));
00163     }
00164 
00165     delete m_effect;
00166     m_effect = new_effect;
00167 }

int Anim::countAnimPhases const std::string &  anim,
eSide  side = SIDE_LEFT
const
 

Definition at line 170 of file Anim.cpp.

00171 {
00172     return m_animPack[side]->countRes(anim);
00173 }

void Anim::drawAt SDL_Surface *  screen,
int  x,
int  y,
eSide  side
 

Draw anim phase at screen position.

Increase phase when anim is running.

Definition at line 49 of file Anim.cpp.

00050 {
00051     if (!m_effect->isInvisible()) {
00052         SDL_Surface *surface =
00053             m_animPack[side]->getRes(m_animName, m_animPhase);
00054         m_effect->blit(screen, surface, x, y);
00055         if (m_run) {
00056             m_animPhase++;
00057             if (m_animPhase >= m_animPack[side]->countRes(m_animName)) {
00058                 m_animPhase = 0;
00059             }
00060         }
00061 
00062         if (!m_specialAnimName.empty()) {
00063             surface =
00064                 m_animPack[side]->getRes(m_specialAnimName, m_specialAnimPhase);
00065             m_effect->blit(screen, surface, x, y);
00066             m_specialAnimName = "";
00067         }
00068     }
00069 
00070     m_effect->updateEffect();
00071 }

V2 Anim::getViewShift  )  const [inline]
 

Definition at line 50 of file Anim.h.

00050 { return m_viewShift; };

bool Anim::isDisintegrated  )  const [inline]
 

Definition at line 46 of file Anim.h.

00046 { return m_effect->isDisintegrated(); }

bool Anim::isInvisible  )  const [inline]
 

Definition at line 47 of file Anim.h.

00047 { return m_effect->isInvisible(); }

void Anim::runAnim const std::string &  name,
int  start_phase = 0
 

Run this animation.

Nothing is changed when animation is already running.

Definition at line 89 of file Anim.cpp.

00090 {
00091     if (m_animName != name) {
00092         setAnim(name, start_phase);
00093     }
00094     m_run = true;
00095 }

void Anim::setAnim const std::string &  name,
int  phase
 

Set static visage.

Definition at line 101 of file Anim.cpp.

00102 {
00103     m_run = false;
00104     m_animName = name;
00105     m_animPhase = phase;
00106 
00107     int count = m_animPack[SIDE_LEFT]->countRes(name);
00108     if (m_animPhase >= count) {
00109         if (count == 0) {
00110             m_animPhase = 0;
00111         }
00112         else {
00113             m_animPhase %= count;
00114         }
00115         LOG_WARNING(ExInfo("anim phase over-flow")
00116                 .addInfo("anim", name)
00117                 .addInfo("phase", phase)
00118                 .addInfo("count", count)
00119                 .addInfo("usedPath", m_usedPath));
00120     }
00121 }

void Anim::setViewShift const V2 shift  )  [inline]
 

Definition at line 49 of file Anim.h.

00049 { m_viewShift = shift; }

void Anim::useSpecialAnim const std::string &  name,
int  phase
 

Use special efect for one phase.

Efect will be blited in second layer.

Parameters:
name anim name, empty is no anim
phase anim phase

Definition at line 131 of file Anim.cpp.

00132 {
00133     m_specialAnimName = name;
00134     m_specialAnimPhase = phase;
00135 
00136     int count = m_animPack[SIDE_LEFT]->countRes(name);
00137     if (m_specialAnimPhase >= count) {
00138         if (count == 0) {
00139             m_specialAnimName = "";
00140             m_specialAnimPhase = 0;
00141         }
00142         else {
00143             m_specialAnimPhase %= count;
00144         }
00145         LOG_WARNING(ExInfo("special anim phase over-flow")
00146                 .addInfo("anim", name)
00147                 .addInfo("phase", phase)
00148                 .addInfo("count", count));
00149     }
00150 }


The documentation for this class was generated from the following files:
Generated on Wed Jun 1 09:54:36 2005 for Fish Fillets - Next Generation by  doxygen 1.4.2