Lumberyard
Guía del usuario (Version 1.21)

Contenedores de vértices

VertexContainer es un tipo concreto y una interfaz que se utiliza en varios buses de componentes Lumberyard. Lo implementan directamente el componente Polygon Prism Shape y el componente Spline y lo utiliza indirectamente el componente Área de navegación.

Interfaz de contenedor de vértices

Un contenedor de vértices ofrece la posibilidad de acceder, modificar, agregar y eliminar vértices. Un contenedor de vértices tiene varias interfaces que se basan las unas en las otras.

Incluyen las siguientes interfaces:

Interfaz FixedVertices

La interfaz más sencilla es FixedVertices. FixedVertices admite las funciones GetVertex y UpdateVertex para vértices en un contenedor y una función Size que devuelve el número de vértices en el contenedor.

Dado que el número de vértices es fijo, no es posible agregar o eliminar vértices. Puede implementar esta interfaz con una matriz o AZStd::fixed_vector.

Interfaz VariableVertices

La interfaz VariableVertices es compatible con toda la funcionalidad de FixedVertices, pero también ofrece las funciones AddVertex, InsertVertex y RemoveVertex. VariableVertices también proporciona una función de utilidad denominada Empty, que comprueba si un contenedor tiene elementos o está vacío.

Para implementar la interfaz VariableVertices, puede utilizar una AZStd::vector o una VertexContainer.

VertexContainerInterface

La VertexContainerInterface proporciona una interfaz para toda la funcionalidad proporcionada por las dos interfaces anteriores y el tipo VertexContainer. Para mayor comodidad, la VertexContainerInterface también proporciona funciones SetVertices y ClearVertices que pueden actualizar todos los vértices o eliminar todos los vértices en una operación. La función SetVertices toma un parámetro vertices que contiene una lista de todos los vértices que se van a almacenar.

nota

Un VertexContainer es propietario de los vértices a los que tiene acceso; no se almacenan en otros lugares (un VertexContainer no es una vista).

Como se ha mencionado anteriormente, el componente Spline y los Ebuses del componente Spline Prism implementan VertexContainerInterface. El componente Navigation Area también utiliza la interfaz a través de su dependencia en el componente Polygon Prism Shape. Cada uno de estos componentes utiliza el tipo VertexContainer internamente para administrar sus vértices.

Para obtener más información acerca de las interfaces en la VertexContainerInterface, consulte el código y comentarios del código en el archivo lumberyard_version\dev\Code\Framework\AzCore\AzCore\Math\VertexContainerInterface.h.

Para obtener más información acerca del tipo VertexContainer, consulte el código y comentarios del código en el archivo lumberyard_version\dev\Code\Framework\AzCore\AzCore\Math\VertexContainer.h.

nota

El VertexContainer puede almacenar tipos Vector2 o Vector3. El tipo del vector se determina durante la compilación cuando se crea el tipo. Esto es útil para determinados componentes que no permiten la modificación de puntos en el eje Z (vertical) y tratan los puntos simplemente en dos dimensiones. El componente Polygon Prism utiliza el tipo Vector2.

Ejemplo de interfaz de bus de solicitudes EBus

Este es un ejemplo de script de Lua que utiliza la interfaz RequestBus.

local firstVertex = <type_with_vertex_container>.vertexContainer[1]; local lastVertex = <type_with_vertex_container>.vertexContainer[spline.vertexContainer:size()]; ...RequestBus.Event.AddVertex(self.entityId, lastVertex + Vector3(1, 2, 3)); ...RequestBus.Event.UpdateVertex(self.entityId, 0, firstVertex + Vector3(1, 2, 3)); ...RequestBus.Event.InsertVertex(self.entityId, spline.vertexContainer:size() - 1, lastVertex + Vector3(1, 2, 3)); ...RequestBus.Event.ClearVertices(self.entityId); ...RequestBus.Event.RemoveVertex(self.entityId, spline.vertexContainer:size() - 1); -- Note: In Lua, use the member functions of VertexContainer, which start indexing from 1 .vertexContainer:AddVertex(lastVertex + Vector3(1, 2, 3)); .vertexContainer:UpdateVertex(1, firstVertex + Vector3(1, 2, 3)); .vertexContainer:InsertVertex(spline.vertexContainer:size(), lastVertex + Vector3(1, 2, 3)); .vertexContainer:ClearVertices(); .vertexContainer:RemoveVertex(spline.vertexContainer:size());