annotate engine/core/model/structures/instance.cpp @ 378:64738befdf3b

bringing in the changes from the build_system_rework branch in preparation for the 0.3.0 release. This commit will require the Jan2010 devkit. Clients will also need to be modified to the new way to import fife.
author vtchill@33b003aa-7bff-0310-803a-e67f0ece8222
date Mon, 11 Jan 2010 23:34:52 +0000
parents 48c38e92e2bd
children 16c2b3ee59ce
rev   line source
0
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
1 /***************************************************************************
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
2 * Copyright (C) 2005-2008 by the FIFE team *
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
3 * http://www.fifengine.de *
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
4 * This file is part of FIFE. *
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
5 * *
46
90005975cdbb * Final LGPL switch step by adjusting the file headers
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 0
diff changeset
6 * FIFE is free software; you can redistribute it and/or *
90005975cdbb * Final LGPL switch step by adjusting the file headers
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 0
diff changeset
7 * modify it under the terms of the GNU Lesser General Public *
90005975cdbb * Final LGPL switch step by adjusting the file headers
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 0
diff changeset
8 * License as published by the Free Software Foundation; either *
90005975cdbb * Final LGPL switch step by adjusting the file headers
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 0
diff changeset
9 * version 2.1 of the License, or (at your option) any later version. *
0
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
10 * *
46
90005975cdbb * Final LGPL switch step by adjusting the file headers
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 0
diff changeset
11 * This library is distributed in the hope that it will be useful, *
0
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of *
46
90005975cdbb * Final LGPL switch step by adjusting the file headers
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 0
diff changeset
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU *
90005975cdbb * Final LGPL switch step by adjusting the file headers
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 0
diff changeset
14 * Lesser General Public License for more details. *
0
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
15 * *
46
90005975cdbb * Final LGPL switch step by adjusting the file headers
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 0
diff changeset
16 * You should have received a copy of the GNU Lesser General Public *
90005975cdbb * Final LGPL switch step by adjusting the file headers
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 0
diff changeset
17 * License along with this library; if not, write to the *
0
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
18 * Free Software Foundation, Inc., *
46
90005975cdbb * Final LGPL switch step by adjusting the file headers
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 0
diff changeset
19 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA *
0
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
20 ***************************************************************************/
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
21
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
22 // Standard C++ library includes
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
23 #include <iostream>
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
24
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
25 // 3rd party library includes
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
26 #include <SDL.h>
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
27
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
28 // FIFE includes
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
29 // These includes are split up in two parts, separated by one empty line
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
30 // First block: files included from the FIFE root src directory
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
31 // Second block: files included from the same folder
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
32 #include "util/log/logger.h"
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
33 #include "util/base/exception.h"
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
34 #include "util/math/fife_math.h"
181
56ac89189bc4 fixed time handling in fife:
spq@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 99
diff changeset
35 #include "util/time/timemanager.h"
0
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
36 #include "model/metamodel/grids/cellgrid.h"
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
37 #include "model/metamodel/abstractpather.h"
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
38 #include "model/metamodel/action.h"
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
39 #include "model/metamodel/timeprovider.h"
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
40 #include "model/structures/layer.h"
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
41 #include "model/structures/map.h"
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
42 #include "model/structures/instancetree.h"
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
43
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
44 #include "instance.h"
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
45
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
46 namespace FIFE {
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
47 static Logger _log(LM_INSTANCE);
189
3d0cc4545938 * Applied two patches from icelus
nihathrael@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 181
diff changeset
48
0
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
49 class ActionInfo {
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
50 public:
189
3d0cc4545938 * Applied two patches from icelus
nihathrael@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 181
diff changeset
51 ActionInfo(AbstractPather* pather, const Location& curloc):
3d0cc4545938 * Applied two patches from icelus
nihathrael@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 181
diff changeset
52 m_action(NULL),
3d0cc4545938 * Applied two patches from icelus
nihathrael@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 181
diff changeset
53 m_target(NULL),
3d0cc4545938 * Applied two patches from icelus
nihathrael@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 181
diff changeset
54 m_speed(0),
0
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
55 m_repeating(false),
181
56ac89189bc4 fixed time handling in fife:
spq@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 99
diff changeset
56 m_action_start_time(0),
348
48c38e92e2bd Added Instance::setActionRuntime() as requested in Ticket #373
prock@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 339
diff changeset
57 m_action_offset_time(0),
181
56ac89189bc4 fixed time handling in fife:
spq@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 99
diff changeset
58 m_prev_call_time(0),
0
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
59 m_pather_session_id(-1),
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
60 m_pather(pather),
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
61 m_leader(NULL) {}
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
62
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
63 ~ActionInfo() {
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
64 if (m_pather_session_id != -1) {
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
65 m_pather->cancelSession(m_pather_session_id);
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
66 }
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
67 delete m_target;
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
68 m_target = NULL;
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
69 }
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
70
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
71 // Current action, owned by object
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
72 Action* m_action;
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
73 // target location for ongoing movement
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
74 Location* m_target;
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
75 // current movement speed
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
76 double m_speed;
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
77 // should action be repeated? used only for non-moving actions, moving ones repeat until movement is finished
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
78 bool m_repeating;
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
79 // action start time (ticks)
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
80 unsigned int m_action_start_time;
348
48c38e92e2bd Added Instance::setActionRuntime() as requested in Ticket #373
prock@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 339
diff changeset
81 // action offset time (ticks) for resuming an action
48c38e92e2bd Added Instance::setActionRuntime() as requested in Ticket #373
prock@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 339
diff changeset
82 unsigned int m_action_offset_time;
0
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
83 // ticks since last call
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
84 unsigned int m_prev_call_time;
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
85 // session id for pather
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
86 int m_pather_session_id;
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
87 // pather
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
88 AbstractPather* m_pather;
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
89 // leader for follow activity
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
90 Instance* m_leader;
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
91 };
189
3d0cc4545938 * Applied two patches from icelus
nihathrael@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 181
diff changeset
92
0
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
93 class SayInfo {
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
94 public:
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
95 SayInfo(const std::string& txt, unsigned int duration):
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
96 m_txt(txt),
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
97 m_duration(duration),
181
56ac89189bc4 fixed time handling in fife:
spq@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 99
diff changeset
98 m_start_time(0) {}
56ac89189bc4 fixed time handling in fife:
spq@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 99
diff changeset
99
0
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
100 std::string m_txt;
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
101 unsigned int m_duration;
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
102 unsigned int m_start_time;
189
3d0cc4545938 * Applied two patches from icelus
nihathrael@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 181
diff changeset
103 };
3d0cc4545938 * Applied two patches from icelus
nihathrael@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 181
diff changeset
104
0
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
105 Instance::InstanceActivity::InstanceActivity(Instance& source):
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
106 m_location(source.m_location),
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
107 m_facinglocation(),
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
108 m_action(),
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
109 m_speed(0),
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
110 m_timemultiplier(1.0),
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
111 m_saytxt(""),
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
112 m_changelisteners(),
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
113 m_actionlisteners(),
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
114 m_actioninfo(NULL),
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
115 m_sayinfo(NULL),
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
116 m_timeprovider(NULL) {
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
117 if (source.m_facinglocation) {
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
118 m_facinglocation = *source.m_facinglocation;
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
119 }
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
120 }
189
3d0cc4545938 * Applied two patches from icelus
nihathrael@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 181
diff changeset
121
0
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
122 Instance::InstanceActivity::~InstanceActivity() {
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
123 delete m_actioninfo;
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
124 delete m_sayinfo;
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
125 delete m_timeprovider;
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
126 }
189
3d0cc4545938 * Applied two patches from icelus
nihathrael@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 181
diff changeset
127
0
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
128 void Instance::InstanceActivity::update(Instance& source) {
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
129 source.m_changeinfo = ICHANGE_NO_CHANGES;
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
130 if (m_location != source.m_location) {
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
131 source.m_changeinfo |= ICHANGE_LOC;
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
132 m_location = source.m_location;
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
133 }
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
134 if (source.m_facinglocation && (m_facinglocation != *source.m_facinglocation)) {
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
135 source.m_changeinfo |= ICHANGE_FACING_LOC;
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
136 m_facinglocation = *source.m_facinglocation;
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
137 }
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
138 if (m_actioninfo && (m_speed != m_actioninfo->m_speed)) {
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
139 source.m_changeinfo |= ICHANGE_SPEED;
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
140 m_speed = m_actioninfo->m_speed;
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
141 }
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
142 if (m_actioninfo && (m_action != m_actioninfo->m_action)) {
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
143 source.m_changeinfo |= ICHANGE_ACTION;
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
144 m_action = m_actioninfo->m_action;
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
145 }
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
146 if (m_timeprovider && (m_timemultiplier != m_timeprovider->getMultiplier())) {
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
147 source.m_changeinfo |= ICHANGE_TIME_MULTIPLIER;
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
148 m_timemultiplier = m_timeprovider->getMultiplier();
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
149 }
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
150 if (m_sayinfo && (m_saytxt != m_sayinfo->m_txt)) {
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
151 source.m_changeinfo |= ICHANGE_SAYTEXT;
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
152 m_saytxt = m_sayinfo->m_txt;
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
153 }
189
3d0cc4545938 * Applied two patches from icelus
nihathrael@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 181
diff changeset
154
0
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
155 if (source.m_changeinfo != ICHANGE_NO_CHANGES) {
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
156 std::vector<InstanceChangeListener*>::iterator i = m_changelisteners.begin();
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
157 while (i != m_changelisteners.end()) {
338
d266506ff4f9 Bug fix.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 244
diff changeset
158 if (NULL != *i)
d266506ff4f9 Bug fix.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 244
diff changeset
159 {
d266506ff4f9 Bug fix.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 244
diff changeset
160 (*i)->onInstanceChanged(&source, source.m_changeinfo);
d266506ff4f9 Bug fix.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 244
diff changeset
161 }
0
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
162 ++i;
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
163 }
338
d266506ff4f9 Bug fix.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 244
diff changeset
164 // Really remove "removed" listeners.
d266506ff4f9 Bug fix.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 244
diff changeset
165 m_changelisteners.erase(
d266506ff4f9 Bug fix.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 244
diff changeset
166 std::remove(m_changelisteners.begin(),m_changelisteners.end(),
d266506ff4f9 Bug fix.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 244
diff changeset
167 (InstanceChangeListener*)NULL),
d266506ff4f9 Bug fix.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 244
diff changeset
168 m_changelisteners.end());
0
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
169 }
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
170 }
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
171
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
172 Instance::Instance(Object* object, const Location& location, const std::string& identifier):
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
173 m_id(identifier),
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
174 m_rotation(0),
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
175 m_activity(NULL),
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
176 m_changeinfo(ICHANGE_NO_CHANGES),
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
177 m_object(object),
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
178 m_location(location),
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
179 m_facinglocation(NULL),
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
180 m_visual(NULL) {
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
181 }
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
182
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
183 Instance::~Instance() {
219
852da06fc922 Moved the removal of deletelistener in instance.cpp to finalizeAction to assure that no duplicate addDeleteLstener
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 210
diff changeset
184 std::vector<InstanceDeleteListener *>::iterator itor;
852da06fc922 Moved the removal of deletelistener in instance.cpp to finalizeAction to assure that no duplicate addDeleteLstener
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 210
diff changeset
185 for(itor = m_deletelisteners.begin();
852da06fc922 Moved the removal of deletelistener in instance.cpp to finalizeAction to assure that no duplicate addDeleteLstener
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 210
diff changeset
186 itor != m_deletelisteners.end();
852da06fc922 Moved the removal of deletelistener in instance.cpp to finalizeAction to assure that no duplicate addDeleteLstener
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 210
diff changeset
187 ++itor) {
852da06fc922 Moved the removal of deletelistener in instance.cpp to finalizeAction to assure that no duplicate addDeleteLstener
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 210
diff changeset
188 (*itor)->onInstanceDeleted(this);
852da06fc922 Moved the removal of deletelistener in instance.cpp to finalizeAction to assure that no duplicate addDeleteLstener
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 210
diff changeset
189 }
852da06fc922 Moved the removal of deletelistener in instance.cpp to finalizeAction to assure that no duplicate addDeleteLstener
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 210
diff changeset
190
852da06fc922 Moved the removal of deletelistener in instance.cpp to finalizeAction to assure that no duplicate addDeleteLstener
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 210
diff changeset
191 if(m_activity && m_activity->m_actioninfo) {
244
7887f3854862 'Fixed' segfault in rio de hola. Font system in FIFE is odd.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 219
diff changeset
192 // Don't ditribute onActionFinished in case we're already
7887f3854862 'Fixed' segfault in rio de hola. Font system in FIFE is odd.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 219
diff changeset
193 // deleting.
7887f3854862 'Fixed' segfault in rio de hola. Font system in FIFE is odd.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 219
diff changeset
194 m_activity->m_actionlisteners.clear();
219
852da06fc922 Moved the removal of deletelistener in instance.cpp to finalizeAction to assure that no duplicate addDeleteLstener
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 210
diff changeset
195 finalizeAction();
852da06fc922 Moved the removal of deletelistener in instance.cpp to finalizeAction to assure that no duplicate addDeleteLstener
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 210
diff changeset
196 }
852da06fc922 Moved the removal of deletelistener in instance.cpp to finalizeAction to assure that no duplicate addDeleteLstener
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 210
diff changeset
197
0
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
198 delete m_activity;
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
199 delete m_facinglocation;
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
200 delete m_visual;
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
201 }
189
3d0cc4545938 * Applied two patches from icelus
nihathrael@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 181
diff changeset
202
0
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
203 void Instance::initializeChanges() {
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
204 if (!m_activity) {
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
205 m_activity = new InstanceActivity(*this);
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
206 }
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
207 }
189
3d0cc4545938 * Applied two patches from icelus
nihathrael@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 181
diff changeset
208
0
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
209 void Instance::setLocation(const Location& loc) {
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
210 initializeChanges();
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
211 m_location = loc;
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
212 bindTimeProvider();
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
213 }
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
214
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
215 void Instance::setRotation(int rotation) {
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
216 m_rotation = rotation;
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
217 m_changeinfo |= ICHANGE_ROTATION;
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
218 }
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
219
99
64e7fe3d4288 - added possibility to change instance ids
spq@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 46
diff changeset
220 void Instance::setId(const std::string& identifier) {
64e7fe3d4288 - added possibility to change instance ids
spq@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 46
diff changeset
221 m_id = identifier;
64e7fe3d4288 - added possibility to change instance ids
spq@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 46
diff changeset
222 }
64e7fe3d4288 - added possibility to change instance ids
spq@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 46
diff changeset
223
0
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
224 void Instance::addActionListener(InstanceActionListener* listener) {
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
225 initializeChanges();
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
226 m_activity->m_actionlisteners.push_back(listener);
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
227 }
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
228
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
229 void Instance::removeActionListener(InstanceActionListener* listener) {
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
230 if (!m_activity) {
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
231 return;
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
232 }
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
233 std::vector<InstanceActionListener*>::iterator i = m_activity->m_actionlisteners.begin();
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
234 while (i != m_activity->m_actionlisteners.end()) {
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
235 if ((*i) == listener) {
339
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 338
diff changeset
236 *i = NULL;
0
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
237 return;
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
238 }
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
239 ++i;
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
240 }
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
241 FL_WARN(_log, "Cannot remove unknown listener");
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
242 }
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
243
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
244 void Instance::addChangeListener(InstanceChangeListener* listener) {
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
245 initializeChanges();
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
246 m_activity->m_changelisteners.push_back(listener);
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
247 }
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
248
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
249 void Instance::removeChangeListener(InstanceChangeListener* listener) {
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
250 if (!m_activity) {
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
251 return;
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
252 }
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
253 std::vector<InstanceChangeListener*>::iterator i = m_activity->m_changelisteners.begin();
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
254 while (i != m_activity->m_changelisteners.end()) {
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
255 if ((*i) == listener) {
338
d266506ff4f9 Bug fix.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 244
diff changeset
256 *i = NULL;
0
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
257 return;
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
258 }
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
259 ++i;
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
260 }
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
261 FL_WARN(_log, "Cannot remove unknown listener");
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
262 }
189
3d0cc4545938 * Applied two patches from icelus
nihathrael@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 181
diff changeset
263 void Instance::initializeAction(const std::string& action_name) {
0
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
264 assert(m_object);
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
265 assert(m_activity);
189
3d0cc4545938 * Applied two patches from icelus
nihathrael@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 181
diff changeset
266 const Action *old_action = m_activity->m_actioninfo ? m_activity->m_actioninfo->m_action : NULL;
0
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
267 if (m_activity->m_actioninfo) {
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
268 delete m_activity->m_actioninfo;
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
269 m_activity->m_actioninfo = NULL;
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
270 }
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
271 m_activity->m_actioninfo = new ActionInfo(m_object->getPather(), m_location);
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
272 m_activity->m_actioninfo->m_action = m_object->getAction(action_name);
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
273 if (!m_activity->m_actioninfo->m_action) {
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
274 delete m_activity->m_actioninfo;
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
275 m_activity->m_actioninfo = NULL;
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
276 throw NotFound(std::string("action ") + action_name + " not found");
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
277 }
189
3d0cc4545938 * Applied two patches from icelus
nihathrael@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 181
diff changeset
278 m_activity->m_actioninfo->m_prev_call_time = getRuntime();
3d0cc4545938 * Applied two patches from icelus
nihathrael@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 181
diff changeset
279 if (m_activity->m_actioninfo->m_action != old_action) {
3d0cc4545938 * Applied two patches from icelus
nihathrael@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 181
diff changeset
280 m_activity->m_actioninfo->m_action_start_time = m_activity->m_actioninfo->m_prev_call_time;
3d0cc4545938 * Applied two patches from icelus
nihathrael@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 181
diff changeset
281 }
0
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
282 }
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
283
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
284 void Instance::move(const std::string& action_name, const Location& target, const double speed) {
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
285 initializeChanges();
189
3d0cc4545938 * Applied two patches from icelus
nihathrael@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 181
diff changeset
286 initializeAction(action_name);
0
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
287 m_activity->m_actioninfo->m_target = new Location(target);
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
288 m_activity->m_actioninfo->m_speed = speed;
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
289 setFacingLocation(target);
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
290 FL_DBG(_log, LMsg("starting action ") << action_name << " from" << m_location << " to " << target << " with speed " << speed);
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
291 }
189
3d0cc4545938 * Applied two patches from icelus
nihathrael@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 181
diff changeset
292
0
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
293 void Instance::follow(const std::string& action_name, Instance* leader, const double speed) {
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
294 initializeChanges();
189
3d0cc4545938 * Applied two patches from icelus
nihathrael@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 181
diff changeset
295 initializeAction(action_name);
0
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
296 m_activity->m_actioninfo->m_target = new Location(leader->getLocationRef());
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
297 m_activity->m_actioninfo->m_speed = speed;
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
298 m_activity->m_actioninfo->m_leader = leader;
338
d266506ff4f9 Bug fix.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 244
diff changeset
299 leader->addDeleteListener(this);
0
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
300 setFacingLocation(*m_activity->m_actioninfo->m_target);
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
301 FL_DBG(_log, LMsg("starting action ") << action_name << " from" << m_location << " to " << *m_activity->m_actioninfo->m_target << " with speed " << speed);
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
302 }
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
303
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
304 void Instance::act(const std::string& action_name, const Location& direction, bool repeating) {
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
305 initializeChanges();
189
3d0cc4545938 * Applied two patches from icelus
nihathrael@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 181
diff changeset
306 initializeAction(action_name);
0
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
307 m_activity->m_actioninfo->m_repeating = repeating;
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
308 setFacingLocation(direction);
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
309 }
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
310
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
311 void Instance::say(const std::string& text, unsigned int duration) {
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
312 initializeChanges();
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
313 delete m_activity->m_sayinfo;
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
314 m_activity->m_sayinfo = NULL;
189
3d0cc4545938 * Applied two patches from icelus
nihathrael@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 181
diff changeset
315
0
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
316 if (text != "") {
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
317 m_activity->m_sayinfo = new SayInfo(text, duration);
181
56ac89189bc4 fixed time handling in fife:
spq@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 99
diff changeset
318 m_activity->m_sayinfo->m_start_time = getRuntime();
0
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
319 }
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
320 }
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
321
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
322 const std::string* Instance::getSayText() const {
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
323 if (m_activity && m_activity->m_sayinfo) {
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
324 return &m_activity->m_sayinfo->m_txt;
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
325 }
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
326 return NULL;
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
327 }
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
328
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
329 void Instance::setFacingLocation(const Location& loc) {
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
330 if (!m_facinglocation) {
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
331 m_facinglocation = new Location(loc);
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
332 } else {
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
333 *m_facinglocation = loc;
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
334 }
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
335 }
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
336
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
337 bool Instance::process_movement() {
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
338 FL_DBG(_log, "Moving...");
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
339 ActionInfo* info = m_activity->m_actioninfo;
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
340 // timeslice for this movement
181
56ac89189bc4 fixed time handling in fife:
spq@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 99
diff changeset
341 unsigned int timedelta = m_activity->m_timeprovider->getGameTime() - info->m_prev_call_time;
0
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
342 FL_DBG(_log, LMsg("timedelta ") << timedelta << " prevcalltime " << info->m_prev_call_time);
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
343 // how far we can travel
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
344 double distance_to_travel = (static_cast<double>(timedelta) / 1000.0) * info->m_speed;
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
345 FL_DBG(_log, LMsg("dist ") << distance_to_travel);
189
3d0cc4545938 * Applied two patches from icelus
nihathrael@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 181
diff changeset
346
0
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
347 Location nextLocation = m_location;
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
348 info->m_pather_session_id = info->m_pather->getNextLocation(
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
349 this, *info->m_target,
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
350 distance_to_travel, nextLocation, *m_facinglocation,
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
351 info->m_pather_session_id);
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
352 m_location.getLayer()->getInstanceTree()->removeInstance(this);
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
353 m_location = nextLocation;
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
354 //ExactModelCoordinate a = nextLocation.getMapCoordinates();
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
355 //ExactModelCoordinate b = m_actioninfo->m_target->getMapCoordinates();
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
356 m_location.getLayer()->getInstanceTree()->addInstance(this);
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
357 // return if we are close enough to target to stop
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
358 if (info->m_pather_session_id == -1) {
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
359 return true;
189
3d0cc4545938 * Applied two patches from icelus
nihathrael@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 181
diff changeset
360 }
0
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
361 return false;
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
362 }
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
363
181
56ac89189bc4 fixed time handling in fife:
spq@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 99
diff changeset
364 InstanceChangeInfo Instance::update() {
0
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
365 if (!m_activity) {
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
366 return ICHANGE_NO_CHANGES;
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
367 }
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
368 m_activity->update(*this);
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
369 if (!m_activity->m_timeprovider) {
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
370 bindTimeProvider();
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
371 }
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
372 ActionInfo* info = m_activity->m_actioninfo;
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
373 if (info) {
181
56ac89189bc4 fixed time handling in fife:
spq@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 99
diff changeset
374 FL_DBG(_log, "updating instance");
0
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
375
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
376 if (info->m_target) {
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
377 FL_DBG(_log, "action contains target for movement");
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
378 // update target if needed
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
379 if (info->m_leader && (info->m_leader->getLocationRef() != *info->m_target)) {
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
380 *info->m_target = info->m_leader->getLocation();
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
381 }
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
382 bool movement_finished = process_movement();
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
383 if (movement_finished) {
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
384 FL_DBG(_log, "movement finished");
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
385 finalizeAction();
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
386 }
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
387 } else {
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
388 FL_DBG(_log, "action does not contain target for movement");
348
48c38e92e2bd Added Instance::setActionRuntime() as requested in Ticket #373
prock@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 339
diff changeset
389 if (m_activity->m_timeprovider->getGameTime() - info->m_action_start_time + info->m_action_offset_time >= info->m_action->getDuration()) {
0
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
390 if (info->m_repeating) {
181
56ac89189bc4 fixed time handling in fife:
spq@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 99
diff changeset
391 info->m_action_start_time = m_activity->m_timeprovider->getGameTime();
348
48c38e92e2bd Added Instance::setActionRuntime() as requested in Ticket #373
prock@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 339
diff changeset
392 // prock: offset no longer needed
48c38e92e2bd Added Instance::setActionRuntime() as requested in Ticket #373
prock@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 339
diff changeset
393 info->m_action_offset_time = 0;
0
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
394 } else {
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
395 finalizeAction();
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
396 }
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
397 }
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
398 }
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
399
204
5816ab527da8 Fix for broken unit test.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 189
diff changeset
400 // previous code may invalidate actioninfo.
5816ab527da8 Fix for broken unit test.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 189
diff changeset
401 if( m_activity->m_actioninfo ) {
5816ab527da8 Fix for broken unit test.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 189
diff changeset
402 m_activity->m_actioninfo->m_prev_call_time = m_activity->m_timeprovider->getGameTime();
5816ab527da8 Fix for broken unit test.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 189
diff changeset
403 }
0
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
404 }
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
405 if (m_activity->m_sayinfo) {
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
406 if (m_activity->m_sayinfo->m_duration > 0) {
181
56ac89189bc4 fixed time handling in fife:
spq@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 99
diff changeset
407 if (m_activity->m_timeprovider->getGameTime() >= m_activity->m_sayinfo->m_start_time + m_activity->m_sayinfo->m_duration) {
0
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
408 say("");
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
409 }
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
410 }
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
411 }
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
412 return m_changeinfo;
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
413 }
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
414
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
415 void Instance::finalizeAction() {
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
416 FL_DBG(_log, "finalizing action");
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
417 assert(m_activity);
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
418 assert(m_activity->m_actioninfo);
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
419
219
852da06fc922 Moved the removal of deletelistener in instance.cpp to finalizeAction to assure that no duplicate addDeleteLstener
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 210
diff changeset
420 if( m_activity->m_actioninfo->m_leader ) {
852da06fc922 Moved the removal of deletelistener in instance.cpp to finalizeAction to assure that no duplicate addDeleteLstener
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 210
diff changeset
421 m_activity->m_actioninfo->m_leader->removeDeleteListener(this);
852da06fc922 Moved the removal of deletelistener in instance.cpp to finalizeAction to assure that no duplicate addDeleteLstener
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 210
diff changeset
422 }
852da06fc922 Moved the removal of deletelistener in instance.cpp to finalizeAction to assure that no duplicate addDeleteLstener
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 210
diff changeset
423
0
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
424 Action* action = m_activity->m_actioninfo->m_action;
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
425 delete m_activity->m_actioninfo;
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
426 m_activity->m_actioninfo = NULL;
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
427
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
428 std::vector<InstanceActionListener*>::iterator i = m_activity->m_actionlisteners.begin();
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
429 while (i != m_activity->m_actionlisteners.end()) {
339
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 338
diff changeset
430 if(*i)
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 338
diff changeset
431 (*i)->onInstanceActionFinished(this, action);
0
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
432 ++i;
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
433 }
339
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 338
diff changeset
434 m_activity->m_actionlisteners.erase(
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 338
diff changeset
435 std::remove(m_activity->m_actionlisteners.begin(),
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 338
diff changeset
436 m_activity->m_actionlisteners.end(),
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 338
diff changeset
437 (InstanceActionListener*)NULL),
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 338
diff changeset
438 m_activity->m_actionlisteners.end());
0
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
439 }
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
440
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
441 Action* Instance::getCurrentAction() const {
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
442 if (m_activity && m_activity->m_actioninfo) {
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
443 return m_activity->m_actioninfo->m_action;
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
444 }
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
445 return NULL;
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
446 }
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
447
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
448 Location Instance::getTargetLocation() const {
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
449 if (m_activity && m_activity->m_actioninfo && m_activity->m_actioninfo->m_target) {
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
450 return *m_activity->m_actioninfo->m_target;
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
451 }
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
452 return m_location;
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
453 }
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
454
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
455 double Instance::getMovementSpeed() const {
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
456 if (m_activity && m_activity->m_actioninfo) {
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
457 return m_activity->m_actioninfo->m_speed;
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
458 }
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
459 return 0;
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
460 }
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
461
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
462 Location Instance::getFacingLocation() {
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
463 return this->getFacingLocationRef();
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
464 }
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
465
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
466 Location& Instance::getFacingLocationRef() {
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
467 if (!m_facinglocation) {
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
468 m_facinglocation = new Location(m_location);
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
469 m_facinglocation->setExactLayerCoordinates(m_facinglocation->getExactLayerCoordinates() + ExactModelCoordinate(1.0, 0.0));
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
470 //m_facinglocation->setLayerCoordinates(ModelCoordinate(1,0));
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
471 }
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
472 return *m_facinglocation;
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
473 }
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
474
181
56ac89189bc4 fixed time handling in fife:
spq@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 99
diff changeset
475 unsigned int Instance::getActionRuntime() {
0
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
476 if (m_activity && m_activity->m_actioninfo) {
181
56ac89189bc4 fixed time handling in fife:
spq@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 99
diff changeset
477 if(!m_activity->m_timeprovider)
56ac89189bc4 fixed time handling in fife:
spq@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 99
diff changeset
478 bindTimeProvider();
348
48c38e92e2bd Added Instance::setActionRuntime() as requested in Ticket #373
prock@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 339
diff changeset
479 return m_activity->m_timeprovider->getGameTime() - m_activity->m_actioninfo->m_action_start_time + m_activity->m_actioninfo->m_action_offset_time;
0
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
480 }
181
56ac89189bc4 fixed time handling in fife:
spq@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 99
diff changeset
481 return getRuntime();
0
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
482 }
181
56ac89189bc4 fixed time handling in fife:
spq@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 99
diff changeset
483
348
48c38e92e2bd Added Instance::setActionRuntime() as requested in Ticket #373
prock@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 339
diff changeset
484 void Instance::setActionRuntime(unsigned int time_offset) {
48c38e92e2bd Added Instance::setActionRuntime() as requested in Ticket #373
prock@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 339
diff changeset
485 m_activity->m_actioninfo->m_action_offset_time = time_offset;
48c38e92e2bd Added Instance::setActionRuntime() as requested in Ticket #373
prock@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 339
diff changeset
486 }
48c38e92e2bd Added Instance::setActionRuntime() as requested in Ticket #373
prock@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 339
diff changeset
487
0
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
488 void Instance::bindTimeProvider() {
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
489 float multiplier = 1.0;
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
490 if (m_activity->m_timeprovider) {
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
491 multiplier = m_activity->m_timeprovider->getMultiplier();
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
492 }
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
493 delete m_activity->m_timeprovider;
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
494 m_activity->m_timeprovider = NULL;
189
3d0cc4545938 * Applied two patches from icelus
nihathrael@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 181
diff changeset
495
0
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
496 if (m_location.getLayer()) {
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
497 Map* map = m_location.getLayer()->getMap();
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
498 if (map) {
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
499 m_activity->m_timeprovider = new TimeProvider(map->getTimeProvider());
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
500 }
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
501 }
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
502 if (!m_activity->m_timeprovider) {
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
503 m_activity->m_timeprovider = new TimeProvider(NULL);
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
504 }
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
505 m_activity->m_timeprovider->setMultiplier(multiplier);
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
506 }
181
56ac89189bc4 fixed time handling in fife:
spq@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 99
diff changeset
507
0
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
508 void Instance::refresh() {
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
509 initializeChanges();
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
510 bindTimeProvider();
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
511 }
181
56ac89189bc4 fixed time handling in fife:
spq@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 99
diff changeset
512
0
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
513 void Instance::setTimeMultiplier(float multip) {
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
514 initializeChanges();
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
515 if (!m_activity->m_timeprovider) {
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
516 bindTimeProvider();
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
517 }
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
518 m_activity->m_timeprovider->setMultiplier(multip);
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
519 }
181
56ac89189bc4 fixed time handling in fife:
spq@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 99
diff changeset
520
0
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
521 float Instance::getTimeMultiplier() {
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
522 if (m_activity && m_activity->m_timeprovider) {
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
523 return m_activity->m_timeprovider->getMultiplier();
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
524 }
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
525 return 1.0;
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
526 }
181
56ac89189bc4 fixed time handling in fife:
spq@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 99
diff changeset
527
0
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
528 float Instance::getTotalTimeMultiplier() {
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
529 if (m_activity && m_activity->m_timeprovider) {
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
530 return m_activity->m_timeprovider->getTotalMultiplier();
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
531 }
181
56ac89189bc4 fixed time handling in fife:
spq@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 99
diff changeset
532 if (m_location.getLayer()) {
56ac89189bc4 fixed time handling in fife:
spq@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 99
diff changeset
533 Map* map = m_location.getLayer()->getMap();
56ac89189bc4 fixed time handling in fife:
spq@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 99
diff changeset
534 if (map && map->getTimeProvider()) {
56ac89189bc4 fixed time handling in fife:
spq@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 99
diff changeset
535 return map->getTimeProvider()->getTotalMultiplier();
56ac89189bc4 fixed time handling in fife:
spq@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 99
diff changeset
536 }
56ac89189bc4 fixed time handling in fife:
spq@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 99
diff changeset
537 }
0
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
538 return 1.0;
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
539 }
181
56ac89189bc4 fixed time handling in fife:
spq@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 99
diff changeset
540
56ac89189bc4 fixed time handling in fife:
spq@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 99
diff changeset
541 unsigned int Instance::getRuntime() {
56ac89189bc4 fixed time handling in fife:
spq@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 99
diff changeset
542 if (m_activity) {
56ac89189bc4 fixed time handling in fife:
spq@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 99
diff changeset
543 if(!m_activity->m_timeprovider)
56ac89189bc4 fixed time handling in fife:
spq@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 99
diff changeset
544 bindTimeProvider();
56ac89189bc4 fixed time handling in fife:
spq@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 99
diff changeset
545 return m_activity->m_timeprovider->getGameTime();
56ac89189bc4 fixed time handling in fife:
spq@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 99
diff changeset
546 }
56ac89189bc4 fixed time handling in fife:
spq@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 99
diff changeset
547 if (m_location.getLayer()) {
56ac89189bc4 fixed time handling in fife:
spq@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 99
diff changeset
548 Map* map = m_location.getLayer()->getMap();
56ac89189bc4 fixed time handling in fife:
spq@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 99
diff changeset
549 if (map && map->getTimeProvider()) {
56ac89189bc4 fixed time handling in fife:
spq@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 99
diff changeset
550 return map->getTimeProvider()->getGameTime();
56ac89189bc4 fixed time handling in fife:
spq@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 99
diff changeset
551 }
56ac89189bc4 fixed time handling in fife:
spq@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 99
diff changeset
552 }
56ac89189bc4 fixed time handling in fife:
spq@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 99
diff changeset
553 return TimeManager::instance()->getTime();
56ac89189bc4 fixed time handling in fife:
spq@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 99
diff changeset
554 }
210
be246fb3a0df Remove mutable from m_deletelisteners
icelus@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 209
diff changeset
555 void Instance::addDeleteListener(InstanceDeleteListener *listener) {
209
044d1fead5d2 * Applying icelus' "leader is not around anymore" patch from #350
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 204
diff changeset
556 m_deletelisteners.push_back(listener);
044d1fead5d2 * Applying icelus' "leader is not around anymore" patch from #350
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 204
diff changeset
557 }
210
be246fb3a0df Remove mutable from m_deletelisteners
icelus@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 209
diff changeset
558 void Instance::removeDeleteListener(InstanceDeleteListener *listener) {
209
044d1fead5d2 * Applying icelus' "leader is not around anymore" patch from #350
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 204
diff changeset
559 std::vector<InstanceDeleteListener*>::iterator itor;
044d1fead5d2 * Applying icelus' "leader is not around anymore" patch from #350
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 204
diff changeset
560 itor = std::find(m_deletelisteners.begin(),
044d1fead5d2 * Applying icelus' "leader is not around anymore" patch from #350
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 204
diff changeset
561 m_deletelisteners.end(),
044d1fead5d2 * Applying icelus' "leader is not around anymore" patch from #350
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 204
diff changeset
562 listener);
044d1fead5d2 * Applying icelus' "leader is not around anymore" patch from #350
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 204
diff changeset
563 if(itor != m_deletelisteners.end()) {
044d1fead5d2 * Applying icelus' "leader is not around anymore" patch from #350
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 204
diff changeset
564 m_deletelisteners.erase(itor);
044d1fead5d2 * Applying icelus' "leader is not around anymore" patch from #350
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 204
diff changeset
565 } else {
044d1fead5d2 * Applying icelus' "leader is not around anymore" patch from #350
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 204
diff changeset
566 FL_WARN(_log, "Cannot remove unknown listener");
044d1fead5d2 * Applying icelus' "leader is not around anymore" patch from #350
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 204
diff changeset
567 }
044d1fead5d2 * Applying icelus' "leader is not around anymore" patch from #350
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 204
diff changeset
568 }
044d1fead5d2 * Applying icelus' "leader is not around anymore" patch from #350
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 204
diff changeset
569 void Instance::onInstanceDeleted(Instance* instance) {
044d1fead5d2 * Applying icelus' "leader is not around anymore" patch from #350
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 204
diff changeset
570 if(m_activity &&
044d1fead5d2 * Applying icelus' "leader is not around anymore" patch from #350
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 204
diff changeset
571 m_activity->m_actioninfo &&
044d1fead5d2 * Applying icelus' "leader is not around anymore" patch from #350
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 204
diff changeset
572 m_activity->m_actioninfo->m_leader == instance) {
044d1fead5d2 * Applying icelus' "leader is not around anymore" patch from #350
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 204
diff changeset
573 m_activity->m_actioninfo->m_leader = NULL;
044d1fead5d2 * Applying icelus' "leader is not around anymore" patch from #350
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 204
diff changeset
574 }
044d1fead5d2 * Applying icelus' "leader is not around anymore" patch from #350
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 204
diff changeset
575 }
0
4a0efb7baf70 * Datasets becomes the new trunk and retires after that :-)
mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
576 }