66 lines
1.3 KiB
GDScript
66 lines
1.3 KiB
GDScript
class_name StandardEntityMarker
|
|
extends Node2D
|
|
|
|
enum SPAWN_METHOD {
|
|
ALL,
|
|
FURTHEST,
|
|
ONCE,
|
|
NONE
|
|
}
|
|
|
|
enum ENTITY_SELECTION_METHOD {
|
|
RANDOM,
|
|
POP
|
|
}
|
|
|
|
@export_category("Entity Spawning")
|
|
@export
|
|
var marker_id: String
|
|
|
|
@export
|
|
var entities: Array[PackedScene] = []
|
|
|
|
@export
|
|
var spawn_method: SPAWN_METHOD
|
|
|
|
@export_range(0, 1.0)
|
|
var spawn_chance: float = 1.0
|
|
|
|
@export
|
|
var entity_selection_method: ENTITY_SELECTION_METHOD
|
|
|
|
@export_category("Marker Debug")
|
|
@export
|
|
var debug_color: Color = Color.WHITE
|
|
|
|
@export
|
|
var marker_size: int = 16
|
|
|
|
func _ready() -> void:
|
|
self.add_to_group("genv2:entity_marker")
|
|
|
|
var sprite: Sprite2D = self.get_node_or_null("Sprite2D")
|
|
if not sprite:
|
|
sprite = Sprite2D.new()
|
|
sprite.texture = _get_debug_texture()
|
|
self.add_child(sprite)
|
|
|
|
func _register(gen: StandardWorldGenerator) -> void:
|
|
if self.marker_id == "":
|
|
push_error("Marker ID is empty, this marker will not be used for spawning entities.")
|
|
return
|
|
gen._register_marker("genv2:entity_marker:%s" % self.marker_id, self)
|
|
|
|
func _get_debug_texture() -> Texture2D:
|
|
var texture = GradientTexture2D.new()
|
|
|
|
var gradient = Gradient.new()
|
|
gradient.colors = [self.debug_color]
|
|
|
|
texture.gradient = gradient
|
|
|
|
texture.width = self.marker_size
|
|
texture.height = self.marker_size
|
|
|
|
return texture
|