FIFE
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros
visual.h
Go to the documentation of this file.
1 /***************************************************************************
2  * Copyright (C) 2005-2013 by the FIFE team *
3  * http://www.fifengine.net *
4  * This file is part of FIFE. *
5  * *
6  * FIFE is free software; you can redistribute it and/or *
7  * modify it under the terms of the GNU Lesser General Public *
8  * License as published by the Free Software Foundation; either *
9  * version 2.1 of the License, or (at your option) any later version. *
10  * *
11  * This library is distributed in the hope that it will be useful, *
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of *
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU *
14  * Lesser General Public License for more details. *
15  * *
16  * You should have received a copy of the GNU Lesser General Public *
17  * License along with this library; if not, write to the *
18  * Free Software Foundation, Inc., *
19  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA *
20  ***************************************************************************/
21 
22 #ifndef FIFE_VIEW_VISUAL_H
23 #define FIFE_VIEW_VISUAL_H
24 
25 // Standard C++ library includes
26 
27 // 3rd party library includes
28 
29 // FIFE includes
30 // These includes are split up in two parts, separated by one empty line
31 // First block: files included from the FIFE root src directory
32 // Second block: files included from the same folder
34 #include "util/math/angles.h"
35 #include "util/structures/rect.h"
36 #include "video/animation.h"
37 #include "video/color.h"
38 
39 
40 namespace FIFE {
41  class Object;
42  class Instance;
43  class Action;
44  class Image;
45 
46  class OverlayColors {
47  public:
50  OverlayColors();
51  OverlayColors(ImagePtr image);
52  OverlayColors(AnimationPtr animation);
53 
57 
58  void setColorOverlayImage(ImagePtr image);
60  void setColorOverlayAnimation(AnimationPtr animation);
62  void changeColor(const Color& source, const Color& target);
63  const std::map<Color, Color>& getColors();
64  void resetColors();
65 
66  private:
67  std::map<Color, Color> m_colorMap;
70  };
71 
77  class Visual2DGfx: public IVisual {
78  public:
81  virtual ~Visual2DGfx();
82 
83  protected:
86  Visual2DGfx();
87  };
88 
91  class ObjectVisual: public Visual2DGfx {
92  public:
95  static ObjectVisual* create(Object* object);
96 
99  virtual ~ObjectVisual();
100 
110  void addStaticImage(uint32_t angle, int32_t image_index);
111 
115  int32_t getStaticImageIndexByAngle(int32_t angle);
116 
119  void addStaticColorOverlay(uint32_t angle, const OverlayColors& colors);
120 
124  OverlayColors* getStaticColorOverlay(int32_t angle);
125 
128  void removeStaticColorOverlay(int32_t angle);
129 
133  int32_t getClosestMatchingAngle(int32_t angle);
134 
137  void getStaticImageAngles(std::vector<int32_t>& angles);
138 
141  bool isColorOverlay() { return !m_colorOverlayMap.empty(); }
142 
143  private:
146  ObjectVisual();
147 
149 
150  typedef std::map<uint32_t, OverlayColors> AngleColorOverlayMap;
153  };
154 
155 
158  class InstanceVisual: public Visual2DGfx {
159  public:
162  static InstanceVisual* create(Instance* instance);
163 
166  virtual ~InstanceVisual();
167 
171  void setTransparency(uint8_t transparency);
172 
177 
181  void setVisible(bool visible);
182 
186  bool isVisible();
187 
193  void setStackPosition(int32_t stackposition);
194 
198  int32_t getStackPosition();
199 
200  private:
203  InstanceVisual();
205  bool m_visible;
208  };
209 
212  class ActionVisual: public Visual2DGfx {
213  public:
216  static ActionVisual* create(Action* action);
217 
220  virtual ~ActionVisual();
221 
224  void addAnimation(uint32_t angle, AnimationPtr animationptr);
225 
229  AnimationPtr getAnimationByAngle(int32_t angle);
230 
233  void addAnimationOverlay(uint32_t angle, int32_t order, AnimationPtr animationptr);
234 
238  std::map<int32_t, AnimationPtr> getAnimationOverlay(int32_t angle);
239 
242  void removeAnimationOverlay(uint32_t angle, int32_t order);
243 
247  void addColorOverlay(uint32_t angle, const OverlayColors& colors);
248 
252  OverlayColors* getColorOverlay(int32_t angle);
253 
256  void removeColorOverlay(int32_t angle);
257 
261  void addColorOverlay(uint32_t angle, int32_t order, const OverlayColors& colors);
262 
266  OverlayColors* getColorOverlay(int32_t angle, int32_t order);
267 
270  void removeColorOverlay(int32_t angle, int32_t order);
271 
274  void getActionImageAngles(std::vector<int32_t>& angles);
275 
280  void convertToOverlays(bool color);
281 
284  bool isAnimationOverlay() { return !m_animationOverlayMap.empty(); }
285 
288  bool isColorOverlay() { return !m_colorOverlayMap.empty() || !m_colorAnimationOverlayMap.empty(); }
289 
290  private:
293  ActionVisual();
294 
295  // animations associated with this action
296  typedef std::map<uint32_t, AnimationPtr> AngleAnimationMap;
298 
299  typedef std::map<uint32_t, std::map<int32_t, AnimationPtr> > AngleAnimationOverlayMap;
301 
302  typedef std::map<uint32_t, OverlayColors> AngleColorOverlayMap;
304 
305  typedef std::map<uint32_t, std::map<int32_t, OverlayColors> > AngleColorAnimationOverlayMap;
307  //need this map to use the getIndexByAngle() function in angles.h
309  };
310 
311 }
312 #endif
static InstanceVisual * create(Instance *instance)
Constructs and assigns it to the passed item.
Definition: visual.cpp:179
void setColorOverlayAnimation(AnimationPtr animation)
Definition: visual.cpp:68
ImagePtr m_image
Definition: visual.h:68
ObjectVisual()
Constructor.
Definition: visual.cpp:98
AngleAnimationMap m_animation_map
Definition: visual.h:297
int32_t getClosestMatchingAngle(int32_t angle)
Returns closest matching image angle for given angle.
Definition: visual.cpp:157
AngleColorAnimationOverlayMap m_colorAnimationOverlayMap
Definition: visual.h:306
int32_t getStackPosition()
Gets current stack position of instance.
Definition: visual.cpp:221
std::map< Color, Color > m_colorMap
Definition: visual.h:67
Visual2DGfx()
Constructor.
Definition: visual.cpp:92
Object class.
Definition: object.h:51
Instance visual contains data that is needed to visualize the instance on screen. ...
Definition: visual.h:158
void convertToOverlays(bool color)
Convertes animations and optional color overlay to default animation overlay.
Definition: visual.cpp:369
ActionVisual()
Constructor.
Definition: visual.cpp:225
Action visual contains data that is needed to visualize different actions on screen.
Definition: visual.h:212
virtual ~Visual2DGfx()
Destructor.
Definition: visual.cpp:95
std::map< uint32_t, std::map< int32_t, AnimationPtr > > AngleAnimationOverlayMap
Definition: visual.h:299
static ActionVisual * create(Action *action)
Constructs and assigns it to the passed item.
Definition: visual.cpp:228
void removeAnimationOverlay(uint32_t angle, int32_t order)
Removes animation overlay with given angle (degrees) and order.
Definition: visual.cpp:261
type_angle2id m_angle2img
Definition: visual.h:148
type_angle2id m_map
Definition: visual.h:152
AngleColorOverlayMap m_colorOverlayMap
Definition: visual.h:151
void removeStaticColorOverlay(int32_t angle)
Removes a static color overlay with given angle (degrees).
Definition: visual.cpp:147
void setTransparency(uint8_t transparency)
Sets transparency value for object to be visualized.
Definition: visual.cpp:192
OverlayColors * getStaticColorOverlay(int32_t angle)
Returns closest matching static color overlay for given angle.
Definition: visual.cpp:139
int32_t m_stackposition
Definition: visual.h:206
OverlayColors * getColorOverlay(int32_t angle)
Gets OverlayColors for given angle (degrees).
Definition: visual.cpp:291
int32_t getStaticImageIndexByAngle(int32_t angle)
Returns closest matching static image for given angle.
Definition: visual.cpp:117
unsigned char uint8_t
Definition: core.h:38
AngleColorOverlayMap m_colorOverlayMap
Definition: visual.h:303
bool isVisible()
Is instance visible or not.
Definition: visual.cpp:210
void changeColor(const Color &source, const Color &target)
Definition: visual.cpp:76
void removeColorOverlay(int32_t angle)
Removes color overlay with given angle (degrees).
Definition: visual.cpp:303
AngleAnimationOverlayMap m_animationOverlayMap
Definition: visual.h:300
void setColorOverlayImage(ImagePtr image)
Definition: visual.cpp:60
void setVisible(bool visible)
Sets visibility value for object to be visualized.
Definition: visual.cpp:203
void getActionImageAngles(std::vector< int32_t > &angles)
Returns list of available angles for this Action.
Definition: visual.cpp:360
void addColorOverlay(uint32_t angle, const OverlayColors &colors)
Adds new color overlay with given angle (degrees) and colors.
Definition: visual.cpp:275
std::map< uint32_t, OverlayColors > AngleColorOverlayMap
Definition: visual.h:302
std::map< uint32_t, std::map< int32_t, OverlayColors > > AngleColorAnimationOverlayMap
Definition: visual.h:305
void addAnimationOverlay(uint32_t angle, int32_t order, AnimationPtr animationptr)
Adds new animation overlay with given angle (degrees) and order.
Definition: visual.cpp:250
void getStaticImageAngles(std::vector< int32_t > &angles)
Returns list of available static image angles for this object.
Definition: visual.cpp:163
type_angle2id m_map
Definition: visual.h:308
const std::map< Color, Color > & getColors()
Definition: visual.cpp:84
void addAnimation(uint32_t angle, AnimationPtr animationptr)
Adds new animation with given angle (degrees)
Definition: visual.cpp:240
bool isColorOverlay()
Indicates if there exists a color overlay.
Definition: visual.h:141
void addStaticColorOverlay(uint32_t angle, const OverlayColors &colors)
Adds new static color overlay with given angle (degrees).
Definition: visual.cpp:122
Instance * m_instance
Definition: visual.h:207
ImagePtr getColorOverlayImage()
Definition: visual.cpp:64
uint8_t m_transparency
Definition: visual.h:204
virtual ~ActionVisual()
Destructor.
Definition: visual.cpp:237
std::map< uint32_t, OverlayColors > AngleColorOverlayMap
Definition: visual.h:150
InstanceVisual()
Constructor.
Definition: visual.cpp:172
Object visual contains data that is needed for visualizing objects.
Definition: visual.h:91
static ObjectVisual * create(Object *object)
Constructs and assigns it to the passed item.
Definition: visual.cpp:101
void addStaticImage(uint32_t angle, int32_t image_index)
Adds new static image with given angle (degrees) Static images are used in case there are no actions ...
Definition: visual.cpp:113
AnimationPtr m_animation
Definition: visual.h:69
AnimationPtr getAnimationByAngle(int32_t angle)
Gets index to animation closest to given angle.
Definition: visual.cpp:245
uint8_t getTransparency()
Gets current transparency value (0-255)
Definition: visual.cpp:199
void setStackPosition(int32_t stackposition)
Sets stack position of the instance Stack position is used to define the order in which instances res...
Definition: visual.cpp:214
virtual ~ObjectVisual()
Destructor.
Definition: visual.cpp:110
std::map< uint32_t, AnimationPtr > AngleAnimationMap
Definition: visual.h:296
virtual ~InstanceVisual()
Destructor.
Definition: visual.cpp:189
std::map< uint32_t, int32_t > type_angle2id
Definition: angles.h:37
AnimationPtr getColorOverlayAnimation()
Definition: visual.cpp:72
OverlayColors()
Constructors.
Definition: visual.cpp:46
unsigned int uint32_t
Definition: core.h:40
void resetColors()
Definition: visual.cpp:88
~OverlayColors()
Destructor.
Definition: visual.cpp:57
An Instance is an "instantiation" of an Object at a Location.
Definition: instance.h:100
std::map< int32_t, AnimationPtr > getAnimationOverlay(int32_t angle)
Gets map with animations closest to given angle.
Definition: visual.cpp:256
bool isAnimationOverlay()
Returns true if it exists a animation overlay, otherwise false.
Definition: visual.h:284
bool isColorOverlay()
Returns true if it exists a color overlay, otherwise false.
Definition: visual.h:288
Base class for all 2 dimensional visual classes Visual classes are extensions to visualize the stuff ...
Definition: visual.h:77