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("#666666"), 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