Mesh phenotype generation part one
This commit is contained in:
@@ -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()
|
||||
Reference in New Issue
Block a user