FIFE
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros
instance.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_INSTANCE_H
23 #define FIFE_INSTANCE_H
24 
25 // Standard C++ library includes
26 #include <vector>
27 
28 // 3rd party library includes
29 
30 // FIFE includes
31 // These includes are split up in two parts, separated by one empty line
32 // First block: files included from the FIFE root src directory
33 // Second block: files included from the same folder
34 #include "util/base/fifeclass.h"
35 
36 #include "model/metamodel/object.h"
38 #include "view/visual.h"
39 
40 #include "location.h"
41 
42 
43 namespace FIFE {
44 
45  class Layer;
46  class Action;
47  class Instance;
48  class ActionInfo;
49  class SayInfo;
50  class TimeProvider;
51  class Route;
52 
54  public:
56  virtual void onInstanceActionFinished(Instance* instance, Action* action) = 0;
57  virtual void onInstanceActionCancelled(Instance* instance, Action* action) = 0;
58  virtual void onInstanceActionFrame(Instance* instance, Action* action, int32_t frame) = 0;
59  };
60 
63  ICHANGE_LOC = 0x0001,
64  ICHANGE_ROTATION = 0x0002,
65  ICHANGE_SPEED = 0x0004,
66  ICHANGE_ACTION = 0x0008,
68  ICHANGE_SAYTEXT = 0x0020,
69  ICHANGE_BLOCK = 0x0040,
70  ICHANGE_CELL = 0x0080,
72  ICHANGE_VISIBLE = 0x0200,
73  ICHANGE_STACKPOS = 0x0400,
74  ICHANGE_VISUAL = 0x0800
75  };
77 
79  public:
81  virtual void onInstanceChanged(Instance* instance, InstanceChangeInfo info) = 0;
82  };
83 
85  public:
87  virtual void onInstanceDeleted(Instance* instance) =0;
88  };
89 
94  };
96 
100  class Instance : public FifeClass, public InstanceDeleteListener {
101  public:
102 
107  Instance(Object* object, const Location& location, const std::string& identifier="");
108 
111  virtual ~Instance();
112 
115  const std::string& getId();
116 
119  void setId(const std::string& identifier="");
120 
123  Object* getObject();
124 
128  void setLocation(const Location& loc);
129 
134  Location getLocation() const;
135 
140 
147  Location getTargetLocation() const;
148 
152  void setFacingLocation(const Location& loc);
153 
159 
164 
167  void setRotation(int32_t rotation);
168 
172  int32_t getRotation() const;
173 
177  int32_t getOldRotation() const;
178 
181  void setBlocking(bool blocking);
182 
185  bool isBlocking() const;
186 
189  void setOverrideBlocking(bool overblock);
190 
193  bool isOverrideBlocking() const;
194 
199  void callOnActionFrame(Action* action, int32_t frame);
200 
205 
210 
215 
220 
225 
230 
235  Action* getCurrentAction() const;
236 
241  double getMovementSpeed() const;
242 
248 
254  void setActionRuntime(uint32_t time_offset);
255 
263  void move(const std::string& actionName, const Location& target, const double speed, const std::string& costId = "");
264 
269  void actOnce(const std::string& actionName, const Location& direction);
270 
275  void actOnce(const std::string& actionName, int32_t rotation);
276 
280  void actOnce(const std::string& actionName);
281 
286  void actRepeat(const std::string& actionName, const Location& direction);
287 
292  void actRepeat(const std::string& actionName, int32_t rotation);
293 
297  void actRepeat(const std::string& actionName);
298 
303  void say(const std::string& text, uint32_t duration=0);
304 
311  void follow(const std::string& actionName, Instance* leader, const double speed);
312 
319  void follow(const std::string& actionName, Route* route, const double speed);
320 
325  void cancelMovement(uint32_t length = 1);
326 
329  const std::string* getSayText() const;
330 
337 
340  bool isActive() const;
341 
344  void setVisual(IVisual* visual) { m_visual = visual; }
345 
348  template<typename T> T* getVisual() const { return reinterpret_cast<T*>(m_visual); }
349 
351  void callOnVisibleChange();
353 
356  void setTimeMultiplier(float multip);
357 
360  float getTimeMultiplier();
361 
364  float getTotalTimeMultiplier();
365 
370 
374  void refresh();
375 
379 
382  void onInstanceDeleted(Instance* instance);
383 
386  Route* getRoute();
387 
390  void setVisitor(bool visit);
391 
394  bool isVisitor();
395 
399 
403 
406  void setVisitorRadius(uint16_t radius);
407 
411 
414  void setCellStackPosition(uint8_t stack);
415 
419 
422  bool isSpecialCost();
423 
428  void setCost(const std::string& id, double cost);
429 
432  void resetCost();
433 
436  double getCost();
437 
440  std::string getCostId();
441 
444  double getSpeed();
445 
448  bool isSpecialSpeed();
449 
452  bool isMultiCell();
453 
456  bool isMultiObject();
457 
460  void updateMultiInstances();
461 
464  const std::vector<Instance*>& getMultiInstances();
465 
468  void setMainMultiInstance(Instance* main);
469 
473 
476  void addStaticColorOverlay(uint32_t angle, const OverlayColors& colors);
477 
481  OverlayColors* getStaticColorOverlay(int32_t angle);
482 
485  void removeStaticColorOverlay(int32_t angle);
486 
489  bool isStaticColorOverlay();
490 
493  void addColorOverlay(const std::string& actionName, uint32_t angle, const OverlayColors& colors);
494 
498  OverlayColors* getColorOverlay(const std::string& actionName, uint32_t angle);
499 
502  void removeColorOverlay(const std::string& actionName, int32_t angle);
503 
506  void addAnimationOverlay(const std::string& actionName, uint32_t angle, int32_t order, const AnimationPtr& animationptr);
507 
511  std::map<int32_t, AnimationPtr> getAnimationOverlay(const std::string& actionName, int32_t angle);
512 
515  void removeAnimationOverlay(const std::string& actionName, uint32_t angle, int32_t order);
516 
519  void addColorOverlay(const std::string& actionName, uint32_t angle, int32_t order, const OverlayColors& colors);
520 
524  OverlayColors* getColorOverlay(const std::string& actionName, uint32_t angle, int32_t order);
525 
528  void removeColorOverlay(const std::string& actionName, int32_t angle, int32_t order);
529 
532  void convertToOverlays(const std::string& actionName, bool color);
533 
536  bool isAnimationOverlay(const std::string& actionName);
537 
540  bool isColorOverlay(const std::string& actionName);
541 
542  private:
543  std::string m_id;
544 
547  int32_t m_rotation;
548 
558  public:
559  InstanceActivity(Instance& source);
561 
562  // ----- Fields related to change tracking -----
564  void update(Instance& source);
570  int32_t m_rotation;
572  int32_t m_oldRotation;
576  double m_speed;
580  std::string m_sayText;
582  std::vector<InstanceChangeListener*> m_changeListeners;
583 
584  // ----- Fields related to generic activity -----
586  std::vector<InstanceActionListener*> m_actionListeners;
597  };
602  std::vector<InstanceDeleteListener*> m_deleteListeners;
603 
627  double m_cost;
629  std::string m_costId;
631  std::vector<Instance*> m_multiInstances;
634 
635  Instance(const Instance&);
636  Instance& operator=(const Instance&);
638  void finalizeAction();
640  void cancelAction();
642  void initializeAction(const std::string& actionName);
644  bool processMovement();
646  void calcMovement();
648  void bindTimeProvider();
650  void initializeChanges();
652  void prepareForUpdate();
653 
655  void createOwnObject();
657  ActionVisual* getActionVisual(const std::string& actionName, bool create);
658  };
659 } // FIFE
660 
661 #endif
bool isMultiObject()
Returns true if it is multi object otherwise false.
Definition: instance.cpp:1052
void callOnVisibleChange()
Definition: instance.cpp:963
Instance(Object *object, const Location &location, const std::string &identifier="")
Constructor Instances are created by calling addInstance from layer, thus this method should really b...
Definition: instance.cpp:194
Timeprovider is an utility providing time management functionality You can have hierarchy of time pro...
Definition: timeprovider.h:42
void prepareForUpdate()
called to prepare the instance for an update
Definition: instance.cpp:280
void initializeAction(const std::string &actionName)
Initialize action for use.
Definition: instance.cpp:415
std::string getCostId()
Returns cost id.
Definition: instance.cpp:1033
InstanceActivity * m_activity
Definition: instance.h:598
void updateMultiInstances()
Updates the visual positions of all instances in case this is a multi object.
Definition: instance.cpp:1056
void follow(const std::string &actionName, Instance *leader, const double speed)
Performs given named action to the instance.
Definition: instance.cpp:484
InstanceActivity(Instance &source)
Definition: instance.cpp:112
bool m_isVisitor
is instance a visitor (FoW)
Definition: instance.h:617
Action * m_action
action on previous round. : might become invalid, only used for address comparison ...
Definition: instance.h:574
void createOwnObject()
Creates an own object for the instance to allow visual customization.
Definition: instance.cpp:1221
VisitorShapeInfo m_visitorShape
visitor shape type
Definition: instance.h:619
void addActionListener(InstanceActionListener *listener)
Adds new instance action listener.
Definition: instance.cpp:361
void cancelAction()
Cancel current action.
Definition: instance.cpp:835
bool m_ownObject
indicates if m_object is customized
Definition: instance.h:607
void initializeChanges()
called when instance has been changed. Causes instance to create InstanceActivity ...
Definition: instance.cpp:271
void setId(const std::string &identifier="")
Set the identifier for this instance.
Definition: instance.cpp:334
Object class.
Definition: object.h:51
void addDeleteListener(InstanceDeleteListener *listener)
Adds new instance delete listener.
Definition: instance.cpp:1265
void addAnimationOverlay(const std::string &actionName, uint32_t angle, int32_t order, const AnimationPtr &animationptr)
Adds new animation overlay with given angle (degrees) and order to given action.
Definition: instance.cpp:1148
void callOnActionFrame(Action *action, int32_t frame)
Auxiliary function to inform ActionListeners about the active ActionFrame.
Definition: instance.cpp:386
bool isActive() const
If this returns true, the instance needs to be updated.
Definition: instance.cpp:288
bool m_blocking
blocking status on previous round
Definition: instance.h:594
bool isAnimationOverlay(const std::string &actionName)
Indicates if there exists a animation overlay for given action.
Definition: instance.cpp:1200
bool isBlocking() const
Gets if instance blocks movement.
Definition: instance.cpp:349
bool isColorOverlay(const std::string &actionName)
Indicates if there exists a color overlay for given action or animation overlay.
Definition: instance.cpp:1208
bool isSpecialSpeed()
Returns true if instance or object have special speed modifier otherwise false.
Definition: instance.cpp:1044
void setMainMultiInstance(Instance *main)
Sets a instance to the main multi instance of this instance.
Definition: instance.cpp:571
void setFacingLocation(const Location &loc)
Sets the direction where instance is heading.
Definition: instance.cpp:891
Action visual contains data that is needed to visualize different actions on screen.
Definition: visual.h:212
virtual ~InstanceActionListener()
Definition: instance.h:55
Location getTargetLocation() const
Gets movement target in case instance is moving.
Definition: instance.cpp:877
std::vector< InstanceDeleteListener * > m_deleteListeners
listeners for deletion of the instance
Definition: instance.h:602
InstanceChangeInfo getChangeInfo()
Returns a bitmask of changes of the last update.
Definition: instance.cpp:951
T * getVisual() const
Gets used visualization.
Definition: instance.h:348
bool m_blocking
instance blocking info
Definition: instance.h:613
Base class for all fife classes Used e.g.
Definition: fifeclass.h:42
void removeAnimationOverlay(const std::string &actionName, uint32_t angle, int32_t order)
Removes animation overlay with given angle (degrees) and order from action.
Definition: instance.cpp:1165
void setVisitorRadius(uint16_t radius)
Sets the range for a visitor.
Definition: instance.cpp:547
void cancelMovement(uint32_t length=1)
Cancel movement after a given length.
Definition: instance.cpp:509
Location m_location
current location
Definition: instance.h:609
uint32_t getActionRuntime()
Gets the time in milliseconds how long action has been active In case there is no current action...
Definition: instance.cpp:913
virtual void onInstanceActionCancelled(Instance *instance, Action *action)=0
virtual void onInstanceDeleted(Instance *instance)=0
void setVisual(IVisual *visual)
Sets visualization to be used.
Definition: instance.h:344
VisitorShapeType
Definition: instance.h:90
ActionVisual * getActionVisual(const std::string &actionName, bool create)
Returns pointer to action visual, can also create it.
Definition: instance.cpp:1236
void setActionRuntime(uint32_t time_offset)
Sets the time in milliseconds how long an action has been active This was requested in Ticket #373...
Definition: instance.cpp:922
Action * getCurrentAction() const
Gets the currently active action.
Definition: instance.cpp:870
std::string m_sayText
say text on previous round
Definition: instance.h:580
bool isSpecialCost()
Returns true if instance or object have special cost otherwise false.
Definition: instance.cpp:563
Location & getLocationRef()
Gets reference of current location of instance.
Definition: instance.cpp:315
A basic route.
Definition: route.h:64
void callOnTransparencyChange()
Definition: instance.cpp:958
const std::string * getSayText() const
Returns pointer to currently set saytext.
Definition: instance.cpp:624
void update(Instance &source)
updates cached variables, marks changes
Definition: instance.cpp:136
void convertToOverlays(const std::string &actionName, bool color)
If the action have base animation and optional color overlay it gets converted to animation overlay...
Definition: instance.cpp:1216
void removeDeleteListener(InstanceDeleteListener *listener)
Removes associated instance delete listener.
Definition: instance.cpp:1269
OverlayColors * getStaticColorOverlay(int32_t angle)
Returns closest matching static color overlay for given angle.
Definition: instance.cpp:1097
virtual void onInstanceActionFinished(Instance *instance, Action *action)=0
void calcMovement()
Calculates movement based current location and speed.
uint16_t m_visitorRadius
visitor radius (FoW)
Definition: instance.h:621
void addChangeListener(InstanceChangeListener *listener)
Adds new instance change listener.
Definition: instance.cpp:381
double m_speed
speed on previous round
Definition: instance.h:576
unsigned char uint8_t
Definition: core.h:38
IVisual * m_visual
instance visualization
Definition: instance.h:611
int32_t m_rotation
The rotation offset of this instance.
Definition: instance.h:547
void setOverrideBlocking(bool overblock)
Sets if instance blocking can overriden.
Definition: instance.cpp:353
const std::vector< Instance * > & getMultiInstances()
Returns a vector that contains all instances of a multi object.
Definition: instance.cpp:567
Instance * m_mainMultiInstance
pointer to the main multi instance
Definition: instance.h:633
std::vector< InstanceActionListener * > m_actionListeners
listeners for action related events
Definition: instance.h:586
Object * getObject()
Gets object where this instance is instantiated from.
Definition: instance.cpp:292
std::vector< InstanceChangeListener * > m_changeListeners
listeners for changes
Definition: instance.h:582
uint32_t InstanceChangeInfo
Definition: instance.h:76
float m_timeMultiplier
time multiplier on previous round
Definition: instance.h:578
void callOnStackPositionChange()
Definition: instance.cpp:968
virtual void onInstanceChanged(Instance *instance, InstanceChangeInfo info)=0
int32_t getRotation() const
Get the rotation offset of this instance Returns direction where instance is heading.
Definition: instance.cpp:330
uint8_t VisitorShapeInfo
Definition: instance.h:95
Location & getOldLocationRef()
Gets reference of old location of instance.
Definition: instance.cpp:899
OverlayColors * getColorOverlay(const std::string &actionName, uint32_t angle)
Returns closest matching color overlay for given angle and action.
Definition: instance.cpp:1131
Location getFacingLocation()
Returns the direction where instance is heading.
Definition: instance.cpp:895
void removeStaticColorOverlay(int32_t angle)
Removes a static color overlay with given angle (degrees).
Definition: instance.cpp:1105
virtual ~InstanceDeleteListener()
Definition: instance.h:86
void addColorOverlay(const std::string &actionName, uint32_t angle, const OverlayColors &colors)
Adds new color overlay with given angle (degrees) to given action.
Definition: instance.cpp:1122
void setTimeMultiplier(float multip)
Sets speed for the map.
Definition: instance.cpp:973
Location getLocation() const
Gets current location of instance.
Definition: instance.cpp:311
virtual void onInstanceActionFrame(Instance *instance, Action *action, int32_t frame)=0
void removeChangeListener(InstanceChangeListener *listener)
Removes associated instance change listener.
Definition: instance.cpp:400
uint8_t getCellStackPosition()
Gets the cell stack position.
Definition: instance.cpp:559
Instance * getMainMultiInstance()
Returns a pointer to the main mulit instance or Null if the instance is not part of a multi instance ...
Definition: instance.cpp:575
void onInstanceDeleted(Instance *instance)
callback so other instances we depend on can notify us if they go away
Definition: instance.cpp:1284
bool isStaticColorOverlay()
Indicates if there exists a static color overlay.
Definition: instance.cpp:1114
InstanceActivity gets allocated in case there is some runtime activity related to the instance...
Definition: instance.h:557
unsigned short uint16_t
Definition: core.h:39
Location m_location
location on previous round
Definition: instance.h:566
void bindTimeProvider()
rebinds time provider based on new location
Definition: instance.cpp:926
std::string m_id
Definition: instance.h:543
void setBlocking(bool blocking)
Sets if instance blocks movement.
Definition: instance.cpp:342
double getMovementSpeed() const
Gets the speed in case instance is moving otherwise returns 0.
Definition: instance.cpp:884
InstanceChangeInfo m_additional
additional change info, used for visual class (transparency, visible, stackpos)
Definition: instance.h:596
void finalizeAction()
Finalize current action.
Definition: instance.cpp:800
ActionInfo * m_actionInfo
action information, allocated when actions are bind
Definition: instance.h:588
void setCellStackPosition(uint8_t stack)
Sets the cell stack position.
Definition: instance.cpp:555
double m_cost
holds cost value
Definition: instance.h:627
TimeProvider * m_timeProvider
time scaler for this instance
Definition: instance.h:592
SayInfo * m_sayInfo
text to say + duration, allocated when something is said
Definition: instance.h:590
VisitorShapeInfo getVisitorShape()
Gets the shape type for a visitor.
Definition: instance.cpp:543
Instance & operator=(const Instance &)
void actOnce(const std::string &actionName, const Location &direction)
Performs given named action to the instance, once only.
Definition: instance.cpp:579
InstanceChangeInfo m_changeInfo
bitmask stating current changes
Definition: instance.h:600
bool m_specialCost
indicates special cost
Definition: instance.h:625
std::string m_costId
holds cost id
Definition: instance.h:629
std::vector< Instance * > m_multiInstances
vector that holds all multi instances
Definition: instance.h:631
double getCost()
Returns cost value.
Definition: instance.cpp:1026
float getTotalTimeMultiplier()
Gets instance speed, considering also model and map speeds.
Definition: instance.cpp:988
void addStaticColorOverlay(uint32_t angle, const OverlayColors &colors)
Adds new static color overlay with given angle (degrees).
Definition: instance.cpp:1087
void removeColorOverlay(const std::string &actionName, int32_t angle)
Removes a color overlay with given angle (degrees) from given action.
Definition: instance.cpp:1139
bool isOverrideBlocking() const
Gets if instance blocking can overriden.
Definition: instance.cpp:357
float getTimeMultiplier()
Gets instance speed.
Definition: instance.cpp:981
void resetCost()
Resets cost.
Definition: instance.cpp:1022
void actRepeat(const std::string &actionName, const Location &direction)
Performs given named action to the instance, repeated.
Definition: instance.cpp:596
InstanceChangeInfo update()
Updates the instance related to the current action.
Definition: instance.cpp:744
int32_t getOldRotation() const
Get the old rotation offset of this instance Returns direction where instance was heading...
Definition: instance.cpp:906
virtual ~InstanceChangeListener()
Definition: instance.h:80
const std::string & getId()
Get the identifier for this instance; possibly null.
Definition: instance.cpp:338
Location m_oldLocation
location on previous cell
Definition: instance.h:568
void setRotation(int32_t rotation)
Set the rotation offset of this instance.
Definition: instance.cpp:319
void removeActionListener(InstanceActionListener *listener)
Removes associated instance action listener.
Definition: instance.cpp:366
InstanceChangeType
Definition: instance.h:61
virtual ~Instance()
Destructor.
Definition: instance.cpp:241
uint32_t getRuntime()
Gets the scaled runtime in milliseconds.
Definition: instance.cpp:1001
Route * getRoute()
Returns a pointer to the route, in case there is no, it returns NULL.
Definition: instance.cpp:521
void refresh()
Refreshes instance e.g.
Definition: instance.cpp:946
std::map< int32_t, AnimationPtr > getAnimationOverlay(const std::string &actionName, int32_t angle)
Gets map with animations closest to given angle.
Definition: instance.cpp:1157
void move(const std::string &actionName, const Location &target, const double speed, const std::string &costId="")
Performs given named action to the instance.
Definition: instance.cpp:442
unsigned int uint32_t
Definition: core.h:40
Object * m_object
object where instantiated from
Definition: instance.h:605
uint16_t getVisitorRadius()
Gets the visitor range.
Definition: instance.cpp:551
bool isVisitor()
If instance is a visitor it returns true otherwise false.
Definition: instance.cpp:535
bool isMultiCell()
Returns true if it is multi cell otherwise false.
Definition: instance.cpp:1048
uint8_t m_cellStackPos
position on cell stack
Definition: instance.h:623
int32_t m_rotation
rotation on previous round
Definition: instance.h:570
void setLocation(const Location &loc)
Sets location of the instance.
Definition: instance.cpp:296
An Instance is an "instantiation" of an Object at a Location.
Definition: instance.h:100
bool processMovement()
Moves instance. Returns true if finished.
Definition: instance.cpp:631
bool m_overrideBlocking
allow to override the blocking property
Definition: instance.h:615
void setCost(const std::string &id, double cost)
Sets for the given cost id a cost.
Definition: instance.cpp:1016
double getSpeed()
Returns speed modifier.
Definition: instance.cpp:1040
int32_t m_oldRotation
rotation on previous round
Definition: instance.h:572
void say(const std::string &text, uint32_t duration=0)
Causes instance to "say" given text (shown on screen next to the instance)
Definition: instance.cpp:613
void setVisitor(bool visit)
Marks this instance as a visitor.
Definition: instance.cpp:531
void setVisitorShape(VisitorShapeInfo info)
Sets the shape type for a visitor.
Definition: instance.cpp:539