public virtual GameObject ActivateSegment(GameObject segment, SegmentManager sm) { segment.SetActive(true); Vector3 bounds; try { bounds = segment.transform.GetChild(0).transform.GetComponent <Renderer>().bounds.size; } catch { bounds = segment.GetComponent <BoxCollider>().bounds.size; } bounds = ProcessBounds(bounds); if (sm.GetLastSpawned() != null) { var travel = sm.GetLastSpawned().transform.localPosition.z; var t = transform.transform.localPosition; t.z = travel + bounds.z * sm.SegmentIntersectionFactor; t.y = -10; segment.transform.localPosition = t; } else { segment.transform.localPosition = new Vector3(0, -10, ChangeStartDistance(-sm.removeDistance)); } segment.transform.localPosition = TransformPosition(segment.transform.localPosition); Segment rs = segment.GetComponent <Segment>(); if (sm.SpawnObjectsInMiddle) { rs.Clear(); if (sm.roadObjectsManager) { sm.roadObjectsManager.AddDetailToSegment(segment, bounds); } } rs.SetSpeed(sm.gameSpeed * -1); var dist = bounds.z - 0.03f; sm.SetDistanceToNextSpawn(dist); segment.SetActive(true); sm.SetLastSpawned(segment); return(segment); }
public virtual void FillGap(SegmentManager sm) { if (sm.GetLastSpawned().transform.localPosition.z > 0) { return; } var dist = Mathf.Abs(sm.GetLastSpawned().transform.localPosition.z); if (dist > sm.GetDistanceToNextSpawn()) { sm.ActivateSegment(); } }