Beispiel #1
0
 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);
 }
Beispiel #2
0
 // Use this for initialization
 void Start()
 {
     systemRotation = 0f;
     world          = pipeSystem.transform.parent;
     rotater        = transform.GetChild(0);
     currentPipe    = pipeSystem.SetupFirstPipe();
     SetupCurrentPipe();
 }
Beispiel #3
0
    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;
    }
Beispiel #4
0
    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;
    }
Beispiel #5
0
 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();
 }
Beispiel #6
0
    // 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();
    }
Beispiel #7
0
    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);
        }
    }
Beispiel #8
0
 public abstract void GenerateItems(BloodVessel bloodVessel);