YAPOG  0.0.1
Yet Another Pokemon Online Game
AnimatedSprite.cpp
Go to the documentation of this file.
3 
4 namespace yap
5 {
7  PlayState::Loop;
9 
11  : BaseSprite ()
12  , sprites_ ()
13  , frameSwitcher_ (nullptr)
14  , currentState_ (DEFAULT_PLAY_STATE)
15  , currentIndex_ (DEFAULT_DEFAULT_INDEX)
16  , currentFrame_ (nullptr)
17  , defaultIndex_ (DEFAULT_DEFAULT_INDEX)
18  {
19  }
20 
22  {
23  delete frameSwitcher_;
24  frameSwitcher_ = nullptr;
25 
26  for (const ISprite* it : sprites_)
27  delete it;
28  }
29 
31  : BaseSprite (copy)
32  , sprites_ ()
33  , frameSwitcher_ (copy.frameSwitcher_->Clone ())
34  , currentState_ (copy.currentState_)
35  , currentIndex_ (DEFAULT_DEFAULT_INDEX)
36  , currentFrame_ (nullptr)
37  , defaultIndex_ (DEFAULT_DEFAULT_INDEX)
38  {
39  for (ISprite* sprite : copy.sprites_)
40  AddFrame (sprite->Clone ());
41 
44  }
45 
47  {
48  sprites_.Add (sprite);
49  }
50 
52  {
53  sprites_.Remove (sprite);
54  }
55 
57  {
58  currentState_ = playState;
59 
60  if (currentState_ == PlayState::None)
61  SetDefaultFrame ();
62  }
63 
65  {
66  defaultIndex_ = index;
67  }
68 
70  {
71  frameSwitcher_ = frameSwitcher;
72  }
73 
75  {
76  currentIndex_ = index;
78  }
79 
81  {
83  }
84 
86  {
87  return currentFrame_->GetSize ();
88  }
89 
90  void AnimatedSprite::HandleMove (const Vector2& offset)
91  {
92  for (ISprite* it : sprites_)
93  it->Move (offset);
94  }
95 
96  void AnimatedSprite::HandleScale (const Vector2& factor)
97  {
98  for (ISprite* it : sprites_)
99  it->Scale (factor);
100  }
101 
103  {
104  if (currentFrame_ == nullptr)
105  return;
106 
107  currentFrame_->Draw (context);
108  }
109 
110  void AnimatedSprite::HandleShow (bool isVisible)
111  {
112  }
113 
114  void AnimatedSprite::HandleChangeColor (const sf::Color& color)
115  {
116  for (ISprite* it : sprites_)
117  it->ChangeColor (color);
118  }
119 
121  {
122  if (sprites_.IsEmpty ())
123  return;
124 
125  if (currentFrame_ != nullptr)
126  currentFrame_->Update (dt);
127 
128  int switchedFrameCount = frameSwitcher_->FrameIsOver (dt);
129 
130  if (currentState_ == PlayState::None)
131  return;
132 
133  IndexType frameCount = sprites_.Count ();
134 
135  if (currentIndex_ + switchedFrameCount < frameCount)
136  {
137  SetCurrentFrame (currentIndex_ + switchedFrameCount);
138  return;
139  }
140 
141  SetCurrentFrame ((currentIndex_ + switchedFrameCount) % frameCount);
142 
143  if (currentState_ == PlayState::Once)
144  ChangeState (PlayState::None);
145  }
146 } // namespace yap