projects
/
supertux.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Use run_dead_script wherever possible and make kill_* operations only do stuff once
[supertux.git]
/
src
/
badguy
/
mole.cpp
diff --git
a/src/badguy/mole.cpp
b/src/badguy/mole.cpp
index
73c1877
..
6a14b0f
100644
(file)
--- a/
src/badguy/mole.cpp
+++ b/
src/badguy/mole.cpp
@@
-26,6
+26,13
@@
#include "random_generator.hpp"
#include "log.hpp"
#include "level.hpp"
#include "random_generator.hpp"
#include "log.hpp"
#include "level.hpp"
+#include "lisp/writer.hpp"
+#include "object_factory.hpp"
+#include "audio/sound_manager.hpp"
+#include "sector.hpp"
+#include "sprite/sprite.hpp"
+
+#include <math.h>
static const float IDLE_TIME = 0.2f; /**< time to wait before and after throwing */
static const float THROW_TIME = 4.6f; /**< time to spend throwing */
static const float IDLE_TIME = 0.2f; /**< time to wait before and after throwing */
static const float THROW_TIME = 4.6f; /**< time to spend throwing */
@@
-33,23
+40,29
@@
static const float THROW_INTERVAL = 1; /**< time between two thrown rocks */
static const float THROW_VELOCITY = 400; /**< initial velocity of thrown rocks */
Mole::Mole(const lisp::Lisp& reader)
static const float THROW_VELOCITY = 400; /**< initial velocity of thrown rocks */
Mole::Mole(const lisp::Lisp& reader)
-
: BadGuy(reader, "images/creatures/mole/mole.sprite", LAYER_TILES-1), state(PRE_THROWING)
+ : BadGuy(reader, "images/creatures/mole/mole.sprite", LAYER_TILES-1), state(PRE_THROWING)
{
physic.enable_gravity(false);
{
physic.enable_gravity(false);
+ sound_manager->preload("sounds/fall.wav");
+ sound_manager->preload("sounds/squish.wav");
+ sound_manager->preload("sounds/dartfire.wav");
}
Mole::Mole(const Vector& pos)
}
Mole::Mole(const Vector& pos)
-
: BadGuy(pos, "images/creatures/mole/mole.sprite", LAYER_TILES-1), state(PRE_THROWING)
+ : BadGuy(pos, "images/creatures/mole/mole.sprite", LAYER_TILES-1), state(PRE_THROWING)
{
physic.enable_gravity(false);
{
physic.enable_gravity(false);
+ sound_manager->preload("sounds/fall.wav");
+ sound_manager->preload("sounds/squish.wav");
+ sound_manager->preload("sounds/dartfire.wav");
}
void
Mole::write(lisp::Writer& writer)
{
writer.start_list("mole");
}
void
Mole::write(lisp::Writer& writer)
{
writer.start_list("mole");
- writer.write
_float
("x", start_position.x);
- writer.write
_float
("y", start_position.y);
+ writer.write("x", start_position.x);
+ writer.write("y", start_position.y);
writer.end_list("mole");
}
writer.end_list("mole");
}
@@
-64,7
+77,7
@@
Mole::kill_fall()
{
set_state(DEAD);
sound_manager->play("sounds/fall.wav", get_pos());
{
set_state(DEAD);
sound_manager->play("sounds/fall.wav", get_pos());
-
if (countMe) Sector::current()->get_level()->stats.badguys++
;
+
run_dead_script()
;
}
HitResponse
}
HitResponse
@@
-78,7
+91,7
@@
Mole::collision_squished(GameObject& )
{
set_state(DEAD);
sound_manager->play("sounds/squish.wav", get_pos());
{
set_state(DEAD);
sound_manager->play("sounds/squish.wav", get_pos());
-
if (countMe) Sector::current()->get_level()->stats.badguys++
;
+
run_dead_script()
;
return true;
}
return true;
}
@@
-104,26
+117,26
@@
Mole::active_update(float elapsed_time)
switch (state) {
case PRE_THROWING:
if (timer.check()) {
switch (state) {
case PRE_THROWING:
if (timer.check()) {
- set_state(THROWING);
+
set_state(THROWING);
}
break;
case THROWING:
if (throw_timer.check()) {
throw_rock();
}
break;
case THROWING:
if (throw_timer.check()) {
throw_rock();
- throw_timer.start(THROW_INTERVAL);
+
throw_timer.start(THROW_INTERVAL);
}
if (timer.check()) {
}
if (timer.check()) {
- set_state(POST_THROWING);
+
set_state(POST_THROWING);
}
break;
case POST_THROWING:
if (timer.check()) {
}
break;
case POST_THROWING:
if (timer.check()) {
- set_state(PEEKING);
+
set_state(PEEKING);
}
break;
case PEEKING:
if (sprite->animation_done()) {
}
break;
case PEEKING:
if (sprite->animation_done()) {
- set_state(PRE_THROWING);
+
set_state(PRE_THROWING);
}
break;
case DEAD:
}
break;
case DEAD:
@@
-132,33
+145,33
@@
Mole::active_update(float elapsed_time)
}
}
-void
+void
Mole::set_state(MoleState new_state)
{
switch (new_state) {
case PRE_THROWING:
sprite->set_action("idle");
Mole::set_state(MoleState new_state)
{
switch (new_state) {
case PRE_THROWING:
sprite->set_action("idle");
- set_
group
(COLGROUP_DISABLED);
+ set_
colgroup_active
(COLGROUP_DISABLED);
timer.start(IDLE_TIME);
break;
case THROWING:
sprite->set_action("idle");
timer.start(IDLE_TIME);
break;
case THROWING:
sprite->set_action("idle");
- set_
group
(COLGROUP_DISABLED);
+ set_
colgroup_active
(COLGROUP_DISABLED);
timer.start(THROW_TIME);
throw_timer.start(THROW_INTERVAL);
break;
case POST_THROWING:
sprite->set_action("idle");
timer.start(THROW_TIME);
throw_timer.start(THROW_INTERVAL);
break;
case POST_THROWING:
sprite->set_action("idle");
- set_
group
(COLGROUP_DISABLED);
+ set_
colgroup_active
(COLGROUP_DISABLED);
timer.start(IDLE_TIME);
break;
case PEEKING:
sprite->set_action("peeking", 1);
timer.start(IDLE_TIME);
break;
case PEEKING:
sprite->set_action("peeking", 1);
- set_
group
(COLGROUP_STATIC);
+ set_
colgroup_active
(COLGROUP_STATIC);
break;
case DEAD:
sprite->set_action("idle");
break;
case DEAD:
sprite->set_action("idle");
- set_
group
(COLGROUP_DISABLED);
+ set_
colgroup_active
(COLGROUP_DISABLED);
break;
}
break;
}
@@
-166,4
+179,3
@@
Mole::set_state(MoleState new_state)
}
IMPLEMENT_FACTORY(Mole, "mole")
}
IMPLEMENT_FACTORY(Mole, "mole")
-