Exemple #1
0
	/**
	 * Extruding can get expensive when an object has many faces.  This creates a new
	 * pb_Object pipe by detaching the currently moving faces into a new object, then
	 * sets that pipe in motion.
	 */
	void DetachChild()
	{
		// First order of business - stop extruding from this segment.
		Pause();

		// DetachFacesToObject can fail, so it returns a bool with the success status.
		// If it fails, end this pipe tree.  Otherwise, copy will be set to the new
		// pb_Object.
		pb_Object copy;

		if(DetachFacesToObject(pb, movingFaces, out copy))
		{
			// Huzzah!  DetachFacesToObject worked, and we now have 2 separate pb_Objects.
			// The first gets all the faces in movingFaces deleted, and the duplicate gets
			// all faces that *aren't* movingFaces deleted.

			child = copy.gameObject.AddComponent<Pipe>();
			child.gameObject.name = "ChildPipe: " + child.gameObject.GetInstanceID();
			
			// Let the child know who's boss.
			child.SetParent(this);

			// Aaand child inherits all the same paremeters that this branch has.
			child.SetSpeed(this.speed);
			child.SetSize(this.size);
			child.SetBounds(this.bounds);
			child.SetStretchRange(this.minimumStretchDistance, maximumStretchDistance);
			child.SetMaxTurns(this.maximumPipeTurns - turnCount);

			// Unlike the first segment, children should start with a turn.
			child.isTurn = true;

			// Now pass a reference to PipeSpawner's OnPipeFinished delegate to the child's OnPipeFinished event handler.
			child.OnPipeFinished += OnPipeFinished;
		}
		else
		{
			// Poop.  DetachFacesToObject failed.  Put this branch out of it's misery now.
			EndPipe_Internal();
		}
	}