diff --git a/data/stk_config.xml b/data/stk_config.xml index 75b0d138a..87054859d 100644 --- a/data/stk_config.xml +++ b/data/stk_config.xml @@ -72,7 +72,7 @@ zipper-force is the additional zipper force zipper-speed-gain is the one time additional speed item-switch-time How long a switch is being effective. switch-items for each item list the index of the item it is switched with. - Order: item, banana, big-nitro, small-nitro + Order: item, banana, big-nitro, small-nitro, bubble-bum --> the item will - // reappear immediately. - Item::collected(-1); -} // isCollected diff --git a/src/items/bubblegumitem.hpp b/src/items/bubblegumitem.hpp deleted file mode 100644 index 00e1e7f65..000000000 --- a/src/items/bubblegumitem.hpp +++ /dev/null @@ -1,37 +0,0 @@ -// $Id: item.hpp 2405 2008-10-31 20:48:19Z auria $ -// -// SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2004 Steve Baker -// -// 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 3 -// 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 HEADER_BUBBLEGUMITEM_HPP -#define HEADER_BUBBLEGUMITEM_HPP - -#include "items/item.hpp" - -// ----------------------------------------------------------------------------- -class BubbleGumItem : public Item -{ -public: - BubbleGumItem(ItemType type, const Vec3& xyz, - const Vec3 &normal, scene::IMesh* mesh, - unsigned int item_id); - ~BubbleGumItem (); - virtual void collected(float t); -} -; // class Item - -#endif diff --git a/src/items/item.cpp b/src/items/item.cpp index 495349ccb..7a45c316f 100644 --- a/src/items/item.cpp +++ b/src/items/item.cpp @@ -26,9 +26,9 @@ #include "utils/vec3.hpp" Item::Item(ItemType type, const Vec3& xyz, const Vec3& normal, - scene::IMesh* mesh, unsigned int item_id, bool rotate) + scene::IMesh* mesh, unsigned int item_id) { - m_rotate = rotate; + setType(type); m_event_handler = NULL; m_deactive_time = 0; m_normal = normal; @@ -36,7 +36,6 @@ Item::Item(ItemType type, const Vec3& xyz, const Vec3& normal, Vec3 hpr = Vec3(0, normal); m_coord = Coord(xyz, hpr); m_item_id = item_id; - m_type = type; m_original_type = ITEM_NONE; m_collected = false; m_time_till_return = 0.0f; // not strictly necessary, see isCollected() @@ -46,6 +45,17 @@ Item::Item(ItemType type, const Vec3& xyz, const Vec3& normal, m_node->grab(); } // Item +//----------------------------------------------------------------------------- +/** Sets the type of this item, but also derived values, e.g. m_rotate. + * (bubblegums do not return). + * \param type New type of the item. + */ +void Item::setType(ItemType type) +{ + m_type = type; + m_rotate = type!=ITEM_BUBBLEGUM; +} // setType + //----------------------------------------------------------------------------- /** Changes this item to be a new type for a certain amount of time. * \param type New type of this item. @@ -54,7 +64,7 @@ Item::Item(ItemType type, const Vec3& xyz, const Vec3& normal, void Item::switchTo(ItemType type, scene::IMesh *mesh) { m_original_type = m_type; - m_type = type; + setType(type); m_node->setMesh(mesh); } // switchTo @@ -64,7 +74,7 @@ void Item::switchTo(ItemType type, scene::IMesh *mesh) void Item::switchBack() { assert(m_original_type!=ITEM_NONE); - m_type = m_original_type; + setType(m_original_type); m_original_type = ITEM_NONE; m_node->setMesh(m_original_mesh); } // switchBack @@ -88,7 +98,7 @@ void Item::reset() m_deactive_time = 0.0f; if(m_original_type!=ITEM_NONE) { - m_type = m_original_type; + setType(m_original_type); m_original_type = ITEM_NONE; } } // reset @@ -102,7 +112,7 @@ void Item::setParent(Kart* parent) { m_event_handler = parent; m_deactive_time = 1.5f; -} +} // setParent //----------------------------------------------------------------------------- /** Updated the item - rotates it, takes care of items coming back into @@ -111,7 +121,7 @@ void Item::setParent(Kart* parent) */ void Item::update(float dt) { - if(m_event_handler != NULL && m_deactive_time > 0) m_deactive_time -= dt; + if(m_deactive_time > 0) m_deactive_time -= dt; if(m_collected) { @@ -161,9 +171,20 @@ void Item::update(float dt) */ void Item::collected(float t) { - m_collected = true; - // Note if the time is negative, in update the m_collected flag will - // be automatically set to false again. - m_time_till_return = t; + m_collected = true; + if(m_type==ITEM_BUBBLEGUM) + { + deactivate(0.5); + // Set the time till reappear to -1 seconds --> the item will + // reappear immediately. + m_time_till_return = -1; + + } + else + { + // Note if the time is negative, in update the m_collected flag will + // be automatically set to false again. + m_time_till_return = t; + } } // isCollected diff --git a/src/items/item.hpp b/src/items/item.hpp index 838dbb360..4dae617b1 100644 --- a/src/items/item.hpp +++ b/src/items/item.hpp @@ -84,10 +84,10 @@ private: deactivate collision so a kart is not hit by its own item */ float m_deactive_time; + void setType(ItemType type); public: Item (ItemType type, const Vec3& xyz, const Vec3& normal, - scene::IMesh* mesh, unsigned int item_id, - bool rotate=true); + scene::IMesh* mesh, unsigned int item_id); virtual ~Item (); void update (float delta); virtual void collected(float t=2.0f); diff --git a/src/items/item_manager.cpp b/src/items/item_manager.cpp index 2e3d9f489..ff2480063 100644 --- a/src/items/item_manager.cpp +++ b/src/items/item_manager.cpp @@ -29,7 +29,6 @@ #include "graphics/material.hpp" #include "graphics/material_manager.hpp" #include "io/file_manager.hpp" -#include "items/bubblegumitem.hpp" #include "karts/kart.hpp" #include "network/network_manager.hpp" #include "tracks/track.hpp" @@ -143,12 +142,7 @@ Item* ItemManager::newItem(Item::ItemType type, const Vec3& xyz, const Vec3 &normal, Kart *parent) { Item* h; - if(type == Item::ITEM_BUBBLEGUM) - h = new BubbleGumItem(type, xyz, normal, m_item_mesh[type], - m_all_items.size()); - else - h = new Item(type, xyz, normal, m_item_mesh[type], - m_all_items.size()); + h = new Item(type, xyz, normal, m_item_mesh[type], m_all_items.size()); if(parent != NULL) h->setParent(parent); m_all_items.push_back(h); @@ -209,7 +203,7 @@ void ItemManager::reset() { if((*i)->getType()==Item::ITEM_BUBBLEGUM) { - BubbleGumItem *b=static_cast(*i); + Item *b=*i; AllItemTypes::iterator i_next = m_all_items.erase(i); delete b; i = i_next;