public GameObject InstantiatePathThreePointsVertical(Vector3 position, Quaternion rotation, int difficulty, bool activate) { float pointsSpacingMin = 2f; float pointsSpacingMax = 8f; float pointsSpacing = Random.Range(pointsSpacingMin, pointsSpacingMax); GameObject newBarrel = Instantiate(barrelPF, position, rotation) as GameObject; Barrel barrelScript = newBarrel.GetComponent <Barrel>(); PathMoveBehaviour pathScript = newBarrel.AddComponent <PathMoveBehaviour>(); pathScript.initialAngle = 0f; pathScript.moveDuration = DifficultyManager.MoveDurationBasedOnDifficulty(); pathScript.delayBetweenMoves = DifficultyManager.DelayBetweenMovesBasedOnDifficulty(); int firstMoveDirection = Random.value > 0.5f ? 1 : -1; pathScript.pathPoints.Add(new Vector3(position.x, position.y, position.z)); bool firstPositionIsCentralPoint = Random.value > 0.5f; if (firstPositionIsCentralPoint) { pathScript.backAndForth = false; //it will be virtually back and forth because of the path points pathScript.pathPoints.Add(new Vector3(position.x, position.y + pointsSpacing * firstMoveDirection, position.z)); pathScript.pathPoints.Add(new Vector3(position.x, position.y, position.z)); pathScript.pathPoints.Add(new Vector3(position.x, position.y + pointsSpacing * -firstMoveDirection, position.z)); } else { pathScript.backAndForth = true; pathScript.pathPoints.Add(new Vector3(position.x, position.y + pointsSpacing * firstMoveDirection, position.z)); pathScript.pathPoints.Add(new Vector3(position.x, position.y + pointsSpacing * firstMoveDirection * 2, position.z)); } barrelScript.NextBarrelPosition = () => { float nextBarrelRelativeXRange = Random.Range(5, 15); float nextBarrelY = pathScript.pathPoints[Random.Range(0, pathScript.pathPoints.Count)].y; return(new Vector3(position.x + nextBarrelRelativeXRange, nextBarrelY, 0)); }; if (activate) { pathScript.Activate(); } return(newBarrel); }
public GameObject InstantiatePathSwingVertical(Vector3 position, Quaternion rotation, int difficulty, bool activate) { float pointsSpacingMin = 3f; float pointsSpacingMax = 15f; float pointsSpacing = Random.Range(pointsSpacingMin, pointsSpacingMax); GameObject newBarrel = Instantiate(barrelPF, position, rotation) as GameObject; Barrel barrelScript = newBarrel.GetComponent <Barrel>(); PathMoveBehaviour pathScript = newBarrel.AddComponent <PathMoveBehaviour>(); pathScript.initialAngle = 0f; pathScript.delayBetweenMoves = 0f; pathScript.moveDuration = DifficultyManager.MoveDurationBasedOnDifficulty(); pathScript.pathPoints.Add(new Vector3(position.x, position.y, position.z)); pathScript.pathPoints.Add(new Vector3(position.x, position.y + pointsSpacing * (Random.value > 0.5f? 1: -1), position.z)); barrelScript.NextBarrelPosition = () => { float nextBarrelRelativeXRange = Random.Range(5, 15); float nextBarrelY = pathScript.pathPoints[Random.Range(0, pathScript.pathPoints.Count)].y; return(new Vector3(position.x + nextBarrelRelativeXRange, nextBarrelY, 0)); }; if (activate) { pathScript.Activate(); } return(newBarrel); }