public void Position(BloodVessel bloodVessel, float curveRotation, float ringRotation) { transform.SetParent(bloodVessel.transform, false); transform.localRotation = Quaternion.Euler(0f, 0f, -curveRotation); rotater.localPosition = new Vector3(0f, bloodVessel.CurveRadius); rotater.localRotation = Quaternion.Euler(ringRotation, 0f, 0f); }
// Use this for initialization void Start() { systemRotation = 0f; world = pipeSystem.transform.parent; rotater = transform.GetChild(0); currentPipe = pipeSystem.SetupFirstPipe(); SetupCurrentPipe(); }
private void ShiftPipes() { BloodVessel temp = pipes[0]; for (int i = 1; i < pipes.Length; i++) { pipes[i - 1] = pipes[i]; } pipes[pipes.Length - 1] = temp; }
public void AlignWith(BloodVessel bloodVessel) { relativeRotation = Random.Range(0, curveSegmentCount) * 360f / pipeSegmentCount; transform.SetParent(bloodVessel.transform, false); transform.localPosition = Vector3.zero; transform.localRotation = Quaternion.Euler(0f, 0f, -bloodVessel.curveAngle); transform.Translate(0f, bloodVessel.curveRadius, 0f); transform.Rotate(relativeRotation, 0f, 0f); transform.Translate(0f, -curveRadius, 0f); transform.SetParent(bloodVessel.transform.parent); transform.localScale = Vector3.one; }
private void Awake() { pipes = new BloodVessel[pipeCount]; for (int i = 0; i < pipes.Length; i++) { BloodVessel bloodVessel = pipes[i] = Instantiate <BloodVessel>(bloodVesselPrefab); bloodVessel.transform.SetParent(transform, false); bloodVessel.Generate(); if (i > 0) { bloodVessel.AlignWith(pipes[i - 1]); } } AlignNextPipeWithOrigin(); }
// Update is called once per frame void Update() { float delta = velocity * Time.deltaTime; systemRotation += delta * deltaToRotation; if (systemRotation >= currentPipe.CurveAngle) { delta = (systemRotation - currentPipe.CurveAngle) / deltaToRotation; currentPipe = pipeSystem.SetupNextPipe(); deltaToRotation = 360f / (2f * Mathf.PI * currentPipe.CurveRadius); SetupCurrentPipe(); systemRotation = delta * deltaToRotation; } pipeSystem.transform.localRotation = Quaternion.Euler(0f, 0f, systemRotation); UpdateAvatarRotation(); }
public override void GenerateItems(BloodVessel bloodVessel) { float start = (Random.Range(0, bloodVessel.pipeSegmentCount) + 0.5f); float direction = Random.value < 0.5f ? 1f : -1f; float angleStep = bloodVessel.CurveAngle / bloodVessel.CurveSegmentCount; for (int i = 0; i < bloodVessel.CurveSegmentCount / 2; i++) { RedBloodCell rbc = Instantiate <RedBloodCell>(rbcPrefab); float pipeRotation = (start + i * direction) * 360f / bloodVessel.pipeSegmentCount; rbc.Position(bloodVessel, i * angleStep, pipeRotation); } }
public abstract void GenerateItems(BloodVessel bloodVessel);