mirror of
https://gitlab.com/MaddoScientisto/cirnogodot.git
synced 2026-06-16 20:43:46 +00:00
50 lines
No EOL
1.2 KiB
GDScript
50 lines
No EOL
1.2 KiB
GDScript
@tool
|
|
class_name ConeShape3D
|
|
extends ConvexPolygonShape3D
|
|
|
|
## The height of the cone
|
|
@export var height : float = 2.0:
|
|
set(value):
|
|
height = value
|
|
_request_resize()
|
|
## The radius of the bottom of the cone
|
|
@export var radius : float = 0.5:
|
|
set(value):
|
|
radius = value
|
|
_request_resize()
|
|
## The number of radial segments of the cone
|
|
@export var resolution : int = 8:
|
|
set(value):
|
|
resolution = value
|
|
_request_resize()
|
|
|
|
# Resize requested
|
|
var pending_resize := false
|
|
|
|
# Update size to initial state
|
|
func _init() -> void:
|
|
_request_resize()
|
|
|
|
# Will only resize once per frame, during idle time
|
|
func _request_resize() -> void:
|
|
if !pending_resize:
|
|
_update_size.call_deferred()
|
|
pending_resize = true
|
|
|
|
# Updates shape size
|
|
func _update_size() -> void:
|
|
points = _make_cone_polygon_points()
|
|
pending_resize = false
|
|
|
|
# Makes a cone polygon
|
|
@warning_ignore("return_value_discarded")
|
|
func _make_cone_polygon_points() -> PackedVector3Array:
|
|
var pts : PackedVector3Array = []
|
|
var top : Vector3 = Vector3(0, height / 2, 0)
|
|
for i in resolution:
|
|
var angle := float(i) * TAU / resolution
|
|
var x := cos(angle) * radius
|
|
var y := sin(angle) * radius
|
|
pts.push_back(Vector3(x, -height/2, y))
|
|
pts.push_back(top)
|
|
return pts |