// For moving around the position void Start() { xRotationSpeed = Random.Range(-0.05f, 0.05f); yRotationSpeed = Random.Range(-0.05f, 0.05f); zRotationSpeed = Random.Range(-0.05f, 0.05f); transform.eulerAngles = new Vector3(Random.Range(-90f, 90f), Random.Range(-90f, 90f), Random.Range(-90f, 90f)); _startRotation = transform.eulerAngles; WolrdSegmentBuffer = new ComputeBuffer(numberOfSpherePoints, Marshal.SizeOf(typeof(WorldSegment))); WorldSegmentRenderBuffer = new ComputeBuffer(numberOfSpherePoints, Marshal.SizeOf(typeof(WorldSegment))); var cData = new WorldSegment[numberOfSpherePoints]; for (int i = 0; i < cData.Length; i++) { Vector3 start = Random.onUnitSphere * radius; Vector3 end = start + start.normalized * Random.Range(1f, 2f) * lineScale; cData[i].Start = start; cData[i].End = end; cData[i].speed = Random.Range(0.1f, 0.5f); } WolrdSegmentBuffer.SetData(cData); WorldSegmentRenderBuffer.SetData(cData); cData = null; lineRenderMat = new Material(LineRender); lineRenderMat.hideFlags = HideFlags.HideAndDontSave; }
private void UpdatePosition() { if (CurrentSegment == null) { WorldSettingsOnWorldInitialized(); return; } if (SegmentPosition > CurrentSegment.Length) { OnSegmentChanged?.Invoke(LeftSegment); RightSegment = CurrentSegment; CurrentSegment = LeftSegment; LeftSegment = worldGenerator.GetPreviousSegment(CurrentSegment); } else if (SegmentPosition < 0) { OnSegmentChanged?.Invoke(RightSegment); LeftSegment = CurrentSegment; CurrentSegment = RightSegment; RightSegment = worldGenerator.GetNextSegment(CurrentSegment); } SegmentPosition = transform.InverseTransformPoint(CurrentSegment.transform.position).x; GlobalPosition = SegmentPosition + worldGenerator.GetRemainingSegmentsLength(CurrentSegment); }
public WorldSegment GetNextSegment(WorldSegment segment) { var nextIndex = segments.IndexOf(segment) + 1; if (nextIndex >= segments.Count) { return(segments.FirstOrDefault()); } return(segments[nextIndex]); }
public WorldSegment GetPreviousSegment(WorldSegment segment) { var previousIndex = segments.IndexOf(segment) - 1; if (previousIndex < 0) { return(segments.LastOrDefault()); } return(segments[previousIndex]); }
public void OnWorldSegmentEvent(SegmentEvent Event, GameObject Reporter, WorldSegment Segment) { if (Event == SegmentEvent.TriggerEnter) { OnWorldSegmentEnter(Segment, Reporter); } else { OnWorldSegmentExit(Segment, Reporter); } }
public float GetRemainingSegmentsLength(WorldSegment segment) { float length = 0; var currentPlayerSegment = segments.IndexOf(segment); for (int i = currentPlayerSegment + 1; i < segments.Count; i++) { length += segments[i].Length; } return(length); }
public IEnumerator anchoring_left_of_another_segment_sets_aligns_position_to_another_segment_length() { yield return(TestHelpers.LoadEmptyTestScene()); WorldSegment firstSegment = GetWorldSegment(); WorldSegment secondSegment = GetWorldSegment(); secondSegment.transform.localScale = new Vector3(2, 1, 1); secondSegment.AnchorLeft(firstSegment); yield return(null); Assert.AreEqual(firstSegment.transform.position.x - firstSegment.Length, secondSegment.transform.position.x); }
private void AdjustPosition(WorldSegment segment) { if (position.SegmentPosition > position.CurrentSegment.Length) { var adjustedPosition = new Vector3(segment.transform.position.x - segmentSwitchDeadzone, transform.position.y, transform.position.z); transform.position = adjustedPosition; } else if (position.SegmentPosition < 0) { var adjustedPosition = new Vector3(segment.transform.position.x - segment.Length + segmentSwitchDeadzone, transform.position.y, transform.position.z); transform.position = adjustedPosition; } }
public WorldSegment CreateSegment(WorldSegment prefab) { var newSegment = Object.Instantiate(prefab); var lastSegment = segments.LastOrDefault(); if (lastSegment != null) { newSegment.AnchorRight(lastSegment); } segments.Add(newSegment); OnSegmentCreated?.Invoke(newSegment); return(newSegment); }
public void GenerateNextSegment(float difficulty) { List <WorldSegment> diffSegmentated = new List <WorldSegment>(); foreach (WorldSegment segment in allPossibleSegments) { if (segment.difficultyMinimum <= difficulty && segment.difficultyMaximum >= difficulty) { if ((segment.inputPipeType & lastOutputPipeType) > 0 && (segment.sequenceName != lastSegment || timesMoreForRoll > 0)) { for (int time = 0; time < segment.rollChance; time++) { diffSegmentated.Add(segment); } } } } if (diffSegmentated.Count == 0) { return; } WorldSegment chosenSegment = diffSegmentated[random.Next(0, diffSegmentated.Count)]; if ((int)((PlayerBoxController.instance.playerCube.position.y / 0.32f) + 5) > 1000 && thousandMonument != null) { chosenSegment = thousandMonument; thousandMonument = null; } GenerateSegment(chosenSegment); if (lastSegment == chosenSegment.sequenceName) { timesMoreForRoll--; } else { lastSegment = chosenSegment.sequenceName; if (chosenSegment.timesAllowedInSequence > 0) { timesMoreForRoll = chosenSegment.timesAllowedInSequence - 1; } else { timesMoreForRoll = int.MaxValue; } } }
private void WorldSettingsOnWorldInitialized() { CurrentSegment = worldGenerator.GetSegmentAt(transform.position.x); LeftSegment = worldGenerator.GetPreviousSegment(CurrentSegment); RightSegment = worldGenerator.GetNextSegment(CurrentSegment); }
public void OnWorldSegmentExit(WorldSegment Segment, GameObject Reporter) { // Log("Exited " + seg.name); }
public void OnWorldSegmentExit(WorldSegment Segment, GameObject Reporter) { Log(Reporter.name + " exited " + Segment.name); }
public void AnchorLeft(WorldSegment anchoringSegment) { var anchorX = anchoringSegment.transform.position.x - anchoringSegment.Length; transform.position = new Vector3(anchorX, 0, 0); }
public void GenerateSegment(WorldSegment chosenSegment) { SetNextTileSegment(chosenSegment.GetSegmentTiles(random, lethalBlock)); nextYLevelToGenerate += chosenSegment.segmentYEnd; lastOutputPipeType = chosenSegment.outputPipeType; }