From 220b16ec3935f5ccb79755d0fda009e5172c2023 Mon Sep 17 00:00:00 2001 From: Andrew Lee Date: Mon, 24 May 2021 21:04:13 -0400 Subject: Inital commit --- Assets/Scripts/CineCamera.cs | 28 +++++++++ Assets/Scripts/CineCamera.cs.meta | 11 ++++ Assets/Scripts/Movement.cs | 51 +++++++++++++++ Assets/Scripts/Movement.cs.meta | 11 ++++ Assets/Scripts/PhysGun.cs | 126 ++++++++++++++++++++++++++++++++++++++ Assets/Scripts/PhysGun.cs.meta | 11 ++++ Assets/Scripts/Selector.cs | 29 +++++++++ Assets/Scripts/Selector.cs.meta | 11 ++++ 8 files changed, 278 insertions(+) create mode 100644 Assets/Scripts/CineCamera.cs create mode 100644 Assets/Scripts/CineCamera.cs.meta create mode 100644 Assets/Scripts/Movement.cs create mode 100644 Assets/Scripts/Movement.cs.meta create mode 100644 Assets/Scripts/PhysGun.cs create mode 100644 Assets/Scripts/PhysGun.cs.meta create mode 100644 Assets/Scripts/Selector.cs create mode 100644 Assets/Scripts/Selector.cs.meta (limited to 'Assets/Scripts') diff --git a/Assets/Scripts/CineCamera.cs b/Assets/Scripts/CineCamera.cs new file mode 100644 index 0000000..0a38fe3 --- /dev/null +++ b/Assets/Scripts/CineCamera.cs @@ -0,0 +1,28 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +public class CineCamera : MonoBehaviour +{ + // Start is called before the first frame update + void Start() + { + + } + + // Update is called once per frame + void Update() + { + //Spawns camera + if (Input.GetKeyDown(KeyCode.Mouse0)) + { + + } + + //Switches to camera view + if (Input.GetKeyDown(KeyCode.Delete)) + { + + } + } +} diff --git a/Assets/Scripts/CineCamera.cs.meta b/Assets/Scripts/CineCamera.cs.meta new file mode 100644 index 0000000..e836c96 --- /dev/null +++ b/Assets/Scripts/CineCamera.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 7718b950bcd0d2919b3e063a4d7afa73 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Movement.cs b/Assets/Scripts/Movement.cs new file mode 100644 index 0000000..43458d8 --- /dev/null +++ b/Assets/Scripts/Movement.cs @@ -0,0 +1,51 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +public class Movement : MonoBehaviour +{ + //Code taken from UMod + public float MoveSpeed = 4f; + public float MouseSensitivity = 1f; + public float MoreSpeed = 10f; + public bool yLock = false; + private float fastSpeed; + private bool sprint = false; + + // Start is called before the first frame update + void Start() + { + Cursor.lockState = CursorLockMode.Locked; + fastSpeed = MoveSpeed; + } + + // Update is called once per frame + void Update() + { + var mouseX = Input.GetAxisRaw("Mouse X"); + var mouseY = -Input.GetAxisRaw("Mouse Y"); + var rot = Camera.main.transform.eulerAngles; + var rotationVector = new Vector3(mouseY, mouseX, 0); + rot += rotationVector * MouseSensitivity; + Camera.main.transform.rotation = Quaternion.Euler(rot); + if (Input.GetKeyDown(KeyCode.LeftShift)) + { + fastSpeed = MoveSpeed + MoreSpeed; + } + + if (Input.GetKeyUp(KeyCode.LeftShift)) + { + fastSpeed = MoveSpeed; + } + var sideMove = Input.GetAxisRaw("Horizontal"); + var forwardMove = Input.GetAxisRaw("Vertical"); + var moveVector = new Vector3(sideMove, 0, forwardMove) * fastSpeed; + moveVector = Camera.main.transform.TransformDirection(moveVector); + if (yLock == true) + { + moveVector.y = 0; + } + + transform.Translate(moveVector * Time.deltaTime); + } +} diff --git a/Assets/Scripts/Movement.cs.meta b/Assets/Scripts/Movement.cs.meta new file mode 100644 index 0000000..2c361bd --- /dev/null +++ b/Assets/Scripts/Movement.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 744b5e672e53193a5aef94319457c48b +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/PhysGun.cs b/Assets/Scripts/PhysGun.cs new file mode 100644 index 0000000..5a00a1a --- /dev/null +++ b/Assets/Scripts/PhysGun.cs @@ -0,0 +1,126 @@ +using UnityEngine; +//Code is taken from UMod +public class PhysGun : MonoBehaviour +{ + [SerializeField] + private float _maxGrabDistance = 40f; + [SerializeField] + private float _minGrabDistance = 1f; + [SerializeField] + private LineRenderer _pickLine; + [SerializeField] + private Transform _barrelPoint; + + private Rigidbody _grabbedObject; + private float _pickDistance; + private Vector3 _pickOffset; + private Vector3 _pickTargetPosition; + private Vector3 _pickForce; + + private void Start() + { + if (!_barrelPoint) + { + _barrelPoint = transform; + } + if (!_pickLine) + { + var obj = new GameObject("PhysGun Pick Line"); + _pickLine = obj.AddComponent(); + _pickLine.startWidth = 0.02f; + _pickLine.endWidth = 0.02f; + _pickLine.useWorldSpace = true; + _pickLine.gameObject.SetActive(false); + } + } + + void Update() + { + if (Input.GetKeyDown(KeyCode.Mouse0)) + { + Grab(); + } + + if (Input.GetKeyUp(KeyCode.Mouse0)) + { + if (_grabbedObject) + { + Release(); + } + } + + if (Input.GetKeyDown(KeyCode.Mouse1)) + { + if (_grabbedObject) + { + Release(true); + } + } + + _pickDistance = Mathf.Clamp(_pickDistance + Input.mouseScrollDelta.y, _minGrabDistance, _maxGrabDistance); + } + + private void LateUpdate() + { + if (_grabbedObject) + { + var midpoint = (transform.position + _pickTargetPosition) / 2f; + midpoint += Vector3.ClampMagnitude(_pickForce / 2f, 1f); + DrawQuadraticBezierCurve(_pickLine, _barrelPoint.position, midpoint, _grabbedObject.worldCenterOfMass - _pickOffset); + } + } + + private void FixedUpdate() + { + if (_grabbedObject != null) + { + var ray = Camera.main.ViewportPointToRay(Vector3.one * .5f); + _pickTargetPosition = (ray.origin + ray.direction * _pickDistance) + _pickOffset; + var forceDir = _pickTargetPosition - _grabbedObject.position; + _pickForce = forceDir / Time.fixedDeltaTime * 0.3f / _grabbedObject.mass; + _grabbedObject.velocity = _pickForce; + } + } + + private void Grab() + { + var ray = Camera.main.ViewportPointToRay(Vector3.one * .5f); + if(Physics.Raycast(ray, out RaycastHit hit, _maxGrabDistance) + && hit.rigidbody != null) + { + _pickOffset = hit.rigidbody.worldCenterOfMass - hit.point; + _pickDistance = hit.distance; + _grabbedObject = hit.rigidbody; + _grabbedObject.collisionDetectionMode = CollisionDetectionMode.Continuous; + _grabbedObject.useGravity = false; + _grabbedObject.freezeRotation = true; + _grabbedObject.isKinematic = false; + _pickLine.gameObject.SetActive(true); + } + } + + private void Release(bool setKinematic = false) + { + _grabbedObject.collisionDetectionMode = CollisionDetectionMode.Discrete; + _grabbedObject.useGravity = true; + _grabbedObject.freezeRotation = false; + _grabbedObject.isKinematic = setKinematic; + _grabbedObject = null; + _pickLine.gameObject.SetActive(false); + } + + // https://www.codinblack.com/how-to-draw-lines-circles-or-anything-else-using-linerenderer/ + void DrawQuadraticBezierCurve(LineRenderer line, Vector3 point0, Vector3 point1, Vector3 point2) + { + line.positionCount = 10; + float t = 0f; + Vector3 B = new Vector3(0, 0, 0); + for (int i = 0; i < line.positionCount; i++) + { + B = (1 - t) * (1 - t) * point0 + 2 * (1 - t) * t * point1 + t * t * point2; + line.SetPosition(i, B); + t += (1 / (float)line.positionCount); + } + } + +} diff --git a/Assets/Scripts/PhysGun.cs.meta b/Assets/Scripts/PhysGun.cs.meta new file mode 100644 index 0000000..b1cb9b9 --- /dev/null +++ b/Assets/Scripts/PhysGun.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: b42fff37c3b725baa9ddfb47a9c2cd91 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Selector.cs b/Assets/Scripts/Selector.cs new file mode 100644 index 0000000..e59d3ea --- /dev/null +++ b/Assets/Scripts/Selector.cs @@ -0,0 +1,29 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +public class Selector : MonoBehaviour +{ + public GameObject physGun; + + private bool oneSelected = false; + // Update is called once per frame + void Update() + { + if (Input.GetKeyDown(KeyCode.Alpha1)) + { + if (oneSelected == false) + { + physGun.SetActive(true); + oneSelected = true; + Debug.Log("PhysGun selected"); + } + else + { + physGun.SetActive(false); + oneSelected = false; + Debug.Log("PhysGun deselected"); + } + } + } +} diff --git a/Assets/Scripts/Selector.cs.meta b/Assets/Scripts/Selector.cs.meta new file mode 100644 index 0000000..f87d88a --- /dev/null +++ b/Assets/Scripts/Selector.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: ccbfba6c2492fb763a9ff2f97a620ca7 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: -- cgit v1.2.3