136 lines
4.7 KiB
GDScript
136 lines
4.7 KiB
GDScript
class_name ColorVariant extends TextureRect
|
|
|
|
enum Types{
|
|
SKIN,
|
|
HAIR,
|
|
EYES
|
|
}
|
|
static var eye_colors = {
|
|
"blue":{
|
|
"weight": 100,
|
|
"color": preload("res://external/test portrait/gradients/eyes/(c)blue.tres"),
|
|
"luminosity": preload("res://external/test portrait/gradients/eyes/(l)fair.tres"),
|
|
},
|
|
"green":{
|
|
"weight": 100,
|
|
"color": preload("res://external/test portrait/gradients/eyes/(c)green.tres"),
|
|
"luminosity": preload("res://external/test portrait/gradients/eyes/(l)default.tres"),
|
|
},
|
|
"brown":{
|
|
"weight": 100,
|
|
"color": preload("res://external/test portrait/gradients/eyes/(c)blue.tres"),
|
|
"luminosity": preload("res://external/test portrait/gradients/eyes/(c)blue.tres"),
|
|
},
|
|
"gold":{
|
|
"weight": 100,
|
|
"color": preload("res://external/test portrait/gradients/eyes/(c)blue.tres"),
|
|
"luminosity": preload("res://external/test portrait/gradients/eyes/(c)blue.tres"),
|
|
},
|
|
"red":{
|
|
"weight": 100,
|
|
"color": preload("res://external/test portrait/gradients/eyes/(c)blue.tres"),
|
|
"luminosity": preload("res://external/test portrait/gradients/eyes/(c)blue.tres"),
|
|
},
|
|
"grey":{
|
|
"weight": 100,
|
|
"color": preload("res://external/test portrait/gradients/eyes/(c)blue.tres"),
|
|
"luminosity": preload("res://external/test portrait/gradients/eyes/(c)blue.tres"),
|
|
},
|
|
}
|
|
|
|
static var hair_colors = {
|
|
"blue":{
|
|
"weight": 100,
|
|
"color": preload("res://external/test portrait/gradients/eyes/(c)blue.tres"),
|
|
"luminosity": preload("res://external/test portrait/gradients/eyes/(c)blue.tres"),
|
|
},
|
|
"blonde":{
|
|
"weight": 100,
|
|
"color": preload("res://external/test portrait/gradients/hair/(c)blonde.tres"),
|
|
"luminosity": preload("res://external/test portrait/gradients/hair/(l)fair.tres"),
|
|
},
|
|
"brown":{
|
|
"weight": 100,
|
|
"color": preload("res://external/test portrait/gradients/hair/(c)brown.tres"),
|
|
"luminosity": preload("res://external/test portrait/gradients/hair/(l)dark.tres"),
|
|
},
|
|
"black":{
|
|
"weight": 100,
|
|
"color": preload("res://external/test portrait/gradients/hair/(c)black.tres"),
|
|
"luminosity": preload("res://external/test portrait/gradients/hair/(l)black.tres"),
|
|
},
|
|
"red":{
|
|
"weight": 100,
|
|
"color": preload("res://external/test portrait/gradients/hair/(c)red.tres"),
|
|
"luminosity": preload("res://external/test portrait/gradients/hair/(l)red.tres"),
|
|
},
|
|
"silver":{
|
|
"weight": 100,
|
|
"color": preload("res://external/test portrait/gradients/eyes/(c)blue.tres"),
|
|
"luminosity": preload("res://external/test portrait/gradients/eyes/(c)blue.tres"),
|
|
},
|
|
}
|
|
|
|
static var skin_colors = {
|
|
"pale":{
|
|
"weight": 100,
|
|
"color": preload("res://external/test portrait/gradients/eyes/(c)blue.tres"),
|
|
"luminosity": preload("res://external/test portrait/gradients/eyes/(c)blue.tres"),
|
|
},
|
|
"medium":{
|
|
"weight": 100,
|
|
"color": preload("res://external/test portrait/gradients/eyes/(c)blue.tres"),
|
|
"luminosity": preload("res://external/test portrait/gradients/eyes/(c)blue.tres"),
|
|
},
|
|
"olive":{
|
|
"weight": 100,
|
|
"color": preload("res://external/test portrait/gradients/eyes/(c)blue.tres"),
|
|
"luminosity": preload("res://external/test portrait/gradients/eyes/(c)blue.tres"),
|
|
},
|
|
"brown":{
|
|
"weight": 100,
|
|
"color": preload("res://external/Test Portrait/gradients/skin/(c)brown.tres"),
|
|
"luminosity": preload("res://external/Test Portrait/gradients/skin/(l)dark.tres"),
|
|
},
|
|
"dark":{
|
|
"weight": 100,
|
|
"color": preload("res://external/test portrait/gradients/eyes/(c)blue.tres"),
|
|
"luminosity": preload("res://external/test portrait/gradients/eyes/(l)default.tres"),
|
|
},
|
|
"white":{
|
|
"weight": 0,
|
|
"color": preload("res://external/test portrait/gradients/eyes/(c)blue.tres"),
|
|
"luminosity": preload("res://external/test portrait/gradients/eyes/(c)blue.tres"),
|
|
},
|
|
"red":{
|
|
"weight": 0,
|
|
"color": preload("res://external/test portrait/gradients/eyes/(c)blue.tres"),
|
|
"luminosity": preload("res://external/test portrait/gradients/eyes/(c)blue.tres"),
|
|
},
|
|
}
|
|
@export var type : Types
|
|
|
|
#@onready var variant_material : ShaderMaterial = material
|
|
|
|
func set_color(color : String) -> void:
|
|
var col_gradients
|
|
match(type):
|
|
Types.SKIN:
|
|
if !skin_colors.has(color):
|
|
printerr("Tried to set a color '%s' that isn't part of the skin color list!" % color)
|
|
return
|
|
col_gradients = skin_colors[color]
|
|
Types.HAIR:
|
|
if !hair_colors.has(color):
|
|
printerr("Tried to set a color '%s' that isn't part of the hair color list!" % color)
|
|
return
|
|
col_gradients = hair_colors[color]
|
|
Types.EYES:
|
|
if !eye_colors.has(color):
|
|
printerr("Tried to set a color '%s' that isn't part of the eye color list!" % color)
|
|
return
|
|
col_gradients = eye_colors[color]
|
|
var mat = material
|
|
mat.set_shader_parameter("color_gradient",col_gradients.color)
|
|
mat.set_shader_parameter("luminosity_gradient",col_gradients.luminosity)
|