// along with this program; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
// 02111-1307, USA.
-
#include <config.h>
#include <float.h>
+#include <sstream>
#include "yeti.h"
#include "object/camera.h"
#include "yeti_stalactite.h"
#include "bouncing_snowball.h"
+#include "game_session.h"
+#include "scripting/script_interpreter.h"
static const float JUMP_VEL1 = 250;
static const float JUMP_VEL2 = 700;
reader.get("y", start_position.y);
bbox.set_size(80, 120);
sprite = sprite_manager->create("yeti");
+ sprite->set_action("right");
state = INIT;
side = LEFT;
sound_manager->preload_sound("yeti_gna");
sound_manager->preload_sound("yeti_roar");
hit_points = INITIAL_HITPOINTS;
+ reader.get("dead-script", dead_script);
}
Yeti::~Yeti()
}
void
-Yeti::active_action(float elapsed_time)
+Yeti::active_update(float elapsed_time)
{
switch(state) {
case INIT:
sound_manager->play_sound("yeti_roar");
hit_points--;
if(hit_points <= 0) {
- sprite->set_action("dead");
+ sprite->set_action("dead");
kill_squished(player);
+
+ // start script
+ if(dead_script != "") {
+ try {
+ ScriptInterpreter* interpreter
+ = new ScriptInterpreter(GameSession::current()->get_working_directory());
+ interpreter->register_sector(Sector::current());
+ std::istringstream in(dead_script);
+ interpreter->load_script(in, "Yeti - dead-script");
+ interpreter->start_script();
+ Sector::current()->add_object(interpreter);
+ } catch(std::exception& e) {
+ std::cerr << "Couldn't execute yeti dead script: " << e.what() << "\n";
+ }
+ }
} else {
safe_timer.start(SAFE_TIME);
}
} else if(state == GO_LEFT && !timer.started()) {
side = LEFT;
summon_snowball();
+ sprite->set_action("right");
angry_jumping();
} else if(state == GO_RIGHT && !timer.started()) {
side = RIGHT;
summon_snowball();
+ sprite->set_action("left");
angry_jumping();
} else if(state == ANGRY_JUMPING) {
if(!timer.started()) {