39 lines
1.1 KiB
GDScript
39 lines
1.1 KiB
GDScript
extends AIBase
|
|
|
|
class_name AICat
|
|
|
|
@export_group("Cat Colors")
|
|
@export var mesh: MeshInstance3D
|
|
@export var fur_colors: Array[Color] = []
|
|
@export var eye_colors: Array[Color] = []
|
|
|
|
@export var fur_material_index: int = 0
|
|
@export var eye_material_index: int = 1
|
|
|
|
func _ready() -> void:
|
|
super._ready()
|
|
_apply_random_color()
|
|
|
|
func _apply_random_color() -> void:
|
|
if fur_colors.is_empty() or eye_colors.is_empty():
|
|
return
|
|
|
|
if not mesh or not mesh.mesh:
|
|
return
|
|
|
|
var max_index = min(fur_colors.size(), eye_colors.size())
|
|
var random_idx = randi() % max_index
|
|
|
|
_override_material_color(mesh, fur_material_index, fur_colors[random_idx])
|
|
_override_material_color(mesh, eye_material_index, eye_colors[random_idx])
|
|
|
|
func _override_material_color(mesh_node: MeshInstance3D, surface_idx: int, color: Color) -> void:
|
|
if surface_idx < 0 or surface_idx >= mesh_node.mesh.get_surface_count():
|
|
return
|
|
|
|
var mat = mesh_node.mesh.surface_get_material(surface_idx)
|
|
if mat and mat is StandardMaterial3D:
|
|
var new_mat = mat.duplicate() as StandardMaterial3D
|
|
new_mat.albedo_color = color
|
|
mesh_node.set_surface_override_material(surface_idx, new_mat)
|