collision_object_2d.h
1 /*************************************************************************/
2 /* collision_object_2d.h */
3 /*************************************************************************/
4 /* This file is part of: */
5 /* GODOT ENGINE */
6 /* http://www.godotengine.org */
7 /*************************************************************************/
8 /* Copyright (c) 2007-2016 Juan Linietsky, Ariel Manzur. */
9 /* */
10 /* Permission is hereby granted, free of charge, to any person obtaining */
11 /* a copy of this software and associated documentation files (the */
12 /* "Software"), to deal in the Software without restriction, including */
13 /* without limitation the rights to use, copy, modify, merge, publish, */
14 /* distribute, sublicense, and/or sell copies of the Software, and to */
15 /* permit persons to whom the Software is furnished to do so, subject to */
16 /* the following conditions: */
17 /* */
18 /* The above copyright notice and this permission notice shall be */
19 /* included in all copies or substantial portions of the Software. */
20 /* */
21 /* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, */
22 /* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF */
23 /* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.*/
24 /* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY */
25 /* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, */
26 /* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */
27 /* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
28 /*************************************************************************/
29 #ifndef COLLISION_OBJECT_2D_H
30 #define COLLISION_OBJECT_2D_H
31 
32 #include "scene/2d/node_2d.h"
33 #include "scene/resources/shape_2d.h"
34 
35 class CollisionObject2D : public Node2D {
36 
37  OBJ_TYPE( CollisionObject2D, Node2D );
38 
39  bool area;
40  RID rid;
41  bool pickable;
42 
43  struct ShapeData {
44  Matrix32 xform;
45  Ref<Shape2D> shape;
46  bool trigger;
47 
48  ShapeData() {
49  trigger=false;
50  }
51  };
52 
53 
54  Vector<ShapeData> shapes;
55 
56  void _update_shapes();
57 
58 friend class CollisionShape2D;
59 friend class CollisionPolygon2D;
60  void _update_shapes_from_children();
61 protected:
62 
63  CollisionObject2D(RID p_rid, bool p_area);
64 
65  void _notification(int p_what);
66  bool _set(const StringName& p_name, const Variant& p_value);
67  bool _get(const StringName& p_name,Variant &r_ret) const;
68  void _get_property_list( List<PropertyInfo> *p_list) const;
69  static void _bind_methods();
70 
71  void _update_pickable();
72 friend class Viewport;
73  void _input_event(Node *p_viewport, const InputEvent& p_input_event, int p_shape);
74  void _mouse_enter();
75  void _mouse_exit();
76 
77 public:
78 
79 
80 
81  void add_shape(const Ref<Shape2D>& p_shape, const Matrix32& p_transform=Matrix32());
82  int get_shape_count() const;
83  void set_shape(int p_shape_idx, const Ref<Shape2D>& p_shape);
84  void set_shape_transform(int p_shape_idx, const Matrix32& p_transform);
85  Ref<Shape2D> get_shape(int p_shape_idx) const;
86  Matrix32 get_shape_transform(int p_shape_idx) const;
87  void set_shape_as_trigger(int p_shape_idx, bool p_trigger);
88  bool is_shape_set_as_trigger(int p_shape_idx) const;
89  void remove_shape(int p_shape_idx);
90  void clear_shapes();
91 
92  void set_pickable(bool p_enabled);
93  bool is_pickable() const;
94 
95  _FORCE_INLINE_ RID get_rid() const { return rid; }
96 
99 };
100 
101 #endif // COLLISION_OBJECT_2D_H
Definition: viewport.h:75
Definition: variant.h:74
Definition: node.h:42
Definition: string_db.h:48
Definition: input_event.h:263
Definition: collision_shape_2d.h:35
Definition: rid.h:47
Definition: collision_polygon_2d.h:37
Definition: math_2d.h:554
Definition: node_2d.h:34
Definition: collision_object_2d.h:35