Exemple #1
0
    //Will assign each grunt enemy within the scene a movement type based upon their distance to the player objects
    void AssignTypes()
    {
        grunts = new List <GameObject>();
        for (int i = 0; i < enemyObjects.Count; i++)
        {
            IEnemy    currentEnemyInterface = (IEnemy)enemyObjects[i].GetComponent(typeof(IEnemy));
            EnemyType currentEnemyType      = currentEnemyInterface.ReturnEnemyType();

            if (currentEnemyType == EnemyType.Grunt)
            {
                grunts.Add(enemyObjects[i]);
            }
        }
        int sortedGrunts = 0;

        while (grunts.Count > sortedGrunts)
        {
            float distance      = 100000.0f;
            int   selectedGrunt = 0;

            for (int i = 0; i < grunts.Count; i++)
            {
                Vector3 pos = grunts[i].transform.position;

                float enemyDistance = Vector3.Distance(pos, player1.transform.position);
                if (Vector3.Distance(pos, player2.transform.position) < enemyDistance)
                {
                    enemyDistance = Vector3.Distance(pos, player2.transform.position);
                }

                if (enemyDistance < distance)
                {
                    distance      = enemyDistance;
                    selectedGrunt = i;
                }
            }

            if (sortedGrunts < roomInformation.waves.maxmimumSpeed - 1)
            {
                SCR_GruntSpiderAI gruntClass   = grunts[selectedGrunt].GetComponent <SCR_GruntSpiderAI>();
                STR_GruntTypes    maxSpeedType = roomInformation.gruntSpeedTypes[0];
                gruntClass.SetGrunt(maxSpeedType.speed, maxSpeedType.enemyType, maxSpeedType.priority);
            }
            else if (sortedGrunts >= (roomInformation.waves.maxmimumSpeed - 1) && sortedGrunts < ((roomInformation.waves.maxmimumSpeed - 1) + roomInformation.waves.middleSpeed))
            {
                SCR_GruntSpiderAI gruntClass   = grunts[selectedGrunt].GetComponent <SCR_GruntSpiderAI>();
                STR_GruntTypes    maxSpeedType = roomInformation.gruntSpeedTypes[1];
                gruntClass.SetGrunt(maxSpeedType.speed, maxSpeedType.enemyType, maxSpeedType.priority);
            }
            else
            {
                SCR_GruntSpiderAI gruntClass   = grunts[selectedGrunt].GetComponent <SCR_GruntSpiderAI>();
                STR_GruntTypes    maxSpeedType = roomInformation.gruntSpeedTypes[2];
                gruntClass.SetGrunt(maxSpeedType.speed, maxSpeedType.enemyType, maxSpeedType.priority);
            }
            grunts.RemoveAt(selectedGrunt);
            sortedGrunts++;
        }
    }
    void OnEnable()
    {
        grunt = (SCR_GruntSpiderAI)target;

        if (grunt.setAttackRange <= 0)
        {
            grunt.setAttackRange = grunt.baseAttackRange;
        }


        if (grunt.setEnemyRange <= 0)
        {
            grunt.setEnemyRange = grunt.baseEnemyRange;
        }
    }