Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using UnityEngine;
- using System.Collections;
- public class p_grapple : MonoBehaviour {
- [SerializeField]
- private LayerMask layerMask;
- private Transform _transform;
- private Rigidbody _body;
- public Rigidbody hookBody;
- private float defaultAngularDrag;
- public GameObject hookPoint;
- public ConfigurableJoint conjoint;
- [SerializeField]
- private float range;
- private float distance, hookAngle;
- private p_movements pmove;
- private float oldroll;
- public float shootdelay;
- private float nextshoot;
- public float frictionNormal, frictionHooked, bounceNormal, bounceHooked, swingRoll;
- private RaycastHit hit;
- public LineRenderer rope;
- public Renderer inRange, outRange;
- [HideInInspector]
- public bool canHit, canHook = true, isHooked;
- public AudioSource audio_hook;
- void Start() {
- _transform = GetComponent<Transform>();
- _body = GetComponent<Rigidbody>();
- pmove = GetComponent<p_movements>();
- defaultAngularDrag = _body.angularDrag;
- nextshoot = 0;
- pmove.pmat.dynamicFriction = frictionNormal;
- pmove.pmat.staticFriction = frictionNormal;
- pmove.pmat.bounciness = bounceNormal;
- oldroll = pmove.m_RollPower;
- canHook = true;
- }
- void Update () {
- Ray ray = new Ray(Camera.main.transform.position, Camera.main.transform.forward);
- if (Physics.Raycast(ray, out hit, 100f, layerMask.value) && hit.transform.gameObject.layer != 11)
- distance = hit.distance; //old = Vector3.Distance(_transform.position, hit.point);
- else
- distance = 100.0f;
- hookAngle = Vector3.Angle(Camera.main.transform.forward, (hit.point - _transform.position));
- if (distance > range || hookAngle > 100) {
- outRange.enabled = true;
- inRange.enabled = false;
- canHit = false;
- } else if (distance <= range && hookAngle <= 100) {
- outRange.enabled = false;
- inRange.enabled = true;
- canHit = true;
- }
- if (Input.GetButton("Hook") && !Input.GetButton("Jump") && !Input.GetButton("Dash")
- && Time.timeScale > 0 && canHit && canHook && !hookPoint.gameObject.activeInHierarchy) {
- audio_hook.Play();
- hookPoint.transform.position = hit.point;
- hookPoint.gameObject.SetActive(true);
- if (hit.rigidbody != null && !hit.rigidbody.isKinematic)
- conjoint.connectedBody = hit.rigidbody;
- _body.angularDrag = 0;
- pmove.pmat.bounciness = bounceHooked;
- pmove.m_RollPower *= swingRoll;
- pmove.pmat.dynamicFriction = frictionHooked;
- pmove.pmat.staticFriction = frictionHooked;
- nextshoot = Time.time + shootdelay;
- isHooked = true;
- canHook = false;
- }
- if (Input.GetButtonUp("Hook")) {
- Invoke("UnGrapple", 0);
- canHook = true;
- }
- if (hookPoint.activeInHierarchy) {
- rope.SetPosition(0, hookPoint.transform.position);
- rope.SetPosition(1, _transform.position);
- }
- }
- void UnGrapple() {
- hookBody.angularVelocity = Vector3.zero;
- hookPoint.gameObject.SetActive(false);
- _body.angularDrag = defaultAngularDrag;
- pmove.m_RollPower = oldroll;
- pmove.pmat.bounciness = bounceNormal;
- pmove.pmat.dynamicFriction = frictionNormal;
- pmove.pmat.staticFriction = frictionNormal;
- if (conjoint.connectedBody != null) conjoint.connectedBody = null;
- isHooked = false;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement