Files
recombinator/homunculus3.gd
T
2020-03-22 13:30:47 +01:00

181 lines
3.5 KiB
GDScript

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 = [
"TentaclesArms",
"HandClaws",
"HandBase",
"HandClaws",
"HandBase",
"HandClaws",
"HandBase",
"HandClaws",
"HandClaws",
"HandBase"
]
const HEAD_MODES = [
"WingsBase",
"WingsBase",
"ForeheadHorns",
"ForeheadHorns",
"",
"",
"",
""
]
const PENIS_MODES = [
"DongBigDick",
""
]
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 x = PENIS_MODES.size()-1
var j = 0
for i in range_trait("Penis"):
if genotype[i]:
x = j
break
j += 1
if PENIS_MODES[x] != "":
get_node("Homunculus/"+PENIS_MODES[x]).visible = true
func set_arm():
var x = ARM_MODES.size()-1
var j = 0
for i in range_trait("Arm"):
if genotype[i]:
x = j
break
j += 1
get_node("Homunculus/"+ARM_MODES[x]).visible = true
func set_head():
var x = HEAD_MODES.size()-1
var j = 0
for i in range_trait("Head"):
if genotype[i]:
x = j
break
j += 1
if HEAD_MODES[x] != "":
get_node("Homunculus/"+HEAD_MODES[x]).visible = true
func phenotype_it():
set_color()
set_penis()
set_arm()
set_head()
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