:github_url: hide .. Generated automatically by doc/tools/make_rst.py in Godot's source tree. .. DO NOT EDIT THIS FILE, but the Portal.xml source instead. .. The source is found in doc/classes or modules//doc_classes. .. _class_Portal: Portal ====== **Inherits:** :ref:`Spatial` **<** :ref:`Node` **<** :ref:`Object` Portal nodes are used to enable visibility between :ref:`Room`\ s. Description ----------- ``Portal``\ s are a special type of :ref:`MeshInstance` that allow the portal culling system to 'see' from one room to the next. They often correspond to doors and windows in level geometry. By only allowing :ref:`Camera`\ s to see through portals, this allows the system to cull out all the objects in rooms that cannot be seen through portals. This is a form of **occlusion culling**, and can greatly increase performance. There are some limitations to the form of portals: They must be single sided convex polygons, and usually you would orientate their front faces **outward** from the :ref:`Room` they are placed in. The vertices should be positioned on a single plane (although their positioning does not have to be perfect). There is no need to place an opposite portal in an adjacent room, links are made two-way automatically. Properties ---------- +-------------------------------------------------+---------------------------------------------------------------------+----------------------------------------------------+ | :ref:`NodePath` | :ref:`linked_room` | ``NodePath("")`` | +-------------------------------------------------+---------------------------------------------------------------------+----------------------------------------------------+ | :ref:`PoolVector2Array` | :ref:`points` | ``PoolVector2Array( 1, -1, 1, 1, -1, 1, -1, -1 )`` | +-------------------------------------------------+---------------------------------------------------------------------+----------------------------------------------------+ | :ref:`bool` | :ref:`portal_active` | ``true`` | +-------------------------------------------------+---------------------------------------------------------------------+----------------------------------------------------+ | :ref:`float` | :ref:`portal_margin` | ``1.0`` | +-------------------------------------------------+---------------------------------------------------------------------+----------------------------------------------------+ | :ref:`bool` | :ref:`two_way` | ``true`` | +-------------------------------------------------+---------------------------------------------------------------------+----------------------------------------------------+ | :ref:`bool` | :ref:`use_default_margin` | ``true`` | +-------------------------------------------------+---------------------------------------------------------------------+----------------------------------------------------+ Methods ------- +------+---------------------------------------------------------------------------------------------------------------------------------+ | void | :ref:`set_point` **(** :ref:`int` index, :ref:`Vector2` position **)** | +------+---------------------------------------------------------------------------------------------------------------------------------+ Property Descriptions --------------------- .. _class_Portal_property_linked_room: - :ref:`NodePath` **linked_room** +-----------+------------------------+ | *Default* | ``NodePath("")`` | +-----------+------------------------+ | *Setter* | set_linked_room(value) | +-----------+------------------------+ | *Getter* | get_linked_room() | +-----------+------------------------+ This is a shortcut for setting the linked :ref:`Room` in the name of the ``Portal`` (the name is used during conversion). ---- .. _class_Portal_property_points: - :ref:`PoolVector2Array` **points** +-----------+----------------------------------------------------+ | *Default* | ``PoolVector2Array( 1, -1, 1, 1, -1, 1, -1, -1 )`` | +-----------+----------------------------------------------------+ | *Setter* | set_points(value) | +-----------+----------------------------------------------------+ | *Getter* | get_points() | +-----------+----------------------------------------------------+ The points defining the shape of the ``Portal`` polygon (which should be convex). These are defined in 2D, with ``0,0`` being the origin of the ``Portal`` node's :ref:`Spatial.global_transform`. **Note:** These raw points are sanitized for winding order internally. ---- .. _class_Portal_property_portal_active: - :ref:`bool` **portal_active** +-----------+--------------------------+ | *Default* | ``true`` | +-----------+--------------------------+ | *Setter* | set_portal_active(value) | +-----------+--------------------------+ | *Getter* | get_portal_active() | +-----------+--------------------------+ Visibility through ``Portal``\ s can be turned on and off at runtime - this is useful for having closable doors. ---- .. _class_Portal_property_portal_margin: - :ref:`float` **portal_margin** +-----------+--------------------------+ | *Default* | ``1.0`` | +-----------+--------------------------+ | *Setter* | set_portal_margin(value) | +-----------+--------------------------+ | *Getter* | get_portal_margin() | +-----------+--------------------------+ Some objects are so big that they may be present in more than one :ref:`Room` ('sprawling'). As we often don't want objects that \*just\* breach the edges to be assigned to neighbouring rooms, you can assign an extra margin through the ``Portal`` to allow objects to breach without sprawling. ---- .. _class_Portal_property_two_way: - :ref:`bool` **two_way** +-----------+--------------------+ | *Default* | ``true`` | +-----------+--------------------+ | *Setter* | set_two_way(value) | +-----------+--------------------+ | *Getter* | is_two_way() | +-----------+--------------------+ Portals default to being two way - see through in both directions, however you can make them one way, visible from the source room only. ---- .. _class_Portal_property_use_default_margin: - :ref:`bool` **use_default_margin** +-----------+-------------------------------+ | *Default* | ``true`` | +-----------+-------------------------------+ | *Setter* | set_use_default_margin(value) | +-----------+-------------------------------+ | *Getter* | get_use_default_margin() | +-----------+-------------------------------+ In most cases you will want to use the default ``Portal`` margin in your portals (this is set in the :ref:`RoomManager`). If you want to override this default, set this value to ``false``, and the local :ref:`portal_margin` will take effect. Method Descriptions ------------------- .. _class_Portal_method_set_point: - void **set_point** **(** :ref:`int` index, :ref:`Vector2` position **)** Sets individual points. Primarily for use by the editor. .. |virtual| replace:: :abbr:`virtual (This method should typically be overridden by the user to have any effect.)` .. |const| replace:: :abbr:`const (This method has no side effects. It doesn't modify any of the instance's member variables.)` .. |vararg| replace:: :abbr:`vararg (This method accepts any number of arguments after the ones described here.)`