23 #include "engine_thread.h"
24 #include "xabsl_tools.h"
25 #include "skill_wrapper.h"
27 #include <core/exceptions/software.h>
28 #include <utils/time/time.h>
29 #include <interfaces/SkillerInterface.h>
30 #include <interfaces/ObjectPositionInterface.h>
32 #include <XabslEngine/XabslEngine.h>
34 using namespace fawkes;
45 static unsigned long int
64 :
Thread(
"XabslEngineThread",
Thread::OPMODE_WAITFORWAKEUP),
74 throw Exception(
"Global XabslEngineThread has already been set.");
88 __xe =
new xabsl::Engine(*__xleh, &xet_current_time);
94 params.push_back(std::make_pair(
"x",
"double"));
95 params.push_back(std::make_pair(
"y",
"double"));
96 params.push_back(std::make_pair(
"ori",
"double"));
98 __wrappers[sw->
name()] = sw;
99 __xe->registerBasicBehavior(*sw);
101 __ball_ry = __ball_rx = NULL;
102 for (Interface::FieldIterator i = __wm_ball_if->
fields(); i != __wm_ball_if->
fields_end(); ++i) {
103 if ( strcmp(i.get_name(),
"relative_x") == 0 ) {
105 __xe->registerDecimalInputSymbol(
"ball.relative_x", __ball_rx,
107 }
else if ( strcmp(i.get_name(),
"relative_y") == 0 ) {
109 __xe->registerDecimalInputSymbol(
"ball.relative_y", __ball_ry,
115 __xe->createOptionGraph(xinput);
117 if ( __xleh->errorsOccurred ) {
119 throw Exception(
"Error while creating XABSL engine, see log for details");
176 for (__wit = __wrappers.begin(); __wit != __wrappers.end(); ++__wit) {
177 delete __wit->second;
198 logger->
log_error(
"XabslEngineThread",
"Cannot aquire exclusive skiller "
199 "control, exception follows");
209 __wm_ball_if->
read();
210 __skiller_if->
read();
214 std::string skill_string =
"";
215 for (__wit = __wrappers.begin(); __wit != __wrappers.end(); ++__wit) {
216 std::string css = __wit->second->skill_string();
218 skill_string += css +
"; ";
221 if ( skill_string !=
"" ) {
228 logger->
log_warn(
"XabslEngineThread",
"Executing skill failed, exception follows");