IEnumerator buildTradeUnit2(EdgeUnit edgeUnit, System.Type unitType)
    {
        waitingForPlayer = true;
        List <Edge>   validEdgesToBuild = getValidEdgesForPlayer(players[currentPlayerTurn], true);
        ResourceTuple costOfUnit        = resourceManager.getCostOfUnit(unitType);

        if (costOfUnit == null)
        {
            print("costofunit is null, returning.");
            waitingForPlayer = false;
            yield break;
        }

        if (!setupPhase)
        {
            if (!players [currentPlayerTurn].hasAvailableResources(costOfUnit))                // (Road.ResourceValue);//ResourceCost.getResourceValueOf(Road.ResourceValue);
            {
                print("Insufficient Resources to build a road!");
                waitingForPlayer = false;
                yield break;
            }
        }

        if (validEdgesToBuild.Count == 0)
        {
            print("No possible location to build a road!");
            Destroy(edgeUnit);
            waitingForPlayer = false;
            yield break;
        }

        highlightEdgesWithColor(validEdgesToBuild, true, players [currentPlayerTurn].playerColor);

        edgeUnit.id = unitID++;
        edgeUnit.gameObject.SetActive(false);

        yield return(StartCoroutine(players [currentPlayerTurn].makeEdgeSelection(validEdgesToBuild)));         //, edgeUnit));//new Road(unitID++)));

        edgeUnit.GetComponentInChildren <Renderer> ().material.color = players[currentPlayerTurn].playerColor;
        edgeUnit.gameObject.SetActive(true);

        if (!setupPhase)
        {
            players [currentPlayerTurn].spendResources(costOfUnit);

            uiButtons [2].GetComponentInChildren <Text> ().text = "Build Road";
        }
        highlightAllEdges(false);

        waitingForPlayer = false;
    }
    IEnumerator buildTradeUnit(EdgeUnit edgeUnit, System.Type unitType)
    {
        waitingForPlayer = true;
        List <Edge>   validEdgesToBuild = getValidEdgesForPlayer(players[currentPlayerTurn], unitType == typeof(Road));
        ResourceTuple costOfUnit        = resourceManager.getCostOfUnit(unitType);

        System.Type newType = unitType;

        if (costOfUnit == null)
        {
            print("costofunit is null, returning.");
            waitingForPlayer = false;
            uiButtons [2].GetComponentInChildren <Text> ().text = "Build Road";
            uiButtons [5].GetComponentInChildren <Text> ().text = "Build Ship";
            currentActiveButton = -1;
            Destroy(edgeUnit.gameObject);
            removeUnitFromGame(edgeUnit);
            yield break;
        }

        if (!setupPhase)
        {
            if (!players [currentPlayerTurn].hasAvailableResources(costOfUnit))                // (Road.ResourceValue);//ResourceCost.getResourceValueOf(Road.ResourceValue);
            {
                print("Insufficient Resources to build this trade unit!");
                waitingForPlayer = false;
                uiButtons [2].GetComponentInChildren <Text> ().text = "Build Road";
                uiButtons [5].GetComponentInChildren <Text> ().text = "Build Ship";
                currentActiveButton = -1;
                Destroy(edgeUnit.gameObject);
                removeUnitFromGame(edgeUnit);
                yield break;
            }
        }

        if (validEdgesToBuild.Count == 0)
        {
            print("No possible location to build this trade unit!");
            Destroy(edgeUnit.gameObject);
            waitingForPlayer = false;
            uiButtons [2].GetComponentInChildren <Text> ().text = "Build Road";
            uiButtons [5].GetComponentInChildren <Text> ().text = "Build Ship";
            currentActiveButton = -1;
            removeUnitFromGame(edgeUnit);
            yield break;
        }

        highlightEdgesWithColor(validEdgesToBuild, true, players [currentPlayerTurn].playerColor);
        //highlightEdges (validEdgesToBuild, true);

        yield return(StartCoroutine(players [currentPlayerTurn].makeEdgeSelection(validEdgesToBuild)));         //, edgeUnit));//new Road(unitID++)));

        print(players [currentPlayerTurn].playerName + " builds a " + unitType.ToString() + " on edge #" + players [currentPlayerTurn].lastEdgeSelection.id);

        if (setupPhase && !(players [currentPlayerTurn].lastEdgeSelection.isLandEdge() || players [currentPlayerTurn].lastEdgeSelection.isShoreEdge()))
        {
            GameObject edgeUnitGameObject = (GameObject)Instantiate(prefabManager.shipPrefab);
            Ship       replacedShip       = edgeUnitGameObject.GetComponent <Ship> ();
            replacedShip.id = edgeUnit.id;
            removeUnitFromGame(edgeUnit);
            edgeUnit = replacedShip;
            unitsInPlay.Add(edgeUnit.id, edgeUnit);
            newType = typeof(Ship);
        }

        players [currentPlayerTurn].lastEdgeSelection.occupier = edgeUnit;
        edgeUnit.locationEdge = players [currentPlayerTurn].lastEdgeSelection;
        players [currentPlayerTurn].addOwnedUnit(edgeUnit, newType);
        edgeUnit.owner = players [currentPlayerTurn];

        edgeUnit.transform.position   = players [currentPlayerTurn].lastEdgeSelection.transform.position;
        edgeUnit.transform.rotation   = players [currentPlayerTurn].lastEdgeSelection.transform.rotation;
        edgeUnit.transform.localScale = players [currentPlayerTurn].lastEdgeSelection.transform.localScale;
        edgeUnit.transform.parent     = players [currentPlayerTurn].lastEdgeSelection.transform;

        edgeUnit.GetComponentInChildren <Renderer> ().material.color = players[currentPlayerTurn].playerColor;
        edgeUnit.gameObject.SetActive(true);

        if (!setupPhase)
        {
            players [currentPlayerTurn].spendResources(costOfUnit);

            uiButtons [2].GetComponentInChildren <Text> ().text = "Build Road";
            uiButtons [5].GetComponentInChildren <Text> ().text = "Build Ship";
        }
        highlightAllEdges(false);
        currentActiveButton = -1;

        waitingForPlayer = false;
    }