22 #ifndef FIFE_INSTANCE_H
23 #define FIFE_INSTANCE_H
34 #include "util/base/fifeclass.h"
36 #include "model/metamodel/object.h"
37 #include "model/metamodel/abstractvisual.h"
51 class InstanceActionListener {
53 virtual ~InstanceActionListener() {};
54 virtual void onInstanceActionFinished(Instance* instance, Action* action) = 0;
57 enum InstanceChangeType {
58 ICHANGE_NO_CHANGES = 0x0000,
60 ICHANGE_FACING_LOC = 0x0002,
61 ICHANGE_SPEED = 0x0004,
62 ICHANGE_ACTION = 0x0008,
63 ICHANGE_TIME_MULTIPLIER = 0x0010,
64 ICHANGE_SAYTEXT = 0x0020,
65 ICHANGE_ROTATION = 0x0040,
67 typedef unsigned int InstanceChangeInfo;
69 class InstanceChangeListener {
71 virtual ~InstanceChangeListener() {};
72 virtual void onInstanceChanged(Instance* instance, InstanceChangeInfo info) = 0;
76 class InstanceDeleteListener {
78 virtual ~InstanceDeleteListener() {};
79 virtual void onInstanceDeleted(Instance* instance) =0;
92 Instance(
Object*
object,
const Location& location,
const std::string& identifier=
"");
100 const std::string&
getId() {
return m_id; }
104 void setId(
const std::string& identifier=
"");
238 void move(
const std::string& action_name,
const Location& target,
const double speed);
245 void act(
const std::string& action_name,
const Location& direction,
bool repeating=
false);
251 void say(
const std::string& text,
unsigned int duration=0);
259 void follow(
const std::string& action_name,
Instance* leader,
const double speed);
270 InstanceChangeInfo
update();
278 void setVisual(AbstractVisual* visual) { m_visual = visual; }
282 template<
typename T> T*
getVisual()
const {
return reinterpret_cast<T*
>(m_visual); }
329 class InstanceActivity {
342 Location m_facinglocation;
348 float m_timemultiplier;
350 std::string m_saytxt;
352 std::vector<InstanceChangeListener*> m_changelisteners;
356 std::vector<InstanceActionListener*> m_actionlisteners;
358 ActionInfo* m_actioninfo;
364 InstanceActivity* m_activity;
366 InstanceChangeInfo m_changeinfo;
368 std::vector<InstanceDeleteListener*> m_deletelisteners;
375 Location* m_facinglocation;
377 AbstractVisual* m_visual;
381 bool m_override_blocking;
386 void finalizeAction();
388 void initializeAction(
const std::string& action_name);
390 bool process_movement();
394 void bindTimeProvider();
396 void initializeChanges();
403 return ICHANGE_NO_CHANGES;