Mesh phenotype generation part one
This commit is contained in:
+149
@@ -0,0 +1,149 @@
|
||||
extends Node
|
||||
|
||||
var rng = RandomNumberGenerator.new()
|
||||
var naampje = "Hans"
|
||||
var genotype = []
|
||||
# const DNA_SIZE = 173;
|
||||
const TRAITS = {
|
||||
"Arm": [1, 4, 5],
|
||||
"Leg": [2, 1, 2],
|
||||
"Head": [1, 2, 2, 2, 1],
|
||||
"Skin": [3, 3, 3, 3],
|
||||
"Penis": [2]
|
||||
}
|
||||
const TIERS_STRING = "12 3 1 23 12 3 4 51 2 3 4 1 "
|
||||
const TRAIT_STRING = "Arm Leg Head Skin Penis"
|
||||
const SKIN_COLORS = [
|
||||
Color("#000000"),
|
||||
Color("#ff0000"),
|
||||
Color("#0000ff"),
|
||||
Color("#ffff00"),
|
||||
Color("#ffffff"),
|
||||
Color("#888888"),
|
||||
Color("#ff0088"),
|
||||
Color("#ff8800"),
|
||||
Color("#8800ff"),
|
||||
Color("#0088ff"),
|
||||
Color("#880088"),
|
||||
Color("#333333")
|
||||
]
|
||||
const ARM_MODES = [
|
||||
"HandBase",
|
||||
"HandClaws",
|
||||
"HandBase",
|
||||
"HandBase",
|
||||
"HandBase",
|
||||
"HandBase",
|
||||
"HandBase",
|
||||
"HandBase",
|
||||
"HandBase",
|
||||
"HandBase"
|
||||
]
|
||||
|
||||
var SKIN_MATERIALS = [
|
||||
SpatialMaterial.new()
|
||||
]
|
||||
|
||||
func initialize():
|
||||
# Make one boolean per thing we need
|
||||
for i in range(TRAITS.size()):
|
||||
for j in range(TRAITS.values()[i].size()):
|
||||
for x in range(TRAITS.values()[i][j]):
|
||||
if rng.randf() > 0.1:
|
||||
genotype.append(false)
|
||||
else:
|
||||
genotype.append(true)
|
||||
|
||||
func sum(a):
|
||||
var sum = 0
|
||||
for i in range(a.size()):
|
||||
sum += a[i]
|
||||
return sum
|
||||
|
||||
func range_trait(name):
|
||||
var start = 0
|
||||
var end = 0
|
||||
for i in TRAITS:
|
||||
if i != name:
|
||||
start += sum(TRAITS[i])
|
||||
else:
|
||||
print(TRAITS[i])
|
||||
end = start+sum(TRAITS[i])
|
||||
break
|
||||
return range(start, end)
|
||||
|
||||
func describe():
|
||||
var TRAIT_DESC = "Has a %s trait of tier %d."
|
||||
var LATENT_DESC = " latent tier %d trait."
|
||||
var out = ""
|
||||
var d = 0
|
||||
var found_trait = false
|
||||
for i in range(TRAITS.size()):
|
||||
found_trait = false
|
||||
for j in range(TRAITS.values()[i].size()):
|
||||
for x in range(TRAITS.values()[i][j]):
|
||||
if !found_trait && genotype[d]:
|
||||
out += TRAIT_DESC % [TRAITS.keys()[i], j+1] + '\n'
|
||||
found_trait = true
|
||||
elif found_trait && genotype[d]:
|
||||
out += LATENT_DESC % [j+1] + '\n'
|
||||
d += 1
|
||||
var strand = ""
|
||||
for i in range(genotype.size()):
|
||||
if genotype[i]:
|
||||
strand += "1"
|
||||
else:
|
||||
strand += "0"
|
||||
out += strand + '\n'
|
||||
out += TIERS_STRING + '\n'
|
||||
out += TRAIT_STRING + '\n'
|
||||
return out
|
||||
|
||||
func set_color():
|
||||
var j = 0
|
||||
var x = 0
|
||||
for i in range_trait("Skin"):
|
||||
if genotype[i]:
|
||||
x = j
|
||||
break
|
||||
j += 1
|
||||
var mesh = get_node("Homunculus")
|
||||
var mat = mesh.get_surface_material(0).duplicate()
|
||||
mat.albedo_color = SKIN_COLORS[x]
|
||||
# mesh.set_surface_material(0, mat)
|
||||
SKIN_MATERIALS[0].albedo_color = SKIN_COLORS[x]
|
||||
mesh.set_surface_material(0, SKIN_MATERIALS[0])
|
||||
print(SKIN_COLORS[x])
|
||||
|
||||
func set_penis():
|
||||
var mesh = get_node("Homunculus/DongBigDick")
|
||||
for i in range_trait("Penis"):
|
||||
if genotype[i]:
|
||||
mesh.visible = true
|
||||
|
||||
func set_arm():
|
||||
var x = 0
|
||||
var j = 0
|
||||
for i in range_trait("Arm"):
|
||||
if genotype[i]:
|
||||
x = j
|
||||
break
|
||||
j += 1
|
||||
var set_true = ARM_MODES[x]
|
||||
var mesh = get_node("Homunculus/"+set_true)
|
||||
mesh.visible = true
|
||||
|
||||
func phenotype_it():
|
||||
set_color()
|
||||
set_penis()
|
||||
set_arm()
|
||||
|
||||
func _ready():
|
||||
rng.randomize()
|
||||
initialize()
|
||||
|
||||
print(describe())
|
||||
self.phenotype_it()
|
||||
#Register the selection event
|
||||
get_node("SelectionArea").connect('input_event', get_parent(), 'select_a_bitch', [get_index()])
|
||||
pass
|
||||
Reference in New Issue
Block a user