#include "serializable.h"
#include "resources.h"
#include "sector.h"
+#include "direction.h"
#include "object_factory.h"
#include "lisp/parser.h"
#include "lisp/lisp.h"
BadGuy();
~BadGuy();
- //virtual void action_activated(float elapsed_time);
-
+ /** Called when the badguy is drawn. The default implementation simply draws
+ * the badguy sprite on screen
+ */
virtual void draw(DrawingContext& context);
+ /** Called each frame. The default implementation checks badguy state and
+ * calls active_action and inactive_action
+ */
virtual void action(float elapsed_time);
+ /** Called when a collision with another object occured. The default
+ * implemetnation calls collision_player, collision_solid, collision_badguy
+ * and collision_squished
+ */
virtual HitResponse collision(GameObject& other,
const CollisionHit& hit);
+ /** Set the badguy to kill/falling state, which makes him falling of the
+ * screen (his sprite is turned upside-down)
+ */
virtual void kill_fall();
+ Vector get_start_position() const
+ {
+ return start_position;
+ }
+ void set_start_position(const Vector& vec)
+ {
+ start_position = vec;
+ }
+
protected:
enum State {
STATE_INIT,
STATE_SQUISHED,
STATE_FALLING
};
-
+
+ /** Called when the badguy collided with a player */
virtual HitResponse collision_player(Player& player,
const CollisionHit& hit);
+ /** Called when the badguy collided with solid ground */
virtual HitResponse collision_solid(GameObject& other,
const CollisionHit& hit);
+ /** Called when the badguy collided with another badguy */
virtual HitResponse collision_badguy(BadGuy& other,
const CollisionHit& hit);
-
+
+ /** Called when the player hit the badguy from above. You should return true
+ * if the badguy was squished, false if squishing wasn't possible
+ */
virtual bool collision_squished(Player& player);
+ /** called each frame when the badguy is activated. */
virtual void active_action(float elapsed_time);
+ /** called each frame when the badguy is not activated. */
virtual void inactive_action(float elapsed_time);
/**
* variable might have been changed so that it faces towards the player.
*/
virtual void activate();
- /** caleed when the badguy has been deactivated */
+ /** called when the badguy has been deactivated */
virtual void deactivate();
void kill_squished(Player& player);
Vector start_position;
Direction dir;
+
+ int hitpoints;
+ int bullet_hitpoints;
private:
void try_activate();