Mesh phenotype generation part one

This commit is contained in:
Mark Hoekveen
2020-03-22 00:38:24 +01:00
parent ecfff780fa
commit 2ab1926a48
16 changed files with 2486 additions and 22 deletions
+65
View File
@@ -0,0 +1,65 @@
tool
extends Node
export (PackedScene) var Creature
export (float) var mutation_rate = 0.05
var selected = []
var rng = RandomNumberGenerator.new()
const M_PI = 3.14
func _ready():
rng.randomize()
self.spawn_a_bitch()
func spawn_a_bitch():
var c = Creature.instance()
add_child(c)
c.transform = c.transform.scaled(Vector3(0.1, 0.1, 0.1))
c.transform = c.transform.translated(Vector3(0.0, 10.0, 0.0))
c.transform = c.transform.rotated(Vector3(0.0, 1.0, 0.0), -0.5*M_PI)
return c
func kill_a_bitch():
var c = get_child(get_child_count()-1)
if c:
c.queue_free()
func combine_a_bitch():
if selected.size() == 2:
var new_dna = []
for i in range(selected[0].dna.size()):
if rng.randf() > 0.5:
new_dna.append(selected[0].dna[i])
else:
new_dna.append(selected[1].dna[i])
if rng.randf() <= mutation_rate:
new_dna.append(!new_dna.pop_back())
var new_child = spawn_a_bitch()
new_child.dna = new_dna
deselect_all()
select(new_child)
new_child.describe()
new_child.set_color()
func deselect_all():
selected = []
func select(creature):
if selected.has(creature):
creature.get_node("SelectionIndicator").visible = false;
selected.erase(creature)
else:
selected.append(creature)
creature.get_node("SelectionIndicator").visible = true;
func select_a_bitch(camera, event, click_position, click_normal, index, creature_id):
if event.is_action_pressed("select_creature"):
var kindeke = get_child(creature_id)
select(kindeke)
print(creature_id)
func _on_Respawn_pressed():
kill_a_bitch()
spawn_a_bitch()