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