public void snappingNow() { RopeEnd b = ropeEndClone.gameObject.GetComponent <RopeEnd>(); Vector3 startPos = ropeStartClone.gameObject.transform.position; Vector3 endPos = ropeEndClone.gameObject.transform.position + (b._velocity * b.Speed) * Time.deltaTime; for (int j = 0; j < pythaTheo(startPos.x, startPos.y, endPos.x, endPos.y) / 5; j++) { var mid = (GameObject)GameObject.Instantiate(ropeSnapParticle); mid.transform.position = LerpByDistance(startPos, endPos, j * 5); mid.transform.rotation = Quaternion.Euler(0.0f, 0.0f, 360 - Vector3.Angle(startPos, endPos)); mid.gameObject.GetComponent <RopeSnap>().moveX = (startPos.x - mid.transform.position.x) / 50; mid.gameObject.GetComponent <RopeSnap>().moveY = (startPos.y - mid.transform.position.y) / 50; //mid.gameObject.transform.position += (a._velocity * a.Speed) * Time.deltaTime; } for (int j = 0; j < pythaTheo(startPos.x, startPos.y, endPos.x, endPos.y) / 5; j++) { var mid = (GameObject)GameObject.Instantiate(ropeSnapParticle); mid.transform.position = LerpByDistance(startPos, endPos, j * 5); mid.transform.rotation = Quaternion.Euler(0.0f, 0.0f, 360 - Vector3.Angle(startPos, endPos)); mid.gameObject.GetComponent <RopeSnap>().moveX = (startPos.x - endPos.x) / 50; mid.gameObject.GetComponent <RopeSnap>().moveY = (startPos.y - endPos.y) / 50; //mid.gameObject.transform.position += (a._velocity * a.Speed) * Time.deltaTime; } }
// Start is called before the first frame update void Start() { ProjectilePosition = GameObject.Find("ReloadPosition").GetComponent <Transform>(); RopeEnd = GameObject.Find("Seg6"); RopeEndJoint = RopeEnd.GetComponent <FixedJoint2D>(); gameControllerScript = GameObject.Find("GameControllerScript").GetComponent <GameControllerScript>(); launched = true; coroutineTrigger = true; ejected = false; FlyingSound = GetComponent <AudioSource>(); }
void Update() { rigidbody.maxAngularVelocity = MaxAngl; //if (Input.GetKey(KeyCode.D)) // this.rigidbody.AddRelativeTorque(-Vector3.forward * torq); //if (Input.GetKey(KeyCode.A)) // this.rigidbody.AddRelativeTorque(Vector3.forward * torq); if (Input.GetMouseButtonDown(0)) { RaycastHit h; if (Physics.Raycast(Camera.main.ScreenPointToRay(Input.mousePosition), out h, 1 << LayerMask.NameToLayer("Level"))) { Vector3 nearest = Vector3.zero; foreach (var a in _Game.Path.nodes) { foreach (var b in a.Nodes) { var p = a.pos + Vector3.Project(h.point - a.pos, (b.pos - a.pos).normalized); if (Vector3.Distance(p, h.point) < Vector3.Distance(nearest, h.point)) { nearest = p; } } } print("hit:" + nearest); Debug.DrawLine(pos, nearest, Color.blue, 2); rope = ((GameObject)Instantiate(ropePrefab, pos, Quaternion.identity)).GetComponentInChildren <RopeEnd>(); rope.rigidbody.AddForce((nearest - pos).normalized * ropeThrowForce); rope.cloth.stretchingStiffness = ropeThrowStiffness; rope.stiffness = ropeEndStiffness; rope.col = ropeCollider; rope.cloth.AttachToCollider(ropeCollider, false, false); _Game.obsToRotate.Add(rope.parent); } { _Game.obsToRotate.Remove(rope.parent); } if (Input.GetMouseButtonUp(0) && rope != null) { Destroy(rope.parent.gameObject); } } }
void EjectReload() { if (launched == true) { Projectile = Instantiate(ProjectilePrefab, ProjectilePosition.position, ProjectilePosition.rotation); RopeEndJoint.enabled = true; RopeEnd.GetComponent <FixedJoint2D>().connectedBody = Projectile.GetComponent <Rigidbody2D>(); ejected = false; launched = false; coroutineTrigger = true; } else { if (Input.GetKeyDown(KeyCode.Space)) { RopeEndJoint.enabled = false; if (ejected == false) { if (Projectile.GetComponent <Rigidbody2D>().velocity.x > 0) { Projectile.GetComponent <Rigidbody2D>().AddForce(transform.right * (Projectile.GetComponent <Rigidbody2D>().velocity.x * 20)); } if (Projectile.GetComponent <Rigidbody2D>().velocity.y > 0) { Projectile.GetComponent <Rigidbody2D>().AddForce(transform.up * (Projectile.GetComponent <Rigidbody2D>().velocity.y * 20)); } ejected = true; FlyingSound.Play(); } if (coroutineTrigger == true) { StartCoroutine(AutoReload()); } } } }
void Update() { rigidbody.maxAngularVelocity = MaxAngl; //if (Input.GetKey(KeyCode.D)) // this.rigidbody.AddRelativeTorque(-Vector3.forward * torq); //if (Input.GetKey(KeyCode.A)) // this.rigidbody.AddRelativeTorque(Vector3.forward * torq); if (Input.GetMouseButtonDown(0)) { RaycastHit h; if (Physics.Raycast(Camera.main.ScreenPointToRay(Input.mousePosition), out h, 1 << LayerMask.NameToLayer("Level"))) { Vector3 nearest = Vector3.zero; foreach(var a in _Game.Path.nodes) foreach (var b in a.Nodes) { var p = a.pos + Vector3.Project(h.point - a.pos, (b.pos - a.pos).normalized); if (Vector3.Distance(p, h.point) < Vector3.Distance(nearest, h.point)) nearest = p; } print("hit:"+nearest); Debug.DrawLine(pos, nearest, Color.blue, 2); rope = ((GameObject)Instantiate(ropePrefab, pos, Quaternion.identity)).GetComponentInChildren<RopeEnd>(); rope.rigidbody.AddForce((nearest - pos).normalized * ropeThrowForce); rope.cloth.stretchingStiffness = ropeThrowStiffness; rope.stiffness = ropeEndStiffness; rope.col = ropeCollider; rope.cloth.AttachToCollider(ropeCollider, false, false); _Game.obsToRotate.Add(rope.parent); } { _Game.obsToRotate.Remove(rope.parent); } if (Input.GetMouseButtonUp(0) && rope != null) Destroy(rope.parent.gameObject); } }
void checkRay() { ropeStartClone.gameObject.transform.position = currentPlayer.transform.FindChild("_ropeSpawn").position; //Stop Velocity of End Rope after it reach the end of the length RopeEnd a = ropeEndClone.gameObject.GetComponent <RopeEnd>(); Vector3 startPos = ropeStartClone.gameObject.transform.position; Vector3 endPos = ropeEndClone.gameObject.transform.position + (a._velocity * a.Speed) * Time.deltaTime; if (ropeMidCloneArray.Count > 0) { for (int i = ropeMidCloneArray.Count; i > 0; i--) { Destroy(ropeMidCloneArray[i - 1]); ropeMidCloneArray.RemoveAt(i - 1); } } if (pythaTheo(startPos.x, startPos.y, endPos.x, endPos.y) >= snapPoint && canBreak) { for (int j = 0; j < pythaTheo(startPos.x, startPos.y, endPos.x, endPos.y) / 10; j++) { var mid = (GameObject)GameObject.Instantiate(ropeMidObjectH); mid.transform.position = LerpByDistance(startPos, endPos, j * 10); mid.transform.rotation = Quaternion.Euler(0.0f, 0.0f, 360 - Vector3.Angle(startPos, endPos)); ropeMidCloneArray.Add(mid); } } else if (pythaTheo(startPos.x, startPos.y, endPos.x, endPos.y) >= ropeRange) { for (int j = 0; j < pythaTheo(startPos.x, startPos.y, endPos.x, endPos.y) / 10; j++) { var mid = (GameObject)GameObject.Instantiate(ropeMidObjectM); mid.transform.position = LerpByDistance(startPos, endPos, j * 10); mid.transform.rotation = Quaternion.Euler(0.0f, 0.0f, 360 - Vector3.Angle(startPos, endPos)); ropeMidCloneArray.Add(mid); } } else { for (int j = 0; j < pythaTheo(startPos.x, startPos.y, endPos.x, endPos.y) / 10; j++) { var mid = (GameObject)GameObject.Instantiate(ropeMidObject); mid.transform.position = LerpByDistance(startPos, endPos, j * 10); mid.transform.rotation = Quaternion.Euler(0.0f, 0.0f, 360 - Vector3.Angle(startPos, endPos)); ropeMidCloneArray.Add(mid); } } if (pythaTheo(startPos.x, startPos.y, endPos.x, endPos.y) >= snapPointX && canBreak) { snapTheRope(); } Debug.DrawLine(startPos, endPos, Color.red); //Debug.Log (pythaTheo(startPos.x, startPos.y, endPos.x, endPos.y)); if (ropeRange < pythaTheo(startPos.x, startPos.y, endPos.x, endPos.y) && !maxLengthReached) { Debug.Log("End of Rope"); a.SendMessage("SetVelocity", new Vector3(0, 0, 0)); maxLengthReached = true; if (!a.hitObject) { destroyTheRope(); } } }