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/ivisual.h"
51 class InstanceActionListener {
53 virtual ~InstanceActionListener() {};
54 virtual void onInstanceActionFinished(Instance* instance, Action* action) = 0;
55 virtual void onInstanceActionFrame(Instance* instance, Action* action, int32_t frame) = 0;
58 enum InstanceChangeType {
59 ICHANGE_NO_CHANGES = 0x0000,
61 ICHANGE_FACING_LOC = 0x0002,
62 ICHANGE_SPEED = 0x0004,
63 ICHANGE_ACTION = 0x0008,
64 ICHANGE_TIME_MULTIPLIER = 0x0010,
65 ICHANGE_SAYTEXT = 0x0020,
66 ICHANGE_ROTATION = 0x0040,
67 ICHANGE_BLOCK = 0x0080,
70 typedef uint32_t InstanceChangeInfo;
72 class InstanceChangeListener {
74 virtual ~InstanceChangeListener() {};
75 virtual void onInstanceChanged(Instance* instance, InstanceChangeInfo info) = 0;
79 class InstanceDeleteListener {
81 virtual ~InstanceDeleteListener() {};
82 virtual void onInstanceDeleted(Instance* instance) =0;
95 Instance(
Object*
object,
const Location& location,
const std::string& identifier=
"");
103 const std::string&
getId() {
return m_id; }
107 void setId(
const std::string& identifier=
"");
247 void move(
const std::string& action_name,
const Location& target,
const double speed);
254 void act(
const std::string& action_name,
const Location& direction,
bool repeating=
false);
260 void say(
const std::string& text, uint32_t duration=0);
268 void follow(
const std::string& action_name,
Instance* leader,
const double speed);
279 InstanceChangeInfo
update();
291 template<
typename T> T*
getVisual()
const {
return reinterpret_cast<T*
>(m_visual); }
338 class InstanceActivity {
351 Location m_facinglocation;
357 float m_timemultiplier;
359 std::string m_saytxt;
361 std::vector<InstanceChangeListener*> m_changelisteners;
365 std::vector<InstanceActionListener*> m_actionlisteners;
367 ActionInfo* m_actioninfo;
375 InstanceActivity* m_activity;
377 InstanceChangeInfo m_changeinfo;
379 std::vector<InstanceDeleteListener*> m_deletelisteners;
386 Location* m_facinglocation;
392 bool m_override_blocking;
397 void finalizeAction();
399 void initializeAction(
const std::string& action_name);
401 bool process_movement();
405 void bindTimeProvider();
407 void initializeChanges();
414 return ICHANGE_NO_CHANGES;
Instance(Object *object, const Location &location, const std::string &identifier="")
void addActionListener(InstanceActionListener *listener)
void setId(const std::string &identifier="")
void addDeleteListener(InstanceDeleteListener *listener)
void callOnActionFrame(Action *action, int32_t frame)
const std::string & getId()
void setFacingLocation(const Location &loc)
Location getTargetLocation() const
void act(const std::string &action_name, const Location &direction, bool repeating=false)
InstanceChangeInfo getChangeInfo()
uint32_t getActionRuntime()
void setVisual(IVisual *visual)
void setActionRuntime(uint32_t time_offset)
Action * getCurrentAction() const
void follow(const std::string &action_name, Instance *leader, const double speed)
Location & getFacingLocationRef()
const std::string * getSayText() const
void removeDeleteListener(InstanceDeleteListener *listener)
void addChangeListener(InstanceChangeListener *listener)
void setOverrideBlocking(bool overblock)
int32_t getRotation() const
Location getFacingLocation()
void setTimeMultiplier(float multip)
Location & getLocationRef()
Location getLocation() const
void removeChangeListener(InstanceChangeListener *listener)
void onInstanceDeleted(Instance *instance)
void setBlocking(bool blocking)
double getMovementSpeed() const
float getTotalTimeMultiplier()
bool isOverrideBlocking() const
float getTimeMultiplier()
void move(const std::string &action_name, const Location &target, const double speed)
InstanceChangeInfo update()
void setRotation(int32_t rotation)
void removeActionListener(InstanceActionListener *listener)
void setLocation(const Location &loc)
void say(const std::string &text, uint32_t duration=0)