//Way to go through piece types until end
    bool ChoosePieceType(out WeaponPiece.pieceType type, bool reset = true)
    {
        if (reset)
        {
            nextPieceTypes = new List <WeaponPiece.pieceType>(connect.acceptableConnections);
        }
        else if (nextPieceTypes.Count < 1)
        {
            type = WeaponPiece.pieceType.noType;
            return(false);
        }


        int index = seed.Next(0, nextPieceTypes.Count);

        type = nextPieceTypes[index];
        nextPieceTypes.RemoveAt(index);



        return(true);
    }
    IEnumerator AddPiece(WeaponPiece.pieceType typeToAdd, Transform offset)
    {
        List <GameObject> acceptableParts = new List <GameObject>();

        switch (typeToAdd)
        {
        case WeaponPiece.pieceType.guard:
            acceptableParts.AddRange(new List <GameObject>(weaponGenSettings.guards));
            break;

        case WeaponPiece.pieceType.handle:
            acceptableParts.AddRange(new List <GameObject>(weaponGenSettings.handles));
            break;

        case WeaponPiece.pieceType.head:
            acceptableParts.AddRange(new List <GameObject>(weaponGenSettings.heads));
            break;

        case WeaponPiece.pieceType.pommel:
            acceptableParts.AddRange(new List <GameObject>(weaponGenSettings.pommels));
            break;

        case WeaponPiece.pieceType.shaft:
            acceptableParts.AddRange(new List <GameObject>(weaponGenSettings.shafts));
            break;

        default:
            Debug.Log("Weapon Generation Failed!");
            yield break;
        }
        //this guy should solve 90% of the remaining problems
        List <ConnectPoint> acceptableConnections = new List <ConnectPoint>();

        FilterParts(ref acceptableParts, ref acceptableConnections);

        if (acceptableConnections.Count == 0)
        {
            Debug.Log("Absolutely nothing works");
            yield break;
            //try a different part to add here
        }
        else
        {
            int pieceIndex = seed.Next(acceptableConnections.Count);
            //have to invert shit as usual
            Quaternion rot = Quaternion.Euler(180, 0, 0) * offset.rotation * acceptableConnections[pieceIndex].transform.rotation;
            Vector3    pos = offset.position - rot * (acceptableConnections[pieceIndex].transform.position);

            GameObject  newObject = Instantiate(acceptableConnections[pieceIndex].piece.prefab, pos, rot, parent.transform);
            WeaponPiece pieceInfo = newObject.GetComponent <WeaponPiece>();
            weaponPieces.Add(pieceInfo);
            foreach (ConnectPoint connection in pieceInfo.connections)
            {
                if (!(connection.transform.name == acceptableConnections[pieceIndex].transform.name))
                {
                    openConnections.Enqueue(connection);
                }
            }
        }
        yield return(null);
    }