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
23class 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) */
29class Portable : public GameObjectComponent
30{
31public:
32 Portable() {}
33 virtual ~Portable() {}
34
35 /** called each frame when the object has been grabbed. */
36 virtual void grab(MovingObject& other, const Vector& pos, Direction dir) { m_owner = &other; }
37 virtual void ungrab(MovingObject& other, Direction ) { m_owner = nullptr; }
38
39 virtual MovingObject* get_owner() const { return m_owner; }
40 virtual bool is_grabbed() const {return m_owner != nullptr; }
41 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? */
45 virtual bool is_hampering() const { return false; }
46protected:
47 MovingObject* m_owner = nullptr;
48private:
49 Portable(const Portable&) = delete;
50 Portable& operator=(const Portable&) = delete;
51};
52
53#endif
54
55/* EOF */
56