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 
39 #include "location.h"
40 
41 
42 namespace FIFE {
43 
44  class Layer;
45  class Action;
46  class Instance;
47  class ActionInfo;
48  class SayInfo;
49  class TimeProvider;
50  class Route;
51 
53  public:
55  virtual void onInstanceActionFinished(Instance* instance, Action* action) = 0;
56  virtual void onInstanceActionFrame(Instance* instance, Action* action, int32_t frame) = 0;
57  };
58 
61  ICHANGE_LOC = 0x0001,
62  ICHANGE_ROTATION = 0x0002,
63  ICHANGE_SPEED = 0x0004,
64  ICHANGE_ACTION = 0x0008,
66  ICHANGE_SAYTEXT = 0x0020,
67  ICHANGE_BLOCK = 0x0040,
68  ICHANGE_CELL = 0x0080,
70  ICHANGE_VISIBLE = 0x0200,
72  };
74 
76  public:
78  virtual void onInstanceChanged(Instance* instance, InstanceChangeInfo info) = 0;
79  };
80 
82  public:
84  virtual void onInstanceDeleted(Instance* instance) =0;
85  };
86 
91  };
93 
97  class Instance : public FifeClass, public InstanceDeleteListener {
98  public:
99 
104  Instance(Object* object, const Location& location, const std::string& identifier="");
105 
108  virtual ~Instance();
109 
112  const std::string& getId();
113 
116  void setId(const std::string& identifier="");
117 
120  Object* getObject();
121 
125  void setLocation(const Location& loc);
126 
131  Location getLocation() const;
132 
137 
144  Location getTargetLocation() const;
145 
149  void setFacingLocation(const Location& loc);
150 
156 
161 
164  void setRotation(int32_t rotation);
165 
169  int32_t getRotation() const;
170 
174  int32_t getOldRotation() const;
175 
178  void setBlocking(bool blocking);
179 
182  bool isBlocking() const;
183 
186  void setOverrideBlocking(bool overblock);
187 
190  bool isOverrideBlocking() const;
191 
196  void callOnActionFrame(Action* action, int32_t frame);
197 
202 
207 
212 
217 
222 
227 
232  Action* getCurrentAction() const;
233 
238  double getMovementSpeed() const;
239 
245 
251  void setActionRuntime(uint32_t time_offset);
252 
260  void move(const std::string& actionName, const Location& target, const double speed, const std::string& costId = "");
261 
267  void act(const std::string& actionName, const Location& direction, bool repeating=false);
268 
274  void act(const std::string& actionName, int32_t rotation, bool repeating=false);
275 
280  void act(const std::string& actionName, bool repeating=false);
281 
286  void say(const std::string& text, uint32_t duration=0);
287 
294  void follow(const std::string& actionName, Instance* leader, const double speed);
295 
302  void follow(const std::string& actionName, Route* route, const double speed);
303 
308  void cancelMovement(uint32_t length = 1);
309 
312  const std::string* getSayText() const;
313 
320 
323  bool isActive() const;
324 
327  void setVisual(IVisual* visual) { m_visual = visual; }
328 
331  template<typename T> T* getVisual() const { return reinterpret_cast<T*>(m_visual); }
332 
334  void callOnVisibleChange();
336 
339  void setTimeMultiplier(float multip);
340 
343  float getTimeMultiplier();
344 
347  float getTotalTimeMultiplier();
348 
353 
357  void refresh();
358 
362 
365  void onInstanceDeleted(Instance* instance);
366 
369  Route* getRoute();
370 
373  void setVisitor(bool visit);
374 
377  bool isVisitor();
378 
382 
386 
389  void setVisitorRadius(uint16_t radius);
390 
394 
397  void setCellStackPosition(uint8_t stack);
398 
402 
405  bool isSpecialCost();
406 
411  void setCost(const std::string& id, double cost);
412 
415  void resetCost();
416 
419  double getCost();
420 
423  const std::string& getCostId();
424 
427  bool isMultiCell();
428 
431  bool isMultiObject();
432 
435  void updateMultiInstances();
436 
439  const std::vector<Instance*>& getMultiInstances();
440 
441  private:
442  std::string m_id;
443 
446  int32_t m_rotation;
447 
457  public:
458  InstanceActivity(Instance& source);
460 
461  // ----- Fields related to change tracking -----
463  void update(Instance& source);
469  int32_t m_rotation;
471  int32_t m_oldRotation;
475  double m_speed;
479  std::string m_sayText;
481  std::vector<InstanceChangeListener*> m_changeListeners;
482 
483  // ----- Fields related to generic activity -----
485  std::vector<InstanceActionListener*> m_actionListeners;
496  };
501  std::vector<InstanceDeleteListener*> m_deleteListeners;
502 
524  double m_cost;
526  std::string m_costId;
527 
529  std::vector<Instance*> m_multiInstances;
530 
531  Instance(const Instance&);
532  Instance& operator=(const Instance&);
534  void finalizeAction();
536  void initializeAction(const std::string& actionName);
538  bool processMovement();
540  void calcMovement();
542  void bindTimeProvider();
544  void initializeChanges();
545  };
546 } // FIFE
547 
548 #endif
bool isMultiObject()
Returns true if it is multi object otherwise false.
Definition: instance.cpp:996
void callOnVisibleChange()
Definition: instance.cpp:907
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:198
Timeprovider is an utility providing time management functionality You can have hierarchy of time pro...
Definition: timeprovider.h:42
void initializeAction(const std::string &actionName)
Initialize action for use.
Definition: instance.cpp:416
InstanceActivity * m_activity
Definition: instance.h:497
void updateMultiInstances()
Updates the visual positions of all instances in case this is a multi object.
Definition: instance.cpp:1000
void follow(const std::string &actionName, Instance *leader, const double speed)
Performs given named action to the instance.
Definition: instance.cpp:486
InstanceActivity(Instance &source)
Definition: instance.cpp:116
bool m_isVisitor
is instance a visitor (FoW)
Definition: instance.h:514
Action * m_action
action on previous round. : might become invalid, only used for address comparison ...
Definition: instance.h:473
VisitorShapeInfo m_visitorShape
visitor shape type
Definition: instance.h:516
void addActionListener(InstanceActionListener *listener)
Adds new instance action listener.
Definition: instance.cpp:362
const std::string & getCostId()
Returns cost id.
Definition: instance.cpp:985
void initializeChanges()
called when instance has been changed. Causes instance to create InstanceActivity ...
Definition: instance.cpp:267
void setId(const std::string &identifier="")
Set the identifier for this instance.
Definition: instance.cpp:331
Object class.
Definition: object.h:51
void addDeleteListener(InstanceDeleteListener *listener)
Adds new instance delete listener.
Definition: instance.cpp:1031
void callOnActionFrame(Action *action, int32_t frame)
Auxiliary function to inform ActionListeners about the active ActionFrame.
Definition: instance.cpp:387
bool isActive() const
If this returns true, the instance needs to be updated.
Definition: instance.cpp:276
bool m_blocking
blocking status on previous round
Definition: instance.h:493
bool isBlocking() const
Gets if instance blocks movement.
Definition: instance.cpp:350
void setFacingLocation(const Location &loc)
Sets the direction where instance is heading.
Definition: instance.cpp:831
virtual ~InstanceActionListener()
Definition: instance.h:54
Location getTargetLocation() const
Gets movement target in case instance is moving.
Definition: instance.cpp:817
std::vector< InstanceDeleteListener * > m_deleteListeners
listeners for deletion of the instance
Definition: instance.h:501
InstanceChangeInfo getChangeInfo()
Returns a bitmask of changes of the last update.
Definition: instance.cpp:891
T * getVisual() const
Gets used visualization.
Definition: instance.h:331
bool m_blocking
instance blocking info
Definition: instance.h:510
Base class for all fife classes Used e.g.
Definition: fifeclass.h:42
void setVisitorRadius(uint16_t radius)
Sets the range for a visitor.
Definition: instance.cpp:549
void cancelMovement(uint32_t length=1)
Cancel movement after a given length.
Definition: instance.cpp:511
Location m_location
current location
Definition: instance.h:506
uint32_t getActionRuntime()
Gets the time in milliseconds how long action has been active In case there is no current action...
Definition: instance.cpp:853
virtual void onInstanceDeleted(Instance *instance)=0
void setVisual(IVisual *visual)
Sets visualization to be used.
Definition: instance.h:327
VisitorShapeType
Definition: instance.h:87
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:862
Action * getCurrentAction() const
Gets the currently active action.
Definition: instance.cpp:810
std::string m_sayText
say text on previous round
Definition: instance.h:479
bool isSpecialCost()
Returns true if instance or object have special cost otherwise false.
Definition: instance.cpp:565
Location & getLocationRef()
Gets reference of current location of instance.
Definition: instance.cpp:307
A basic route.
Definition: route.h:64
void callOnTransparencyChange()
Definition: instance.cpp:898
const std::string * getSayText() const
Returns pointer to currently set saytext.
Definition: instance.cpp:601
void update(Instance &source)
updates cached variables, marks changes
Definition: instance.cpp:140
void removeDeleteListener(InstanceDeleteListener *listener)
Removes associated instance delete listener.
Definition: instance.cpp:1035
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:518
void addChangeListener(InstanceChangeListener *listener)
Adds new instance change listener.
Definition: instance.cpp:382
double m_speed
speed on previous round
Definition: instance.h:475
unsigned char uint8_t
Definition: core.h:38
IVisual * m_visual
instance visualization
Definition: instance.h:508
int32_t m_rotation
The rotation offset of this instance.
Definition: instance.h:446
void setOverrideBlocking(bool overblock)
Sets if instance blocking can overriden.
Definition: instance.cpp:354
const std::vector< Instance * > & getMultiInstances()
Returns a vector that contains all instances of a multi object.
Definition: instance.cpp:569
std::vector< InstanceActionListener * > m_actionListeners
listeners for action related events
Definition: instance.h:485
Object * getObject()
Gets object where this instance is instantiated from.
Definition: instance.cpp:280
std::vector< InstanceChangeListener * > m_changeListeners
listeners for changes
Definition: instance.h:481
uint32_t InstanceChangeInfo
Definition: instance.h:73
float m_timeMultiplier
time multiplier on previous round
Definition: instance.h:477
void callOnStackPositionChange()
Definition: instance.cpp:916
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:327
uint8_t VisitorShapeInfo
Definition: instance.h:92
Location & getOldLocationRef()
Gets reference of old location of instance.
Definition: instance.cpp:839
Location getFacingLocation()
Returns the direction where instance is heading.
Definition: instance.cpp:835
virtual ~InstanceDeleteListener()
Definition: instance.h:83
void setTimeMultiplier(float multip)
Sets speed for the map.
Definition: instance.cpp:925
Location getLocation() const
Gets current location of instance.
Definition: instance.cpp:303
virtual void onInstanceActionFrame(Instance *instance, Action *action, int32_t frame)=0
void removeChangeListener(InstanceChangeListener *listener)
Removes associated instance change listener.
Definition: instance.cpp:401
uint8_t getCellStackPosition()
Gets the cell stack position.
Definition: instance.cpp:561
void onInstanceDeleted(Instance *instance)
callback so other instances we depend on can notify us if they go away
Definition: instance.cpp:1050
InstanceActivity gets allocated in case there is some runtime activity related to the instance...
Definition: instance.h:456
unsigned short uint16_t
Definition: core.h:39
Location m_location
location on previous round
Definition: instance.h:465
void bindTimeProvider()
rebinds time provider based on new location
Definition: instance.cpp:866
std::string m_id
Definition: instance.h:442
void act(const std::string &actionName, const Location &direction, bool repeating=false)
Performs given named action to the instance.
Definition: instance.cpp:573
void setBlocking(bool blocking)
Sets if instance blocks movement.
Definition: instance.cpp:339
double getMovementSpeed() const
Gets the speed in case instance is moving otherwise returns 0.
Definition: instance.cpp:824
InstanceChangeInfo m_additional
additional change info, used for visual class (transparency, visible, stackpos)
Definition: instance.h:495
void finalizeAction()
Finalize current action.
Definition: instance.cpp:777
ActionInfo * m_actionInfo
action information, allocated when actions are bind
Definition: instance.h:487
void setCellStackPosition(uint8_t stack)
Sets the cell stack position.
Definition: instance.cpp:557
double m_cost
holds cost value
Definition: instance.h:524
TimeProvider * m_timeProvider
time scaler for this instance
Definition: instance.h:491
SayInfo * m_sayInfo
text to say + duration, allocated when something is said
Definition: instance.h:489
VisitorShapeInfo getVisitorShape()
Gets the shape type for a visitor.
Definition: instance.cpp:545
Instance & operator=(const Instance &)
InstanceChangeInfo m_changeInfo
bitmask stating current changes
Definition: instance.h:499
bool m_specialCost
indicates special cost
Definition: instance.h:522
std::string m_costId
holds cost id
Definition: instance.h:526
std::vector< Instance * > m_multiInstances
vector that holds all multi instances
Definition: instance.h:529
double getCost()
Returns cost value.
Definition: instance.cpp:978
float getTotalTimeMultiplier()
Gets instance speed, considering also model and map speeds.
Definition: instance.cpp:940
bool isOverrideBlocking() const
Gets if instance blocking can overriden.
Definition: instance.cpp:358
float getTimeMultiplier()
Gets instance speed.
Definition: instance.cpp:933
void resetCost()
Resets cost.
Definition: instance.cpp:974
InstanceChangeInfo update()
Updates the instance related to the current action.
Definition: instance.cpp:721
int32_t getOldRotation() const
Get the old rotation offset of this instance Returns direction where instance was heading...
Definition: instance.cpp:846
virtual ~InstanceChangeListener()
Definition: instance.h:77
const std::string & getId()
Get the identifier for this instance; possibly null.
Definition: instance.cpp:335
Location m_oldLocation
location on previous cell
Definition: instance.h:467
void setRotation(int32_t rotation)
Set the rotation offset of this instance.
Definition: instance.cpp:311
void removeActionListener(InstanceActionListener *listener)
Removes associated instance action listener.
Definition: instance.cpp:367
InstanceChangeType
Definition: instance.h:59
virtual ~Instance()
Destructor.
Definition: instance.cpp:241
uint32_t getRuntime()
Gets the scaled runtime in milliseconds.
Definition: instance.cpp:953
Route * getRoute()
Returns a pointer to the route, in case there is no, it returns NULL.
Definition: instance.cpp:523
void refresh()
Refreshes instance e.g.
Definition: instance.cpp:886
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:444
unsigned int uint32_t
Definition: core.h:40
Object * m_object
object where instantiated from
Definition: instance.h:504
uint16_t getVisitorRadius()
Gets the visitor range.
Definition: instance.cpp:553
bool isVisitor()
If instance is a visitor it returns true otherwise false.
Definition: instance.cpp:537
bool isMultiCell()
Returns true if it is multi cell otherwise false.
Definition: instance.cpp:992
uint8_t m_cellStackPos
position on cell stack
Definition: instance.h:520
int32_t m_rotation
rotation on previous round
Definition: instance.h:469
void setLocation(const Location &loc)
Sets location of the instance.
Definition: instance.cpp:284
An Instance is an &quot;instantiation&quot; of an Object at a Location.
Definition: instance.h:97
bool processMovement()
Moves instance. Returns true if finished.
Definition: instance.cpp:608
bool m_overrideBlocking
allow to override the blocking property
Definition: instance.h:512
void setCost(const std::string &id, double cost)
Sets for the given cost id a cost.
Definition: instance.cpp:968
int32_t m_oldRotation
rotation on previous round
Definition: instance.h:471
void say(const std::string &text, uint32_t duration=0)
Causes instance to &quot;say&quot; given text (shown on screen next to the instance)
Definition: instance.cpp:590
void setVisitor(bool visit)
Marks this instance as a visitor.
Definition: instance.cpp:533
void setVisitorShape(VisitorShapeInfo info)
Sets the shape type for a visitor.
Definition: instance.cpp:541