From 1930c5f5fe73a7ac379266e71b30082e28a0f26a Mon Sep 17 00:00:00 2001 From: Christoph Sommer Date: Sun, 26 Mar 2006 01:03:24 +0000 Subject: [PATCH] New Badguy "Totem" - a variable-height stack of wooden faces SVN-Revision: 3120 --- data/images/creatures/totem/squished.png | Bin 0 -> 4857 bytes data/images/creatures/totem/stacked.png | Bin 0 -> 5249 bytes data/images/creatures/totem/totem.sprite | 27 ++++ data/images/creatures/totem/walking1.png | Bin 0 -> 5713 bytes data/images/creatures/totem/walking2.png | Bin 0 -> 5695 bytes data/images/creatures/totem/walking3.png | Bin 0 -> 5710 bytes data/images/creatures/totem/walking4.png | Bin 0 -> 5702 bytes data/levels/test/totem.stl | 141 ++++++++++++++++++ src/badguy/totem.cpp | 237 +++++++++++++++++++++++++++++++ src/badguy/totem.hpp | 57 ++++++++ 10 files changed, 462 insertions(+) create mode 100644 data/images/creatures/totem/squished.png create mode 100644 data/images/creatures/totem/stacked.png create mode 100644 data/images/creatures/totem/totem.sprite create mode 100644 data/images/creatures/totem/walking1.png create mode 100644 data/images/creatures/totem/walking2.png create mode 100644 data/images/creatures/totem/walking3.png create mode 100644 data/images/creatures/totem/walking4.png create mode 100644 data/levels/test/totem.stl create mode 100644 src/badguy/totem.cpp create mode 100644 src/badguy/totem.hpp diff --git a/data/images/creatures/totem/squished.png b/data/images/creatures/totem/squished.png new file mode 100644 index 0000000000000000000000000000000000000000..aa11a33ec139b12923019f8021a767873b3e1404 GIT binary patch literal 4857 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 literal 0 HcmV?d00001 diff --git a/data/images/creatures/totem/stacked.png b/data/images/creatures/totem/stacked.png new file mode 100644 index 0000000000000000000000000000000000000000..33fe0d27d6fe7a6c846d7b7103ec787ff8507636 GIT binary patch literal 5249 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 DFH#9x literal 0 HcmV?d00001 diff --git a/data/images/creatures/totem/walking2.png b/data/images/creatures/totem/walking2.png new file mode 100644 index 0000000000000000000000000000000000000000..8c8024a5f8ec61f9e8b637666c12244bf1eee8a5 GIT binary patch literal 5695 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 A0{{R3 literal 0 HcmV?d00001 diff --git a/data/images/creatures/totem/walking4.png b/data/images/creatures/totem/walking4.png new file mode 100644 index 0000000000000000000000000000000000000000..13559daa721a9ae8228bc8b7963a220123a6eecd GIT binary patch literal 5702 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 literal 0 HcmV?d00001 diff --git a/data/levels/test/totem.stl b/data/levels/test/totem.stl new file mode 100644 index 000000000..243cbb296 --- /dev/null +++ b/data/levels/test/totem.stl @@ -0,0 +1,141 @@ +;; Generated by Flexlay Editor +(supertux-level + (version 2) + (name (_ "Totem Test")) + (author "Marek") + (sector + (name "main") + (gravity 10.000000) + (tilemap + (layer "background") + (solid #f) + (speed 1.000000) + (width 30) + (height 30) + (tiles + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + )) + (tilemap + (layer "interactive") + (solid #t) + (speed 1.000000) + (width 30) + (height 30) + (tiles + 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 + 61 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 61 + 61 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 61 + 61 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 61 + 61 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 61 + 61 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 61 + 61 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 61 + 61 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 61 + 61 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 61 + 61 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 61 + 61 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 61 + 61 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 61 + 61 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 61 + 61 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 61 + 61 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 61 + 61 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 61 + 61 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 61 + 61 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 61 + 61 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 61 + 61 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 61 + 61 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 61 + 61 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 61 + 61 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 61 + 61 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 61 + 61 61 61 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 61 + 61 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 61 + 61 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 61 + 61 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 61 + 61 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 61 + 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 + )) + (tilemap + (layer "foreground") + (solid #f) + (speed 1.000000) + (width 30) + (height 30) + (tiles + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + )) + (camera + (mode "normal") + ) + + (background + (image "images/background/arctis.jpg") + (speed 0.500000) + ) + + (totem (x 100) (y 850)) + (totem (x 700) (y 850)) + (totem (x 800) (y 850)) + (totem (x 900) (y 850)) + (powerup (x 100) (y 700) (sprite "images/powerups/egg/egg.sprite")) + (spawnpoint (name "main") (x 40) (y 700)) + ) + ) + +;; EOF ;; diff --git a/src/badguy/totem.cpp b/src/badguy/totem.cpp new file mode 100644 index 000000000..d78144d4a --- /dev/null +++ b/src/badguy/totem.cpp @@ -0,0 +1,237 @@ +// $Id: totem.cpp 3096 2006-03-17 12:03:02Z sommer $ +// +// SuperTux - "Totem" Badguy +// Copyright (C) 2006 Christoph Sommer +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License +// as published by the Free Software Foundation; either version 2 +// of the License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA +// 02111-1307, USA. + +#include + +#include "totem.hpp" +#include "msg.hpp" + +static const float WALKSPEED = 100; +static const float WALKSPEED_SMALL = 120; +static const float INVINCIBLE_TIME = 1; + +static const float JUMP_OFF_SPEED_Y = 500; + +Totem::Totem(const lisp::Lisp& reader) +{ + stay_on_platform = false; + carrying = 0; + carried_by = 0; + bbox.set_size(48, 49); + + reader.get("x", start_position.x); + reader.get("y", start_position.y); + reader.get("stay-on-platform", stay_on_platform); + sprite = sprite_manager->create("images/creatures/totem/totem.sprite"); +} + +Totem::~Totem() +{ + if (carrying) carrying->jump_off(); + if (carried_by) jump_off(); +} + +void +Totem::write(lisp::Writer& writer) +{ + writer.start_list("totem"); + + writer.write_float("x", start_position.x); + writer.write_float("y", start_position.y); + writer.write_bool("stay-on-platform", stay_on_platform); + + writer.end_list("totem"); +} + +void +Totem::activate() +{ + if (!carried_by) { + physic.set_velocity_x(dir == LEFT ? -WALKSPEED : WALKSPEED); + sprite->set_action(dir == LEFT ? "walking-left" : "walking-right"); + return; + } else { + synchronize_with(carried_by); + sprite->set_action(dir == LEFT ? "stacked-left" : "stacked-right"); + return; + } +} + +void +Totem::active_update(float elapsed_time) +{ + BadGuy::active_update(elapsed_time); + + if (!carried_by) { + if (stay_on_platform && may_fall_off_platform()) + { + dir = (dir == LEFT ? RIGHT : LEFT); + activate(); + } + } + + if (carried_by) { + this->synchronize_with(carried_by); + } + + if (carrying) { + carrying->synchronize_with(this); + } + +} + +bool +Totem::collision_squished(Player& player) +{ + if (carrying) carrying->jump_off(); + if (carried_by) { + player.bounce(*this); + jump_off(); + } + + sprite->set_action(dir == LEFT ? "squished-left" : "squished-right"); + this->bbox.set_size(48, 45); + kill_squished(player); + return true; +} + +HitResponse +Totem::collision_solid(GameObject& object, const CollisionHit& hit) +{ + // if we are being carried around, pass event to bottom of stack and ignore it + if (carried_by) { + carried_by->collision_solid(object, hit); + return CONTINUE; + } + + // If we hit something from above or below: stop moving in this direction + if (hit.normal.y != 0) { + physic.set_velocity_y(0); + } + + // If we are hit from the direction we are facing: turn around + if ((hit.normal.x > .8) && (dir == LEFT)) { + dir = RIGHT; + activate(); + } + if ((hit.normal.x < -.8) && (dir == RIGHT)) { + dir = LEFT; + activate(); + } + + return CONTINUE; +} + +HitResponse +Totem::collision_badguy(BadGuy& badguy, const CollisionHit& hit) +{ + // if we are being carried around, pass event to bottom of stack and ignore it + if (carried_by) { + carried_by->collision_badguy(badguy, hit); + return CONTINUE; + } + + // if we hit a Totem that is not from our stack: have our base jump on its top + Totem* totem = dynamic_cast(&badguy); + if (totem) { + Totem* thisBase = this; while (thisBase->carried_by) thisBase=thisBase->carried_by; + Totem* srcBase = totem; while (srcBase->carried_by) srcBase=srcBase->carried_by; + Totem* thisTop = this; while (thisTop->carrying) thisTop=thisTop->carrying; + if (srcBase != thisBase) { + srcBase->jump_on(thisTop); + } + } + + // If we are hit from the direction we are facing: turn around + if ((hit.normal.x > .8) && (dir == LEFT)) { + dir = RIGHT; + activate(); + } + if ((hit.normal.x < -.8) && (dir == RIGHT)) { + dir = LEFT; + activate(); + } + + return CONTINUE; +} + +void +Totem::kill_fall() +{ + if (carrying) carrying->jump_off(); + if (carried_by) jump_off(); + + BadGuy::kill_fall(); +} + +void +Totem::jump_on(Totem* target) +{ + if (target->carrying) { + msg_warning("target is already carrying someone"); + return; + } + + target->carrying = this; + + this->carried_by = target; + this->bbox.set_size(48, 45); + this->activate(); + + this->synchronize_with(target); +} + +void +Totem::jump_off() { + if (!carried_by) { + msg_warning("not carried by anyone"); + return; + } + + carried_by->carrying = 0; + + this->carried_by = 0; + this->bbox.set_size(48, 49); + + this->activate(); + + physic.set_velocity_y(JUMP_OFF_SPEED_Y); +} + +void +Totem::synchronize_with(Totem* base) +{ + + if (dir != base->dir) { + dir = base->dir; + sprite->set_action(dir == LEFT ? "stacked-left" : "stacked-right"); + } + + Vector pos = base->get_pos(); + pos.y -= 45; + set_pos(pos); + + physic.set_velocity_x(base->physic.get_velocity_x()); + physic.set_velocity_y(base->physic.get_velocity_y()); +} + + +IMPLEMENT_FACTORY(Totem, "totem") + diff --git a/src/badguy/totem.hpp b/src/badguy/totem.hpp new file mode 100644 index 000000000..40b5da120 --- /dev/null +++ b/src/badguy/totem.hpp @@ -0,0 +1,57 @@ +// $Id: totem.cpp 3096 2006-03-17 12:03:02Z sommer $ +// +// SuperTux - "Totem" Badguy +// Copyright (C) 2006 Christoph Sommer +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License +// as published by the Free Software Foundation; either version 2 +// of the License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA +// 02111-1307, USA. + +#ifndef __TOTEM_H__ +#define __TOTEM_H__ + +#include "badguy.hpp" + +/** + * "Totem" Badguy - A variable-height stack of wooden blocks + */ +class Totem : public BadGuy +{ +public: + Totem(const lisp::Lisp& reader); + ~Totem(); + + void activate(); + void active_update(float elapsed_time); + void write(lisp::Writer& writer); + HitResponse collision_solid(GameObject& other, const CollisionHit& hit); + HitResponse collision_badguy(BadGuy& badguy, const CollisionHit& hit); + +protected: + bool stay_on_platform; /**< change direction before falling off a ledge */ + + Totem* carrying; /**< Totem we are currently carrying (or 0) */ + Totem* carried_by; /**< Totem by which we are currently carried (or 0) */ + + bool collision_squished(Player& player); + void kill_fall(); + + void jump_on(Totem* target); /**< jump on target */ + void jump_off(); /**< jump off current base */ + + void synchronize_with(Totem* baseTotem); /**< synchronize position and movement with baseTotem */ +}; + +#endif + -- 2.11.0