1 /**
2 2D area for detection and 2D physics influence.
3 
4 Copyright:
5 Copyright (c) 2007-2018 Juan Linietsky, Ariel Manzur.  
6 Copyright (c) 2014-2018 Godot Engine contributors (cf. AUTHORS.md)  
7 Copyright (c) 2017-2018 Godot-D contributors  
8 
9 License: $(LINK2 https://opensource.org/licenses/MIT, MIT License)
10 
11 
12 */
13 module godot.area2d;
14 import std.meta : AliasSeq, staticIndexOf;
15 import std.traits : Unqual;
16 import godot.d.traits;
17 import godot.core;
18 import godot.c;
19 import godot.d.bind;
20 import godot.d.reference;
21 import godot.globalenums;
22 import godot.object;
23 import godot.classdb;
24 import godot.collisionobject2d;
25 import godot.node;
26 /**
27 2D area for detection and 2D physics influence.
28 
29 2D area that detects $(D CollisionObject2D) nodes overlapping, entering, or exiting. Can also alter or override local physics parameters (gravity, damping).
30 */
31 @GodotBaseClass struct Area2D
32 {
33 	package(godot) enum string _GODOT_internal_name = "Area2D";
34 public:
35 @nogc nothrow:
36 	union { /** */ godot_object _godot_object; /** */ CollisionObject2D _GODOT_base; }
37 	alias _GODOT_base this;
38 	alias BaseClasses = AliasSeq!(typeof(_GODOT_base), typeof(_GODOT_base).BaseClasses);
39 	package(godot) __gshared bool _classBindingInitialized = false;
40 	package(godot) static struct GDNativeClassBinding
41 	{
42 		__gshared:
43 		@GodotName("_area_enter_tree") GodotMethod!(void, long) _areaEnterTree;
44 		@GodotName("_area_exit_tree") GodotMethod!(void, long) _areaExitTree;
45 		@GodotName("_area_inout") GodotMethod!(void, long, RID, long, long, long) _areaInout;
46 		@GodotName("_body_enter_tree") GodotMethod!(void, long) _bodyEnterTree;
47 		@GodotName("_body_exit_tree") GodotMethod!(void, long) _bodyExitTree;
48 		@GodotName("_body_inout") GodotMethod!(void, long, RID, long, long, long) _bodyInout;
49 		@GodotName("get_angular_damp") GodotMethod!(double) getAngularDamp;
50 		@GodotName("get_audio_bus_name") GodotMethod!(String) getAudioBusName;
51 		@GodotName("get_collision_layer") GodotMethod!(long) getCollisionLayer;
52 		@GodotName("get_collision_layer_bit") GodotMethod!(bool, long) getCollisionLayerBit;
53 		@GodotName("get_collision_mask") GodotMethod!(long) getCollisionMask;
54 		@GodotName("get_collision_mask_bit") GodotMethod!(bool, long) getCollisionMaskBit;
55 		@GodotName("get_gravity") GodotMethod!(double) getGravity;
56 		@GodotName("get_gravity_distance_scale") GodotMethod!(double) getGravityDistanceScale;
57 		@GodotName("get_gravity_vector") GodotMethod!(Vector2) getGravityVector;
58 		@GodotName("get_linear_damp") GodotMethod!(double) getLinearDamp;
59 		@GodotName("get_overlapping_areas") GodotMethod!(Array) getOverlappingAreas;
60 		@GodotName("get_overlapping_bodies") GodotMethod!(Array) getOverlappingBodies;
61 		@GodotName("get_priority") GodotMethod!(double) getPriority;
62 		@GodotName("get_space_override_mode") GodotMethod!(Area2D.SpaceOverride) getSpaceOverrideMode;
63 		@GodotName("is_gravity_a_point") GodotMethod!(bool) isGravityAPoint;
64 		@GodotName("is_monitorable") GodotMethod!(bool) isMonitorable;
65 		@GodotName("is_monitoring") GodotMethod!(bool) isMonitoring;
66 		@GodotName("is_overriding_audio_bus") GodotMethod!(bool) isOverridingAudioBus;
67 		@GodotName("overlaps_area") GodotMethod!(bool, Node) overlapsArea;
68 		@GodotName("overlaps_body") GodotMethod!(bool, Node) overlapsBody;
69 		@GodotName("set_angular_damp") GodotMethod!(void, double) setAngularDamp;
70 		@GodotName("set_audio_bus_name") GodotMethod!(void, String) setAudioBusName;
71 		@GodotName("set_audio_bus_override") GodotMethod!(void, bool) setAudioBusOverride;
72 		@GodotName("set_collision_layer") GodotMethod!(void, long) setCollisionLayer;
73 		@GodotName("set_collision_layer_bit") GodotMethod!(void, long, bool) setCollisionLayerBit;
74 		@GodotName("set_collision_mask") GodotMethod!(void, long) setCollisionMask;
75 		@GodotName("set_collision_mask_bit") GodotMethod!(void, long, bool) setCollisionMaskBit;
76 		@GodotName("set_gravity") GodotMethod!(void, double) setGravity;
77 		@GodotName("set_gravity_distance_scale") GodotMethod!(void, double) setGravityDistanceScale;
78 		@GodotName("set_gravity_is_point") GodotMethod!(void, bool) setGravityIsPoint;
79 		@GodotName("set_gravity_vector") GodotMethod!(void, Vector2) setGravityVector;
80 		@GodotName("set_linear_damp") GodotMethod!(void, double) setLinearDamp;
81 		@GodotName("set_monitorable") GodotMethod!(void, bool) setMonitorable;
82 		@GodotName("set_monitoring") GodotMethod!(void, bool) setMonitoring;
83 		@GodotName("set_priority") GodotMethod!(void, double) setPriority;
84 		@GodotName("set_space_override_mode") GodotMethod!(void, long) setSpaceOverrideMode;
85 	}
86 	/// 
87 	pragma(inline, true) bool opEquals(in Area2D other) const
88 	{ return _godot_object.ptr is other._godot_object.ptr; }
89 	/// 
90 	pragma(inline, true) typeof(null) opAssign(typeof(null) n)
91 	{ _godot_object.ptr = n; return null; }
92 	/// 
93 	pragma(inline, true) bool opEquals(typeof(null) n) const
94 	{ return _godot_object.ptr is n; }
95 	/// 
96 	size_t toHash() const @trusted { return cast(size_t)_godot_object.ptr; }
97 	mixin baseCasts;
98 	/// Construct a new instance of Area2D.
99 	/// Note: use `memnew!Area2D` instead.
100 	static Area2D _new()
101 	{
102 		static godot_class_constructor constructor;
103 		if(constructor is null) constructor = _godot_api.godot_get_class_constructor("Area2D");
104 		if(constructor is null) return typeof(this).init;
105 		return cast(Area2D)(constructor());
106 	}
107 	@disable new(size_t s);
108 	/// 
109 	enum SpaceOverride : int
110 	{
111 		/**
112 		This area does not affect gravity/damping.
113 		*/
114 		spaceOverrideDisabled = 0,
115 		/**
116 		This area adds its gravity/damping values to whatever has been calculated so far (in $(D priority) order).
117 		*/
118 		spaceOverrideCombine = 1,
119 		/**
120 		This area adds its gravity/damping values to whatever has been calculated so far (in $(D priority) order), ignoring any lower priority areas.
121 		*/
122 		spaceOverrideCombineReplace = 2,
123 		/**
124 		This area replaces any gravity/damping, even the defaults, ignoring any lower priority areas.
125 		*/
126 		spaceOverrideReplace = 3,
127 		/**
128 		This area replaces any gravity/damping calculated so far (in $(D priority) order), but keeps calculating the rest of the areas.
129 		*/
130 		spaceOverrideReplaceCombine = 4,
131 	}
132 	/// 
133 	enum Constants : int
134 	{
135 		spaceOverrideDisabled = 0,
136 		spaceOverrideCombine = 1,
137 		spaceOverrideCombineReplace = 2,
138 		spaceOverrideReplace = 3,
139 		spaceOverrideReplaceCombine = 4,
140 	}
141 	/**
142 	
143 	*/
144 	void _areaEnterTree(in long id)
145 	{
146 		Array _GODOT_args = Array.make();
147 		_GODOT_args.append(id);
148 		String _GODOT_method_name = String("_area_enter_tree");
149 		this.callv(_GODOT_method_name, _GODOT_args);
150 	}
151 	/**
152 	
153 	*/
154 	void _areaExitTree(in long id)
155 	{
156 		Array _GODOT_args = Array.make();
157 		_GODOT_args.append(id);
158 		String _GODOT_method_name = String("_area_exit_tree");
159 		this.callv(_GODOT_method_name, _GODOT_args);
160 	}
161 	/**
162 	
163 	*/
164 	void _areaInout(in long arg0, in RID arg1, in long arg2, in long arg3, in long arg4)
165 	{
166 		Array _GODOT_args = Array.make();
167 		_GODOT_args.append(arg0);
168 		_GODOT_args.append(arg1);
169 		_GODOT_args.append(arg2);
170 		_GODOT_args.append(arg3);
171 		_GODOT_args.append(arg4);
172 		String _GODOT_method_name = String("_area_inout");
173 		this.callv(_GODOT_method_name, _GODOT_args);
174 	}
175 	/**
176 	
177 	*/
178 	void _bodyEnterTree(in long id)
179 	{
180 		Array _GODOT_args = Array.make();
181 		_GODOT_args.append(id);
182 		String _GODOT_method_name = String("_body_enter_tree");
183 		this.callv(_GODOT_method_name, _GODOT_args);
184 	}
185 	/**
186 	
187 	*/
188 	void _bodyExitTree(in long id)
189 	{
190 		Array _GODOT_args = Array.make();
191 		_GODOT_args.append(id);
192 		String _GODOT_method_name = String("_body_exit_tree");
193 		this.callv(_GODOT_method_name, _GODOT_args);
194 	}
195 	/**
196 	
197 	*/
198 	void _bodyInout(in long arg0, in RID arg1, in long arg2, in long arg3, in long arg4)
199 	{
200 		Array _GODOT_args = Array.make();
201 		_GODOT_args.append(arg0);
202 		_GODOT_args.append(arg1);
203 		_GODOT_args.append(arg2);
204 		_GODOT_args.append(arg3);
205 		_GODOT_args.append(arg4);
206 		String _GODOT_method_name = String("_body_inout");
207 		this.callv(_GODOT_method_name, _GODOT_args);
208 	}
209 	/**
210 	
211 	*/
212 	double getAngularDamp() const
213 	{
214 		checkClassBinding!(typeof(this))();
215 		return ptrcall!(double)(GDNativeClassBinding.getAngularDamp, _godot_object);
216 	}
217 	/**
218 	
219 	*/
220 	String getAudioBusName() const
221 	{
222 		checkClassBinding!(typeof(this))();
223 		return ptrcall!(String)(GDNativeClassBinding.getAudioBusName, _godot_object);
224 	}
225 	/**
226 	
227 	*/
228 	long getCollisionLayer() const
229 	{
230 		checkClassBinding!(typeof(this))();
231 		return ptrcall!(long)(GDNativeClassBinding.getCollisionLayer, _godot_object);
232 	}
233 	/**
234 	Returns an individual bit on the layer mask. Describes whether other areas will collide with this one on the given layer.
235 	*/
236 	bool getCollisionLayerBit(in long bit) const
237 	{
238 		checkClassBinding!(typeof(this))();
239 		return ptrcall!(bool)(GDNativeClassBinding.getCollisionLayerBit, _godot_object, bit);
240 	}
241 	/**
242 	
243 	*/
244 	long getCollisionMask() const
245 	{
246 		checkClassBinding!(typeof(this))();
247 		return ptrcall!(long)(GDNativeClassBinding.getCollisionMask, _godot_object);
248 	}
249 	/**
250 	Returns an individual bit on the collision mask. Describes whether this area will collide with others on the given layer.
251 	*/
252 	bool getCollisionMaskBit(in long bit) const
253 	{
254 		checkClassBinding!(typeof(this))();
255 		return ptrcall!(bool)(GDNativeClassBinding.getCollisionMaskBit, _godot_object, bit);
256 	}
257 	/**
258 	
259 	*/
260 	double getGravity() const
261 	{
262 		checkClassBinding!(typeof(this))();
263 		return ptrcall!(double)(GDNativeClassBinding.getGravity, _godot_object);
264 	}
265 	/**
266 	
267 	*/
268 	double getGravityDistanceScale() const
269 	{
270 		checkClassBinding!(typeof(this))();
271 		return ptrcall!(double)(GDNativeClassBinding.getGravityDistanceScale, _godot_object);
272 	}
273 	/**
274 	
275 	*/
276 	Vector2 getGravityVector() const
277 	{
278 		checkClassBinding!(typeof(this))();
279 		return ptrcall!(Vector2)(GDNativeClassBinding.getGravityVector, _godot_object);
280 	}
281 	/**
282 	
283 	*/
284 	double getLinearDamp() const
285 	{
286 		checkClassBinding!(typeof(this))();
287 		return ptrcall!(double)(GDNativeClassBinding.getLinearDamp, _godot_object);
288 	}
289 	/**
290 	Returns a list of intersecting $(D Area2D)s. For performance reasons (collisions are all processed at the same time) this list is modified once during the physics step, not immediately after objects are moved. Consider using signals instead.
291 	*/
292 	Array getOverlappingAreas() const
293 	{
294 		checkClassBinding!(typeof(this))();
295 		return ptrcall!(Array)(GDNativeClassBinding.getOverlappingAreas, _godot_object);
296 	}
297 	/**
298 	Returns a list of intersecting $(D PhysicsBody2D)s. For performance reasons (collisions are all processed at the same time) this list is modified once during the physics step, not immediately after objects are moved. Consider using signals instead.
299 	*/
300 	Array getOverlappingBodies() const
301 	{
302 		checkClassBinding!(typeof(this))();
303 		return ptrcall!(Array)(GDNativeClassBinding.getOverlappingBodies, _godot_object);
304 	}
305 	/**
306 	
307 	*/
308 	double getPriority() const
309 	{
310 		checkClassBinding!(typeof(this))();
311 		return ptrcall!(double)(GDNativeClassBinding.getPriority, _godot_object);
312 	}
313 	/**
314 	
315 	*/
316 	Area2D.SpaceOverride getSpaceOverrideMode() const
317 	{
318 		checkClassBinding!(typeof(this))();
319 		return ptrcall!(Area2D.SpaceOverride)(GDNativeClassBinding.getSpaceOverrideMode, _godot_object);
320 	}
321 	/**
322 	
323 	*/
324 	bool isGravityAPoint() const
325 	{
326 		checkClassBinding!(typeof(this))();
327 		return ptrcall!(bool)(GDNativeClassBinding.isGravityAPoint, _godot_object);
328 	}
329 	/**
330 	
331 	*/
332 	bool isMonitorable() const
333 	{
334 		checkClassBinding!(typeof(this))();
335 		return ptrcall!(bool)(GDNativeClassBinding.isMonitorable, _godot_object);
336 	}
337 	/**
338 	
339 	*/
340 	bool isMonitoring() const
341 	{
342 		checkClassBinding!(typeof(this))();
343 		return ptrcall!(bool)(GDNativeClassBinding.isMonitoring, _godot_object);
344 	}
345 	/**
346 	
347 	*/
348 	bool isOverridingAudioBus() const
349 	{
350 		checkClassBinding!(typeof(this))();
351 		return ptrcall!(bool)(GDNativeClassBinding.isOverridingAudioBus, _godot_object);
352 	}
353 	/**
354 	If `true`, the given area overlaps the Area2D.
355 	$(B Note:) The result of this test is not immediate after moving objects. For performance, the list of overlaps is updated once per frame and before the physics step. Consider using signals instead.
356 	*/
357 	bool overlapsArea(Node area) const
358 	{
359 		checkClassBinding!(typeof(this))();
360 		return ptrcall!(bool)(GDNativeClassBinding.overlapsArea, _godot_object, area);
361 	}
362 	/**
363 	If `true`, the given physics body overlaps the Area2D.
364 	$(B Note:) The result of this test is not immediate after moving objects. For performance, list of overlaps is updated once per frame and before the physics step. Consider using signals instead.
365 	The `body` argument can either be a $(D PhysicsBody2D) or a $(D TileMap) instance (while TileMaps are not physics bodies themselves, they register their tiles with collision shapes as a virtual physics body).
366 	*/
367 	bool overlapsBody(Node _body) const
368 	{
369 		checkClassBinding!(typeof(this))();
370 		return ptrcall!(bool)(GDNativeClassBinding.overlapsBody, _godot_object, _body);
371 	}
372 	/**
373 	
374 	*/
375 	void setAngularDamp(in double angular_damp)
376 	{
377 		checkClassBinding!(typeof(this))();
378 		ptrcall!(void)(GDNativeClassBinding.setAngularDamp, _godot_object, angular_damp);
379 	}
380 	/**
381 	
382 	*/
383 	void setAudioBusName(in String name)
384 	{
385 		checkClassBinding!(typeof(this))();
386 		ptrcall!(void)(GDNativeClassBinding.setAudioBusName, _godot_object, name);
387 	}
388 	/**
389 	
390 	*/
391 	void setAudioBusOverride(in bool enable)
392 	{
393 		checkClassBinding!(typeof(this))();
394 		ptrcall!(void)(GDNativeClassBinding.setAudioBusOverride, _godot_object, enable);
395 	}
396 	/**
397 	
398 	*/
399 	void setCollisionLayer(in long collision_layer)
400 	{
401 		checkClassBinding!(typeof(this))();
402 		ptrcall!(void)(GDNativeClassBinding.setCollisionLayer, _godot_object, collision_layer);
403 	}
404 	/**
405 	Set/clear individual bits on the layer mask. This makes getting an area in/out of only one layer easier.
406 	*/
407 	void setCollisionLayerBit(in long bit, in bool value)
408 	{
409 		checkClassBinding!(typeof(this))();
410 		ptrcall!(void)(GDNativeClassBinding.setCollisionLayerBit, _godot_object, bit, value);
411 	}
412 	/**
413 	
414 	*/
415 	void setCollisionMask(in long collision_mask)
416 	{
417 		checkClassBinding!(typeof(this))();
418 		ptrcall!(void)(GDNativeClassBinding.setCollisionMask, _godot_object, collision_mask);
419 	}
420 	/**
421 	Set/clear individual bits on the collision mask. This makes selecting the areas scanned easier.
422 	*/
423 	void setCollisionMaskBit(in long bit, in bool value)
424 	{
425 		checkClassBinding!(typeof(this))();
426 		ptrcall!(void)(GDNativeClassBinding.setCollisionMaskBit, _godot_object, bit, value);
427 	}
428 	/**
429 	
430 	*/
431 	void setGravity(in double gravity)
432 	{
433 		checkClassBinding!(typeof(this))();
434 		ptrcall!(void)(GDNativeClassBinding.setGravity, _godot_object, gravity);
435 	}
436 	/**
437 	
438 	*/
439 	void setGravityDistanceScale(in double distance_scale)
440 	{
441 		checkClassBinding!(typeof(this))();
442 		ptrcall!(void)(GDNativeClassBinding.setGravityDistanceScale, _godot_object, distance_scale);
443 	}
444 	/**
445 	
446 	*/
447 	void setGravityIsPoint(in bool enable)
448 	{
449 		checkClassBinding!(typeof(this))();
450 		ptrcall!(void)(GDNativeClassBinding.setGravityIsPoint, _godot_object, enable);
451 	}
452 	/**
453 	
454 	*/
455 	void setGravityVector(in Vector2 vector)
456 	{
457 		checkClassBinding!(typeof(this))();
458 		ptrcall!(void)(GDNativeClassBinding.setGravityVector, _godot_object, vector);
459 	}
460 	/**
461 	
462 	*/
463 	void setLinearDamp(in double linear_damp)
464 	{
465 		checkClassBinding!(typeof(this))();
466 		ptrcall!(void)(GDNativeClassBinding.setLinearDamp, _godot_object, linear_damp);
467 	}
468 	/**
469 	
470 	*/
471 	void setMonitorable(in bool enable)
472 	{
473 		checkClassBinding!(typeof(this))();
474 		ptrcall!(void)(GDNativeClassBinding.setMonitorable, _godot_object, enable);
475 	}
476 	/**
477 	
478 	*/
479 	void setMonitoring(in bool enable)
480 	{
481 		checkClassBinding!(typeof(this))();
482 		ptrcall!(void)(GDNativeClassBinding.setMonitoring, _godot_object, enable);
483 	}
484 	/**
485 	
486 	*/
487 	void setPriority(in double priority)
488 	{
489 		checkClassBinding!(typeof(this))();
490 		ptrcall!(void)(GDNativeClassBinding.setPriority, _godot_object, priority);
491 	}
492 	/**
493 	
494 	*/
495 	void setSpaceOverrideMode(in long space_override_mode)
496 	{
497 		checkClassBinding!(typeof(this))();
498 		ptrcall!(void)(GDNativeClassBinding.setSpaceOverrideMode, _godot_object, space_override_mode);
499 	}
500 	/**
501 	The rate at which objects stop spinning in this area. Represents the angular velocity lost per second.
502 	See $(D ProjectSettings.physics/2d/defaultAngularDamp) for more details about damping.
503 	*/
504 	@property double angularDamp()
505 	{
506 		return getAngularDamp();
507 	}
508 	/// ditto
509 	@property void angularDamp(double v)
510 	{
511 		setAngularDamp(v);
512 	}
513 	/**
514 	The name of the area's audio bus.
515 	*/
516 	@property String audioBusName()
517 	{
518 		return getAudioBusName();
519 	}
520 	/// ditto
521 	@property void audioBusName(String v)
522 	{
523 		setAudioBusName(v);
524 	}
525 	/**
526 	If `true`, the area's audio bus overrides the default audio bus.
527 	*/
528 	@property bool audioBusOverride()
529 	{
530 		return isOverridingAudioBus();
531 	}
532 	/// ditto
533 	@property void audioBusOverride(bool v)
534 	{
535 		setAudioBusOverride(v);
536 	}
537 	/**
538 	The area's physics layer(s). Collidable objects can exist in any of 32 different layers. A contact is detected if object A is in any of the layers that object B scans, or object B is in any layers that object A scans. See also $(D collisionMask). See $(D url=https://docs.godotengine.org/en/3.3/tutorials/physics/physics_introduction.html#collision-layers-and-masks)Collision layers and masks$(D /url) in the documentation for more information.
539 	*/
540 	@property long collisionLayer()
541 	{
542 		return getCollisionLayer();
543 	}
544 	/// ditto
545 	@property void collisionLayer(long v)
546 	{
547 		setCollisionLayer(v);
548 	}
549 	/**
550 	The physics layers this area scans to determine collision detection. See $(D url=https://docs.godotengine.org/en/3.3/tutorials/physics/physics_introduction.html#collision-layers-and-masks)Collision layers and masks$(D /url) in the documentation for more information.
551 	*/
552 	@property long collisionMask()
553 	{
554 		return getCollisionMask();
555 	}
556 	/// ditto
557 	@property void collisionMask(long v)
558 	{
559 		setCollisionMask(v);
560 	}
561 	/**
562 	The area's gravity intensity (in pixels per second squared). This value multiplies the gravity vector. This is useful to alter the force of gravity without altering its direction.
563 	*/
564 	@property double gravity()
565 	{
566 		return getGravity();
567 	}
568 	/// ditto
569 	@property void gravity(double v)
570 	{
571 		setGravity(v);
572 	}
573 	/**
574 	The falloff factor for point gravity. The greater the value, the faster gravity decreases with distance.
575 	*/
576 	@property double gravityDistanceScale()
577 	{
578 		return getGravityDistanceScale();
579 	}
580 	/// ditto
581 	@property void gravityDistanceScale(double v)
582 	{
583 		setGravityDistanceScale(v);
584 	}
585 	/**
586 	If `true`, gravity is calculated from a point (set via $(D gravityVec)). See also $(D spaceOverride).
587 	*/
588 	@property bool gravityPoint()
589 	{
590 		return isGravityAPoint();
591 	}
592 	/// ditto
593 	@property void gravityPoint(bool v)
594 	{
595 		setGravityIsPoint(v);
596 	}
597 	/**
598 	The area's gravity vector (not normalized). If gravity is a point (see $(D gravityPoint)), this will be the point of attraction.
599 	*/
600 	@property Vector2 gravityVec()
601 	{
602 		return getGravityVector();
603 	}
604 	/// ditto
605 	@property void gravityVec(Vector2 v)
606 	{
607 		setGravityVector(v);
608 	}
609 	/**
610 	The rate at which objects stop moving in this area. Represents the linear velocity lost per second.
611 	See $(D ProjectSettings.physics/2d/defaultLinearDamp) for more details about damping.
612 	*/
613 	@property double linearDamp()
614 	{
615 		return getLinearDamp();
616 	}
617 	/// ditto
618 	@property void linearDamp(double v)
619 	{
620 		setLinearDamp(v);
621 	}
622 	/**
623 	If `true`, other monitoring areas can detect this area.
624 	*/
625 	@property bool monitorable()
626 	{
627 		return isMonitorable();
628 	}
629 	/// ditto
630 	@property void monitorable(bool v)
631 	{
632 		setMonitorable(v);
633 	}
634 	/**
635 	If `true`, the area detects bodies or areas entering and exiting it.
636 	*/
637 	@property bool monitoring()
638 	{
639 		return isMonitoring();
640 	}
641 	/// ditto
642 	@property void monitoring(bool v)
643 	{
644 		setMonitoring(v);
645 	}
646 	/**
647 	The area's priority. Higher priority areas are processed first.
648 	*/
649 	@property double priority()
650 	{
651 		return getPriority();
652 	}
653 	/// ditto
654 	@property void priority(double v)
655 	{
656 		setPriority(v);
657 	}
658 	/**
659 	Override mode for gravity and damping calculations within this area. See $(D spaceoverride) for possible values.
660 	*/
661 	@property Area2D.SpaceOverride spaceOverride()
662 	{
663 		return getSpaceOverrideMode();
664 	}
665 	/// ditto
666 	@property void spaceOverride(long v)
667 	{
668 		setSpaceOverrideMode(v);
669 	}
670 }