FIFE  be64c707dea6b3250bd4355bf5c825d25920087d
instance.h
Go to the documentation of this file.
1 /***************************************************************************
2  * Copyright (C) 2005-2019 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 SoundSource;
51  class TimeProvider;
52  class Route;
53 
55  public:
57  virtual void onInstanceActionFinished(Instance* instance, Action* action) = 0;
58  virtual void onInstanceActionCancelled(Instance* instance, Action* action) = 0;
59  virtual void onInstanceActionFrame(Instance* instance, Action* action, int32_t frame) = 0;
60  };
61 
64  ICHANGE_LOC = 0x0001,
65  ICHANGE_ROTATION = 0x0002,
66  ICHANGE_SPEED = 0x0004,
67  ICHANGE_ACTION = 0x0008,
69  ICHANGE_SAYTEXT = 0x0020,
70  ICHANGE_BLOCK = 0x0040,
71  ICHANGE_CELL = 0x0080,
73  ICHANGE_VISIBLE = 0x0200,
74  ICHANGE_STACKPOS = 0x0400,
75  ICHANGE_VISUAL = 0x0800
76  };
78 
80  public:
82  virtual void onInstanceChanged(Instance* instance, InstanceChangeInfo info) = 0;
83  };
84 
86  public:
88  virtual void onInstanceDeleted(Instance* instance) =0;
89  };
90 
94  class Instance : public FifeClass, public InstanceDeleteListener {
95  public:
96 
101  Instance(Object* object, const Location& location, const std::string& identifier="");
102 
105  virtual ~Instance();
106 
109  const std::string& getId();
110 
113  void setId(const std::string& identifier="");
114 
117  Object* getObject();
118 
122  void setLocation(const Location& loc);
123 
128  Location getLocation() const;
129 
133  Location& getLocationRef();
134 
141  Location getTargetLocation() const;
142 
146  void setFacingLocation(const Location& loc);
147 
152  Location getFacingLocation();
153 
157  Location& getOldLocationRef();
158 
161  void setRotation(int32_t rotation);
162 
166  int32_t getRotation() const;
167 
171  int32_t getOldRotation() const;
172 
175  void setBlocking(bool blocking);
176 
179  bool isBlocking() const;
180 
183  void setOverrideBlocking(bool overblock);
184 
187  bool isOverrideBlocking() const;
188 
193  void callOnActionFrame(Action* action, int32_t frame);
194 
198  void addActionListener(InstanceActionListener* listener);
199 
203  void removeActionListener(InstanceActionListener* listener);
204 
208  void addChangeListener(InstanceChangeListener* listener);
209 
213  void removeChangeListener(InstanceChangeListener* listener);
214 
218  void addDeleteListener(InstanceDeleteListener* listener);
219 
223  void removeDeleteListener(InstanceDeleteListener* listener);
224 
229  Action* getCurrentAction() const;
230 
235  double getMovementSpeed() const;
236 
241  uint32_t getActionRuntime();
242 
248  void setActionRuntime(uint32_t time_offset);
249 
257  void move(const std::string& actionName, const Location& target, const double speed, const std::string& costId = "");
258 
263  void actOnce(const std::string& actionName, const Location& direction);
264 
269  void actOnce(const std::string& actionName, int32_t rotation);
270 
274  void actOnce(const std::string& actionName);
275 
280  void actRepeat(const std::string& actionName, const Location& direction);
281 
286  void actRepeat(const std::string& actionName, int32_t rotation);
287 
291  void actRepeat(const std::string& actionName);
292 
297  void say(const std::string& text, uint32_t duration=0);
298 
305  void follow(const std::string& actionName, Instance* leader, const double speed);
306 
313  void follow(const std::string& actionName, Route* route, const double speed);
314 
319  void cancelMovement(uint32_t length = 1);
320 
323  const std::string* getSayText() const;
324 
330  InstanceChangeInfo update();
331 
334  bool isActive() const;
335 
338  void setVisual(IVisual* visual) { m_visual = visual; }
339 
342  template<typename T> T* getVisual() const { return reinterpret_cast<T*>(m_visual); }
343 
344  void callOnTransparencyChange();
345  void callOnVisibleChange();
346  void callOnStackPositionChange();
347 
350  void setTimeMultiplier(float multip);
351 
354  float getTimeMultiplier();
355 
358  float getTotalTimeMultiplier();
359 
363  uint32_t getRuntime();
364 
368  void refresh();
369 
372  InstanceChangeInfo getChangeInfo();
373 
376  void onInstanceDeleted(Instance* instance);
377 
380  Route* getRoute();
381 
384  void setCellStackPosition(uint8_t stack);
385 
388  uint8_t getCellStackPosition();
389 
392  bool isSpecialCost();
393 
398  void setCost(const std::string& id, double cost);
399 
402  void resetCost();
403 
406  double getCost();
407 
410  std::string getCostId();
411 
414  double getSpeed();
415 
418  bool isSpecialSpeed();
419 
422  bool isMultiCell();
423 
426  bool isMultiObject();
427 
430  void updateMultiInstances();
431 
434  const std::vector<Instance*>& getMultiInstances();
435 
438  void setMainMultiInstance(Instance* main);
439 
442  Instance* getMainMultiInstance();
443 
446  void addStaticColorOverlay(uint32_t angle, const OverlayColors& colors);
447 
451  OverlayColors* getStaticColorOverlay(int32_t angle);
452 
455  void removeStaticColorOverlay(int32_t angle);
456 
459  bool isStaticColorOverlay();
460 
463  void addColorOverlay(const std::string& actionName, uint32_t angle, const OverlayColors& colors);
464 
468  OverlayColors* getColorOverlay(const std::string& actionName, uint32_t angle);
469 
472  void removeColorOverlay(const std::string& actionName, int32_t angle);
473 
476  void addAnimationOverlay(const std::string& actionName, uint32_t angle, int32_t order, const AnimationPtr& animationptr);
477 
481  std::map<int32_t, AnimationPtr> getAnimationOverlay(const std::string& actionName, int32_t angle);
482 
485  void removeAnimationOverlay(const std::string& actionName, uint32_t angle, int32_t order);
486 
489  void addColorOverlay(const std::string& actionName, uint32_t angle, int32_t order, const OverlayColors& colors);
490 
494  OverlayColors* getColorOverlay(const std::string& actionName, uint32_t angle, int32_t order);
495 
498  void removeColorOverlay(const std::string& actionName, int32_t angle, int32_t order);
499 
502  void convertToOverlays(const std::string& actionName, bool color);
503 
506  bool isAnimationOverlay(const std::string& actionName);
507 
510  bool isColorOverlay(const std::string& actionName);
511 
512  private:
513  std::string m_id;
514 
517  int32_t m_rotation;
518 
528  public:
529  InstanceActivity(Instance& source);
530  ~InstanceActivity();
531 
532  // ----- Fields related to change tracking -----
534  void update(Instance& source);
540  int32_t m_rotation;
542  int32_t m_oldRotation;
548  double m_speed;
552  std::string m_sayText;
554  std::vector<InstanceChangeListener*> m_changeListeners;
555 
556  // ----- Fields related to generic activity -----
558  std::vector<InstanceActionListener*> m_actionListeners;
568  InstanceChangeInfo m_additional;
569  };
572  InstanceChangeInfo m_changeInfo;
574  std::vector<InstanceDeleteListener*> m_deleteListeners;
575 
593  double m_cost;
595  std::string m_costId;
597  std::vector<Instance*> m_multiInstances;
600 
601  Instance(const Instance&);
602  Instance& operator=(const Instance&);
604  void finalizeAction();
606  void cancelAction();
608  void initializeAction(const std::string& actionName);
610  bool processMovement();
612  void calcMovement();
614  void bindTimeProvider();
616  void initializeChanges();
618  void prepareForUpdate();
619 
621  void createOwnObject();
623  ActionVisual* getActionVisual(const std::string& actionName, bool create);
624  };
625 } // FIFE
626 
627 #endif
Timeprovider is an utility providing time management functionality You can have hierarchy of time pro...
Definition: timeprovider.h:42
InstanceActivity * m_activity
Definition: instance.h:570
Action * m_action
action on previous round. NOTE: might become invalid, only used for address comparison ...
Definition: instance.h:544
bool m_ownObject
indicates if m_object is customized
Definition: instance.h:579
Interface class between Instance / ActionAudio and SoundEmitter.
Definition: soundsource.h:45
Object class.
Definition: object.h:51
bool m_blocking
blocking status on previous round
Definition: instance.h:566
SoundSource * m_soundSource
sound source of action audio on previous round
Definition: instance.h:546
Action visual contains data that is needed to visualize different actions on screen.
Definition: visual.h:212
virtual ~InstanceActionListener()
Definition: instance.h:56
std::vector< InstanceDeleteListener * > m_deleteListeners
listeners for deletion of the instance
Definition: instance.h:574
bool m_blocking
instance blocking info
Definition: instance.h:585
Base class for all fife classes Used e.g.
Definition: fifeclass.h:42
Location m_location
current location
Definition: instance.h:581
virtual void onInstanceActionCancelled(Instance *instance, Action *action)=0
void setVisual(IVisual *visual)
Sets visualization to be used.
Definition: instance.h:338
std::string m_sayText
say text on previous round
Definition: instance.h:552
A basic route.
Definition: route.h:64
virtual void onInstanceActionFinished(Instance *instance, Action *action)=0
double m_speed
speed on previous round
Definition: instance.h:548
unsigned char uint8_t
Definition: core.h:38
IVisual * m_visual
instance visualization
Definition: instance.h:583
int32_t m_rotation
The rotation offset of this instance.
Definition: instance.h:517
Instance * m_mainMultiInstance
pointer to the main multi instance
Definition: instance.h:599
std::vector< InstanceActionListener * > m_actionListeners
listeners for action related events
Definition: instance.h:558
std::vector< InstanceChangeListener * > m_changeListeners
listeners for changes
Definition: instance.h:554
uint32_t InstanceChangeInfo
Definition: instance.h:77
float m_timeMultiplier
time multiplier on previous round
Definition: instance.h:550
virtual ~InstanceDeleteListener()
Definition: instance.h:87
virtual void onInstanceActionFrame(Instance *instance, Action *action, int32_t frame)=0
InstanceActivity gets allocated in case there is some runtime activity related to the instance...
Definition: instance.h:527
Location m_location
location on previous round
Definition: instance.h:536
std::string m_id
Definition: instance.h:513
InstanceChangeInfo m_additional
additional change info, used for visual class (transparency, visible, stackpos)
Definition: instance.h:568
ActionInfo * m_actionInfo
action information, allocated when actions are bind
Definition: instance.h:560
double m_cost
holds cost value
Definition: instance.h:593
TimeProvider * m_timeProvider
time scaler for this instance
Definition: instance.h:564
SayInfo * m_sayInfo
text to say + duration, allocated when something is said
Definition: instance.h:562
InstanceChangeInfo m_changeInfo
bitmask stating current changes
Definition: instance.h:572
bool m_specialCost
indicates special cost
Definition: instance.h:591
std::string m_costId
holds cost id
Definition: instance.h:595
std::vector< Instance * > m_multiInstances
vector that holds all multi instances
Definition: instance.h:597
T * getVisual() const
Gets used visualization.
Definition: instance.h:342
virtual ~InstanceChangeListener()
Definition: instance.h:81
Location m_oldLocation
location on previous cell
Definition: instance.h:538
InstanceChangeType
Definition: instance.h:62
unsigned int uint32_t
Definition: core.h:40
Object * m_object
object where instantiated from
Definition: instance.h:577
uint8_t m_cellStackPos
position on cell stack
Definition: instance.h:589
int32_t m_rotation
rotation on previous round
Definition: instance.h:540
An Instance is an "instantiation" of an Object at a Location.
Definition: instance.h:94
bool m_overrideBlocking
allow to override the blocking property
Definition: instance.h:587
int32_t m_oldRotation
rotation on previous round
Definition: instance.h:542