// 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; } } } }
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); }
// 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; }
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; } }