public SwarmOrder createOrder(byte source, byte target, int spawnZone)
    {
        PathSolution ps = _computedPaths [spawnZone];

        if (source != 0)
        {
            ps = ps.getSpecifiSolution(source);
        }

        Vector3         targetAvgPos = new Vector3();
        Queue <Vector3> path         = null;

        if (target == MAIN_TARGET)
        {
            path         = ps.getPathToTarget();
            targetAvgPos = SpawnTable.getInstance().getTargetSpawns() [0].getAveragePosition();
        }
        else
        {
            path = ps.getPathToTower(target);

            if (path == null)
            {
                Debug.Log("Null order. source: " + source + ", target: " + target + ", spawnZone: " + spawnZone);
                return(null);
            }

            targetAvgPos = SpawnTable.getInstance().getTowerSpawns() [target].getAveragePosition();
        }

        SwarmOrder order = new SwarmOrder(target, targetAvgPos, path);

        return(order);
    }
    public GameEnemyInstance spawnSoldier(string attackerTemplate, int spawnZone, byte order)
    {
        SwarmOrder orderObj = createOrder(0, order, spawnZone);

        GameEnemy template = EnemyTable.getInstance().getEnemyByName(attackerTemplate);

        if (template == null)
        {
            return(null);
        }

        GameEnemyInstance attacker = new GameEnemyInstance(IDFactory.getNextID(), template, spawnZone);

        World.getInstance().registerEnemy(attacker);

        Vector3 spawnPosition = _positions [_computedPaths [spawnZone].getSpawnPointIndex()];

        attacker.getGameInstance().transform.position = spawnPosition;

        attacker.getGameInstance().GetComponent <EnemyController> ().setOrder(orderObj);

        return(attacker);
    }