Beispiel #1
0
    // Start is called before the first frame update
    void Start()
    {
        if (mother == null || father == null)
        {
            genome = new EnemyGenome();
        }
        else
        {
            genome = new EnemyGenome(father, mother);
        }

        pfc = GameObject.FindWithTag("GameController").GetComponent <PlayfieldController>();
        nav = GetComponent <UnityEngine.AI.NavMeshAgent>();

        nav.speed = genome.speed;

        StartCoroutine("makeUpMind");
    }
Beispiel #2
0
    public EnemyGenome(EnemyGenome father, EnemyGenome mother)
    {
        health = (Random.Range(0f, 1f) <= SimulationParameters.FATHER_GENE_PROBABILITY) ? father.health : mother.health;
        speed  = (Random.Range(0f, 1f) <= SimulationParameters.FATHER_GENE_PROBABILITY) ? father.speed : mother.speed;
        hunger = (Random.Range(0f, 1f) <= SimulationParameters.FATHER_GENE_PROBABILITY) ? father.hunger : mother.hunger;
        hungerIncreaseOverTime = (Random.Range(0f, 1f) <= SimulationParameters.FATHER_GENE_PROBABILITY) ? father.hungerIncreaseOverTime : mother.hungerIncreaseOverTime;
        damageWhenHungry       = (Random.Range(0f, 1f) <= SimulationParameters.FATHER_GENE_PROBABILITY) ? father.damageWhenHungry : mother.damageWhenHungry;
        reactionTime           = (Random.Range(0f, 1f) <= SimulationParameters.FATHER_GENE_PROBABILITY) ? father.reactionTime : mother.reactionTime;
        fear           = (Random.Range(0f, 1f) <= SimulationParameters.FATHER_GENE_PROBABILITY) ? father.fear : mother.fear;
        braveness      = (Random.Range(0f, 1f) <= SimulationParameters.FATHER_GENE_PROBABILITY) ? father.braveness : mother.braveness;
        damage         = (Random.Range(0f, 1f) <= SimulationParameters.FATHER_GENE_PROBABILITY) ? father.damage : mother.damage;
        attackDamage   = (Random.Range(0f, 1f) <= SimulationParameters.FATHER_GENE_PROBABILITY) ? father.attackDamage : mother.attackDamage;
        perception     = (Random.Range(0f, 1f) <= SimulationParameters.FATHER_GENE_PROBABILITY) ? father.perception : mother.perception;
        lifeExpectancy = (Random.Range(0f, 1f) <= SimulationParameters.FATHER_GENE_PROBABILITY) ? father.lifeExpectancy : mother.lifeExpectancy;

        #region Random Mutation of a random genome

        if (Random.Range(0f, 1f) <= SimulationParameters.MUTATION_PROBABILITY)
        {
            int i = Random.Range(0, 12);

            switch (i)
            {
            case 0:
                health = SimulationParameters.random(SimulationParameters.MIN_HEALTH, SimulationParameters.MAX_HEALTH, 1f);
                break;

            case 1:
                speed = SimulationParameters.random(SimulationParameters.MIN_SPEED, SimulationParameters.MAX_SPEED, 3.0f);
                break;

            case 2:
                hunger = SimulationParameters.random(SimulationParameters.MIN_HUNGER, SimulationParameters.MAX_HUNGER, 0.5f);
                break;

            case 3:
                hungerIncreaseOverTime = SimulationParameters.random(SimulationParameters.MIN_HUNGER_INCREASE_OVER_TIME, SimulationParameters.MAX_HUNGER_INCREASE_OVER_TIME, 1f);
                break;

            case 4:
                damageWhenHungry = SimulationParameters.random(SimulationParameters.MIN_DAMAGE_WHEN_HUNGRY, SimulationParameters.MAX_DAMAGE_WHEN_HUNGRY, 1f);
                break;

            case 5:
                reactionTime = SimulationParameters.random(SimulationParameters.MIN_REACTION_TIME, SimulationParameters.MAX_REACTION_TIME, 1f);
                break;

            case 6:
                fear = SimulationParameters.random(SimulationParameters.MIN_FEAR, SimulationParameters.MAX_FEAR, 2.0f);
                break;

            case 7:
                braveness = SimulationParameters.random(SimulationParameters.MIN_BRAVENESS, SimulationParameters.MAX_BRAVENESS, 2.0f);
                break;

            case 8:
                damage = SimulationParameters.random(SimulationParameters.MIN_DAMAGE, SimulationParameters.MAX_DAMAGE, 0.5f);
                break;

            case 9:
                attackDamage = SimulationParameters.random(SimulationParameters.MIN_ATTACK_DAMAGE, SimulationParameters.MAX_ATTACK_DAMAGE, 3.0f);
                break;

            case 10:
                perception = SimulationParameters.random(SimulationParameters.MIN_PERCEPTION, SimulationParameters.MAX_PERCEPTION, 1f);
                break;

            case 11:
                lifeExpectancy = Random.Range(SimulationParameters.MIN_LIFE_EXPECTANCY, SimulationParameters.MAX_LIFE_EXPECTANCY);
                break;

            case 12:
                speed      *= 2;
                perception *= 10;
                break;

            default:
                break;
            }
        }

        #endregion
    }