Example #1
0
    // Update is called once per frame
    void Update()
    {
        RaycastHit?hitInfo;

        if (inWorm)
        {
            transform.localRotation = localRotationOnWormHit;
            hitInfo = PlanetObj.GetEpicenter(transform.position);
            if (hitInfo.HasValue)
            {
                if ((transform.position - PlanetObj.position).magnitude <
                    (hitInfo.Value.point - PlanetObj.position).magnitude - transform.lossyScale.x * 20)
                {
                    var v = -Time.deltaTime / 100f;
                    if (transform.localScale.z + v <= 0.01f)
                    {
                        Destroy(this.gameObject);
                    }
                    else
                    {
                        transform.localScale += new Vector3(0, 0, v);
                    }
                }
            }
        }
        else
        {
            var diff = transform.position - PlanetObj.position;
            GetComponent <Rigidbody>().velocity += diff.normalized * -gravityValue;
            if (inGround)
            {
                dieTimer -= Time.deltaTime;
                if (dieTimer <= 0)
                {
                    Destroy(this.gameObject);
                }
                else
                {
                    var mrm = transform.FindChild("default").GetComponent <MeshRenderer>().material;
                    mrm.color = new Color(mrm.color.r, mrm.color.g, mrm.color.b, Mathf.Min(dieTimer * 3 / dieTimerMax, 1));
                }
            }
            else
            {
                transform.LookAt(transform.position + GetComponent <Rigidbody>().velocity);
            }

            hitInfo = PlanetObj.GetEpicenter(transform.position);
            if (hitInfo.HasValue)
            {
                var epicenter = hitInfo.Value.point;

                if (diff.magnitude < (epicenter - PlanetObj.position).magnitude)
                {
                    GetComponent <Rigidbody>().velocity = Vector3.zero;
                    inGround = true;
                }
            }
        }
    }
Example #2
0
    void UpdateSpeed()
    {
        if (ragdoll)
        {
            ySpeed -= gravityValue;
            if (or.underground)
            {
                ySpeed = Mathf.Abs(ySpeed) * 0.25f;
                if (ySpeed < 1)
                {
                    rb_e.transform.SetParent(transform);
                    Destroy(this.gameObject); //Destroy self if we are underground after being hit
                }
            }
            var epicenter_e = PlanetObj.GetEpicenter(rb_e.transform.position);
            if (epicenter_e.HasValue && (rb_e.transform.position - PlanetObj.position).sqrMagnitude <= (epicenter_e.Value.point - PlanetObj.position).sqrMagnitude)
            {
                var proj     = Vector3.Project(rb_e.velocity, or.up);
                var dot      = Vector3.Dot(proj, or.up); //This will be positive if the projection is in the same general direction as the up vector
                var ySpeed_e = proj.magnitude;
                if (dot > 0)
                {
                }
                else
                {
                    rb_e.velocity -= 1.25f * ySpeed_e * or.up; //Invert ySpeed of e
                    if (ySpeed_e < 1)
                    {
                        rb_e.transform.SetParent(transform);
                        Destroy(this.gameObject);
                    }
                }
            }
            rb.velocity   += ySpeed * or.up;
            rb_e.velocity += -gravityValue * or.up;
        }
        else
        {
            groundSpeed = groundSpeedNormal;
            var t = transform.position;
            var s = target ? target.transform.position : PlanetObj.player.transform.position;
            var d = (s - t - Vector3.Project(s - t, t - PlanetObj.position)).normalized;


            if (or.depth > -0.3f * transform.lossyScale.y)
            {
                ySpeed = hopSpeedY;
            }
            else
            {
                ySpeed -= gravityValue;
            }
            rb.velocity = ySpeed * or.up + new Vector3(groundSpeed * d.x, groundSpeed * d.y, groundSpeed * d.z);
        }

        //Debug.DrawRay(epicenter.Value, rb.velocity, Color.black);
    }
Example #3
0
 // Use this for initialization
 void Start()
 {
     transform.localScale *= (Random.value * 0.5f + 0.75f);
     distanceDown         *= transform.localScale.x;
     leaves            = new List <Transform>();
     leavesOffsetStart = new List <Vector3>();
     leavesOffset      = new List <Vector3>();
     foreach (Transform t in transform)
     {
         if (t.name.Contains("Leaves"))
         {
             leaves.Add(t);
             leavesOffsetStart.Add(t.localPosition);
             leavesOffset.Add(Vector3.zero);
         }
     }
     epicenter          = PlanetObj.GetEpicenter(transform.position).Value;
     transform.position = epicenter.point;
 }
Example #4
0
    public void Update()
    {
        var rb   = o.GetComponent <Rigidbody>();
        var diff = o.transform.position - PlanetObj.position;

        dCenter = diff.magnitude;
        up      = diff.normalized;
        facing  = rb.velocity.sqrMagnitude == 0 ? Vector3.forward : rb.velocity.normalized;
        forward = (facing - Vector3.Project(facing, up)).normalized;
        right   = Vector3.Cross(up, facing);
        quatUp  = Quaternion.LookRotation(forward, normalIsUp ? normal.Value : up);

        RaycastHit?hitInfo = PlanetObj.GetEpicenter(o.transform.position);

        if (hitInfo != null)
        {
            epicenter  = hitInfo.Value.point;
            normal     = hitInfo.Value.normal;
            dEpicenter = (epicenter.Value - PlanetObj.position).magnitude;
        }
    }