About making convex polygon shapes
Goutte opened this issue · 0 comments
Goutte commented
This plugin is meant to be used along with a CollisionShape2D
, and not a CollisionPolygon2D
.
There is a Shape2D Resource named ConvexPolygonShape2D
, but Godot's Editor is not activating a GUI to edit the points like it does for CollisionPolygon2D
.
This is because the
CollisionPolygon2D
allows "concave" polygons by using multiple convex shapes internally.
How to generate a ConvexPolygonShape2D
- Create a
CollisionPolygon2D
- Use the Editor to add/edit points
- Ensure you made a single convex shape
- Use the following Node to extract a
ConvexPolygonShape2D
from it.
@tool
extends Node
class_name CollisionPolygon2DConvexShapeExtractor
## Extracts a ConvexPolygonShape2D from a CollisionPolygon2D.
## THE SHAPE MUST BE CONVEX -- DO NOT MAKE CONCAVE SHAPES.
##
## Usage:
## - Add anywhere
## - Target an input polygon and an output shape
## - Reopen the scene in the Editor
## - Save the generated shape to a file using the Editor
##
## Be careful if you leave `shape` defined, it will write in it.
@export var polygon: CollisionPolygon2D
@export var shape: ConvexPolygonShape2D
func _ready():
extract()
func extract() -> int:
if polygon == null:
push_error("CollisionPolygon2D is null")
return ERR_CANT_ACQUIRE_RESOURCE
if shape == null:
shape = ConvexPolygonShape2D.new()
shape.points = polygon.polygon
return OK