예제 #1
0
        public void Add3DGraph(string name, BasicFunction funcX, VectorFunc funcY, string xTitle, string yTitle)
        {
            GraphUnderlying graphU = new GraphUnderlying(xTitle, yTitle);

            graphU.AddTimeline(new Timeline("x " + name, Colors.Red));
            graphU.AddTimeline(new Timeline("y " + name, Colors.Green));
            graphU.AddTimeline(new Timeline("z " + name, Colors.Blue));

            BasicFunction xVec = () => funcY().X;
            BasicFunction yVec = () => funcY().Y;
            BasicFunction zVec = () => funcY().Z;

            var list = new List <BasicFunctionPair>();

            list.Add(new BasicFunctionPair()
            {
                XFunc = funcX, YFunc = xVec
            });
            list.Add(new BasicFunctionPair()
            {
                XFunc = funcX, YFunc = yVec
            });
            list.Add(new BasicFunctionPair()
            {
                XFunc = funcX, YFunc = zVec
            });

            AddGraph(graphU, list);
        }
예제 #2
0
    /// <summary>
    /// Same idea as the SyncPinch script but with more pairs of colliders.
    /// </summary>
    public void SyncGun()
    {
        Vector3 thumbTipPos  = thumbTip.transform.position;
        Vector3 indexTipPos  = indexTip.transform.position;
        Vector3 middleTipPos = middleTip.transform.position;
        Vector3 ringTipPos   = ringTip.transform.position;
        Vector3 pinkyTipPos  = pinkyTip.transform.position;

        Vector3 palmDirection = VectorFunc.Direction(pinkyTipPos, ringTipPos);
        float   palmDistance  = VectorFunc.Distance(pinkyTipPos, ringTipPos);

        Debug.Log("Distance between ring and pinky tip = " + palmDistance);
        gunPalmDirections.Add(palmDirection);
        gunPalmDistances.Add(palmDistance);

        float   avPalmDistance  = FloatAverage(gunPalmDistances);
        Vector3 avPalmDirection = Vector3Average(gunPalmDirections);

        gunPalm.transform.position = pinkyTipPos;
        gunPalm.transform.LookAt(avPalmDirection);
        gunPalm.transform.localScale = new Vector3(
            gunPalm.transform.localScale.x,
            gunPalm.transform.localScale.y,
            avPalmDistance * 2f
            );


        Vector3 pointDirection = VectorFunc.Direction(middleTipPos, indexTipPos);
        float   pointDistance  = VectorFunc.Distance(middleTipPos, indexTipPos);

        Debug.Log("Distance between middle and index tip = " + pointDistance);
        gunPointDirections.Add(pointDirection);
        gunPointDistances.Add(pointDistance);

        float   avPointDistance  = FloatAverage(gunPointDistances);
        Vector3 avPointDirection = Vector3Average(gunPointDirections);

        gunPoint.transform.position = middleTipPos;
        gunPoint.transform.LookAt(avPointDirection);
        gunPoint.transform.localScale = new Vector3(
            gunPoint.transform.localScale.x,
            gunPoint.transform.localScale.y,
            avPointDistance * 2f
            );


        Vector3 thumbDownPosition = thumbTipPos;

        thumbDownPositions.Add(thumbDownPosition);

        Vector3 avThumbDownPosition = Vector3Average(thumbDownPositions);

        gunThumbDown.transform.position   = avThumbDownPosition;
        gunThumbDown.transform.localScale = new Vector3(
            gunPoint.transform.localScale.x,
            gunPoint.transform.localScale.y,
            0.01f
            );
    }
        public void Add3DGraph(string name, Timeline.GetValue funcX, VectorFunc funcY, string xTitle, string yTitle)
        {
            GraphUnderlying graphU = new GraphUnderlying(xTitle, yTitle);

            graphU.AddTimeline(new Timeline("x " + name, funcX, (() => funcY().X), Colors.Red));
            graphU.AddTimeline(new Timeline("y " + name, funcX, (() => funcY().Y), Colors.Green));
            graphU.AddTimeline(new Timeline("z " + name, funcX, (() => funcY().Z), Colors.Blue));
            AddGraph(new Graph(graphU));
        }
예제 #4
0
    private void Charge()
    {
        GameObject a = AvatarRespawner.Instance.Avatar;

        if (a != null)
        {
            Debug.Log("Charging");
            moveScript.Move(VectorFunc.ConvertTo2DVec(a.transform.position - transform.position), moveSpeed);
        }
    }
예제 #5
0
 public string prevFunction()
 {
     resetSolutionCurve();
     current_func_index--;
     if (current_func_index < 0)
     {
         current_func_index = functions.Count - 1;
     }
     current_func = functions[current_func_index];
     generate();
     return(function_names[current_func_index]);
 }
예제 #6
0
    }//generate

    public string nextFunction()
    {
        resetSolutionCurve();
        current_func_index++;
        if (current_func_index >= functions.Count)
        {
            current_func_index = 0;
        }
        current_func = functions[current_func_index];
        generate();
        return(function_names[current_func_index]);
    }
 public void Move(Vector2 direction, float speed)
 {
     direction.Normalize();
     if (rb != null)
     {
         Vector2 currentPos = VectorFunc.ConvertTo2DVec(transform.position);
         Debug.DrawRay(currentPos, direction, Color.blue);
         Debug.Log((direction * speed * Time.deltaTime).magnitude);
         rb.position = (currentPos + direction * speed * Time.deltaTime);
     }
     else
     {
         transform.Translate(direction * speed * Time.deltaTime, Space.World);
     }
 }
        public void Add3DGraph(string name, BasicFunction funcX, VectorFunc funcY, string xAxis, string yAxis)
        {
            var xVec = new TimelineInfo(new TimelinePrototype("x " + name, Color.Red),
                                        new BasicFunctionPair(funcX, () => funcY().X));

            var yVec = new TimelineInfo(new TimelinePrototype("y " + name, Color.Green),
                                        new BasicFunctionPair(funcX, () => funcY().Y));

            var zVec = new TimelineInfo(new TimelinePrototype("z " + name, Color.Blue),
                                        new BasicFunctionPair(funcX, () => funcY().Z));

            AddGraph(new List <TimelineInfo> {
                xVec, yVec, zVec
            }, xAxis, yAxis);
        }
예제 #9
0
    private void Awake()
    {
        ps = GetComponent <ParticleSystem>();
        lr = GetComponent <LineRenderer>();
        //lr.positionCount = 20;

        timestamp = System.DateTime.Now.ToString("yyyyMMddHHmmss");

        functions = new List <VectorFunc>
        {
            spiral_up,
            hyperbolic,
            identity,
            fluid_flow,
        };
        function_names = new List <string>
        {
            "spiral_up",
            "hyperbolic",
            "identity",
            "fluid_flow",
        };
        function_descriptions = new List <string> {
            "<-y, x, 0.1>",
            "<yz, xz, xy>",
            "<x, y, z>",
            "<sin(x) + sin(y) + sin(z),\nsin(x) - sin(y) + sin(z),\nsin(x) + sin(y) - sin(z)>"
        };
        current_func_index = 0;

        start_pos_indicator.gameObject.SetActive(false);
        start_pos = Vector3.zero;

        n_vectors_x = (x_max - x_min) * resolution + 1;
        n_vectors_y = (y_max - y_min) * resolution + 1;
        n_vectors_z = (z_max - z_min) * resolution + 1;
        n_vectors   = n_vectors_x * n_vectors_y * n_vectors_z;

        Debug.Log("n_vectors: " + n_vectors);

        vectors = new ParticleSystem.Particle[n_vectors];

        current_func = functions[current_func_index];

        generate(); // set particles
        //StartCoroutine(draw_solution(new Vector3(1f, -1f, 0.8f)));
    }//Awake()
예제 #10
0
    //==============================UPDATE METHODS==================================

    void LazerMovement(GameObject lazer, Vector3 startPos, Vector3 endPos)
    {
        Vector3 direction = VectorFunc.Direction(startPos, endPos);
        float   distance  = VectorFunc.Distance(startPos, endPos);

        if (lazer != null)
        {
            lazer.transform.position = startPos;
            lazer.transform.LookAt(endPos);
            //Set the scale of the cyl. The x & y values remain the same but the z value is equal to the distance * initial z value.
            lazer.transform.localScale = new Vector3(
                lazer.transform.localScale.x,
                lazer.transform.localScale.y,
                distance * cylSZ
                );
        }
        else
        {
            Debug.Log("Lazer not found.");
        }
    }
예제 #11
0
    void ShootProjectile()
    {
        Vector3    direction;
        GameObject shotObj = Instantiate(shot);
        Rigidbody  rb      = shotObj.GetComponent <Rigidbody>();

        shotObj.GetComponent <ShotStats>().ShotDamage = 1;


        if (isRightSpawn)
        {
            shotObj.transform.position = shotSpawnR.transform.position;
        }
        else
        {
            shotObj.transform.position = shotSpawnL.transform.position;
        }

        direction = VectorFunc.Direction(shotObj.transform.position, player.transform.position);

        rb.velocity = 1100 * direction;

        isRightSpawn = !isRightSpawn;
    }
예제 #12
0
    /// <summary>
    /// This function gets the average direction and distance between the thumb tip and the index tip,
    /// then uses the averages to position the pinchBox collider.
    /// </summary>
    public void SyncPinch()
    {
        Vector3 thumbTipPos = thumbTip.transform.position - hand_base.transform.position;
        Vector3 indexTipPos = indexTip.transform.position - hand_base.transform.position;

        Vector3 direction = VectorFunc.Direction(thumbTipPos, indexTipPos);
        float   distance  = VectorFunc.Distance(thumbTipPos, indexTipPos);

        Debug.Log("Distance between thumb and index tip = " + distance);

        pinchDirections.Add(thumbTip.transform.InverseTransformDirection(direction));
        pinchDistances.Add(distance);

        float   avDistance  = FloatAverage(pinchDistances);
        Vector3 avDirection = Vector3Average(pinchDirections);


        pinchBox.transform.LookAt(thumbTip.transform.TransformDirection(avDirection));
        pinchBox.transform.localScale = new Vector3(
            pinchBox.transform.localScale.x,
            pinchBox.transform.localScale.y,
            avDistance * 2f
            );
    }
예제 #13
0
 private bool AvatarInRange()
 {
     return(AvatarRespawner.Instance.Avatar != null &&
            Vector2.Distance(VectorFunc.ConvertTo2DVec(AvatarRespawner.Instance.Avatar.transform.position), VectorFunc.ConvertTo2DVec(transform.position)) < aggroDistance);
 }