1 // SuperTux 2 // Copyright (C) 2006 Matthias Braun <matze@braunis.de> 3 // 4 // This program is free software: you can redistribute it and/or modify 5 // it under the terms of the GNU General Public License as published by 6 // the Free Software Foundation, either version 3 of the License, or 7 // (at your option) any later version. 8 // 9 // This program is distributed in the hope that it will be useful, 10 // but WITHOUT ANY WARRANTY; without even the implied warranty of 11 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 // GNU General Public License for more details. 13 // 14 // You should have received a copy of the GNU General Public License 15 // along with this program. If not, see <http://www.gnu.org/licenses/>. 16 17 #ifndef HEADER_SUPERTUX_OBJECT_PORTABLE_HPP 18 #define HEADER_SUPERTUX_OBJECT_PORTABLE_HPP 19 20 #include "supertux/direction.hpp" 21 #include "supertux/game_object_component.hpp" 22 23 class MovingObject; 24 25 /** An object that inherits from this object is considered "portable" and can 26 be carried around by the player. 27 The object has to additionally set the PORTABLE flag (this allows to 28 make the object only temporarily portable by resetting the flag) */ 29 class Portable : public GameObjectComponent 30 { 31 public: Portable()32 Portable() {} ~Portable()33 ~Portable() override {} 34 35 /** called each frame when the object has been grabbed. */ grab(MovingObject & other,const Vector & pos,Direction dir)36 virtual void grab(MovingObject& other, const Vector& pos, Direction dir) { m_owner = &other; } ungrab(MovingObject & other,Direction)37 virtual void ungrab(MovingObject& other, Direction ) { m_owner = nullptr; } 38 get_owner() const39 virtual MovingObject* get_owner() const { return m_owner; } is_grabbed() const40 virtual bool is_grabbed() const {return m_owner != nullptr; } is_portable() const41 virtual bool is_portable() const { return true; } 42 43 /** Is the object so heavy/bulky/fragile that Tux can't run while 44 carrying it? */ is_hampering() const45 virtual bool is_hampering() const { return false; } 46 protected: 47 MovingObject* m_owner = nullptr; 48 private: 49 Portable(const Portable&) = delete; 50 Portable& operator=(const Portable&) = delete; 51 }; 52 53 #endif 54 55 /* EOF */ 56