private TunnelPiece takeFromPool(int index) { TunnelPiece piece = availablePool [index]; availablePool.RemoveAt(index); return(piece); }
private void updateClearRun(TunnelPiece newPiece) { if (newPiece.clearRun) { currentClearRun += newPiece.length(); } else { currentClearRun = 0; } }
private void spawnNewInstance(TunnelPiece template) { TunnelPiece instance = Instantiate <TunnelPiece> (template); instance.findBall(); returnToPool(instance); }
private TunnelSelectionPreferences buildPreferences() { TunnelSelectionPreferences prefs = new TunnelSelectionPreferences (); LinkedListNode<TunnelPiece> currentNode = tunnel.Last; float distanceToEndOfTunnel = 0f; float currentTunnelDifficulty = 0f; int numPieces = 0; while (distanceToEndOfTunnel < maxDistanceToCheckPreferenceModifiers && currentNode != null) { TunnelPiece piece = currentNode.Value; prefs = piece.updatePreferences(prefs, distanceToEndOfTunnel); distanceToEndOfTunnel += piece.length(); currentTunnelDifficulty += piece.difficultyLevel; currentNode = currentNode.Previous; numPieces++; } //set the average difficulty in case anyone cares currentAverageDifficulty = currentTunnelDifficulty / numPieces; //int bucketLevel = calculateBucketLevel (); prefs.maxBucketLevel = (int) Mathf.Lerp(0, maxBucketLevel, ball.position.z / distanceToMaxSettings); prefs.maxDifficulty = Mathf.Lerp(baseDifficulty, maxDifficulty, ball.position.z / distanceToMaxSettings) - currentTunnelDifficulty; prefs.preferredDifficulty = prefs.maxDifficulty / 2f; return prefs; }
private void extendTunnelEnd() { while (tunnelLength() < minTunnelLength) { TunnelPiece newPiece = tunnel.Last.Value.spawnChildPiece(buildPreferences()); updateClearRun(newPiece); deadZone.position = deadZone.position + newPiece.endOffset; tunnel.AddLast(newPiece); } }
//This method of selecting pieces is no longer used public TunnelPiece takeRandomPieceFromPool() { int index = Random.Range(0, (availablePool.Count)); TunnelPiece piece = availablePool [index]; availablePool.RemoveAt(index); return(piece); }
public virtual void setup(TunnelSelectionPreferences prefs, TunnelPiece parent) { position = transform.position; float flyInTime = Mathf.Lerp(0, maxFlyInTime, 1 / (ball.GetTargetVelocity().magnitude / 30f)); //Debug.Log ("Fly in time: " + flyInTime + " for ball speed of: " + ball.GetTargetVelocity ().magnitude); transform.position = transform.position + (((Vector3.down * Random.Range(-1, 2)) + (Vector3.left * Random.Range(-1, 2))) * maxFlyInDistance); transform.DOMove(position, flyInTime).Play(); }
public TunnelPiece spawnChildPiece(TunnelSelectionPreferences prefs) { TunnelPiece child = TunnelPiecePool.INSTANCE.takeWeightedRandomPieceFromPool(prefs); child.transform.position = position + endOffset; child.gameObject.SetActive(true); child.setup(prefs, this); child.choosePotentialCollectableSlot(); return(child); }
private void initPool() { availablePool = new List <TunnelPiece> (); for (int i = 0; i < tunnelPiecePrefabs.Length; i++) { TunnelPiece template = tunnelPiecePrefabs[i]; for (int j = 0; j < template.frequency; j++) { spawnNewInstance(template); } } }
public override void setup(TunnelSelectionPreferences prefs, TunnelPiece parent) { base.setup(prefs, parent); jumpExtension = Mathf.Clamp(((TunnelSpawnController.INSTANCE.getCurrentClearRun())) / 4, 0, maxJumpExtension); float difficultyBasedMaxJumpRise = Mathf.Lerp(0, maxJumpRise, (1 - (2 * TunnelSpawnController.INSTANCE.GetCurrentAverageDifficulty()))); jumpRise = Mathf.Lerp(0, difficultyBasedMaxJumpRise, jumpExtension / maxJumpExtension); Debug.Log("Jump rise = " + jumpRise + ", Jump extension = " + jumpExtension + ", Ave Difficulty = " + TunnelSpawnController.INSTANCE.GetCurrentAverageDifficulty()); jumpEnd.position = jumpEnd.position + (Vector3.forward * jumpExtension) + (Vector3.up * jumpRise); this.endOffset = this.endOffset + (Vector3.forward * jumpExtension); this.endOffset = this.endOffset + (Vector3.up * jumpRise); }
private void trimTunnelStart() { TunnelPiece toTrim = tunnel.First.Value; while (ball.position.z - (toTrim.transform.position.z + toTrim.endOffset.z) > minTunnelLengthBehind) { toTrim.tearDown (); if (!isStarterPiece (toTrim)) { TunnelPiecePool.INSTANCE.returnToPool (toTrim); } else { toTrim.gameObject.SetActive (false); } tunnel.RemoveFirst (); toTrim = tunnel.First.Value; } }
public TunnelPiece takeWeightedRandomPieceFromPool(TunnelSelectionPreferences prefs) { float[] cumulativeSumOfWeights = new float[availablePool.Count]; //Created a cumulative sum array based on piece weights for the supplied selection preferences float weightSum = 0; string weightedPool = ""; for (int i = 0; i < availablePool.Count; i++) { TunnelPiece tp = availablePool[i]; float weight = tp.calculateWeight(prefs); weightSum += weight; cumulativeSumOfWeights[i] = weightSum; if (Debug.isDebugBuild) { weightedPool = weightedPool + tp.name + ": " + weight + "\n"; } } //Randomly select a piece based upon the weights calculated above (note that a zero weight can never be selected so the piece taken here is already guaranteed valid) float rand = Random.Range(0f, weightSum); for (int i = 0; i < availablePool.Count; i++) { if (cumulativeSumOfWeights[i] >= rand) { TunnelPiece chosen = takeFromPool(i); if (Debug.isDebugBuild) { TunnelSpawnController.INSTANCE.debug.text = weightedPool + "Chosen Piece: " + chosen.name + "\n" + "Bucket Level: " + prefs.maxBucketLevel + "\n" + "Max Difficulty: " + prefs.maxDifficulty; } return(chosen); } } //This shouldn't ever happen return(takeFromPool(0)); }
public override void setup(TunnelSelectionPreferences prefs, TunnelPiece parent) { base.setup(prefs, parent); axisRot.enabled = (prefs.maxBucketLevel >= spinBucketLevel && Random.Range(0f, 2f) <= 1f); }
public override void setup(TunnelSelectionPreferences prefs, TunnelPiece parent) { base.setup(prefs, parent); //extendDrop (prefs); extendBody(prefs); }
public void returnToPool(TunnelPiece piece) { piece.gameObject.SetActive(false); availablePool.Add(piece); }
private bool isStarterPiece(TunnelPiece piece) { return piece.CompareTag ("FirstPipe") || piece.CompareTag ("SecondPipe"); }
public override void setup(TunnelSelectionPreferences prefs, TunnelPiece parent) { base.setup(prefs, parent); configInUse = getRandomConfig(prefs); applyConfig(configInUse); }