//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); }