Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion Assets/Player/ChainLink.prefab

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

33 changes: 30 additions & 3 deletions Assets/Player/ChainManager.cs
Original file line number Diff line number Diff line change
@@ -1,22 +1,35 @@
using System;
using System.Collections;
using UnityEngine;

namespace Player {
public class ChainManager : MonoBehaviour {
[SerializeField] private GameObject _link;
[SerializeField] private int _length;
[SerializeField] private Vector3 _offset;
[SerializeField] private float _linkLength = 1;

[SerializeField] private Rigidbody _from;
[SerializeField] private Rigidbody _to;
[SerializeField] private Vector3[] _positions;
[SerializeField] private Quaternion[] _rotations;

private Rigidbody[] _links;

private void Awake() {
#if UNITY_EDITOR
if (_positions.Length < _length) {
_positions = new Vector3[_length];
}

if (_rotations.Length < _length) {
_rotations = new Quaternion[_length];
}
#endif

_links = new Rigidbody[_length];
var prev = Instantiate(_link);
prev.transform.position = _from.position;
prev.transform.position = _positions[0];
prev.transform.rotation = _rotations[0];
_links[0] = prev.GetComponent<Rigidbody>();

var joint = _to.GetComponent<Joint>();
Expand All @@ -30,7 +43,8 @@ private void Awake() {

for (var i = 1; i < _length; i++) {
var link = Instantiate(_link);
link.transform.position = _from.position + _offset * i;
link.transform.position = _positions[i];
link.transform.rotation = _rotations[i];
joint = prev.GetComponent<Joint>();
_links[i] = link.GetComponent<Rigidbody>();
joint.connectedBody = _links[i];
Expand All @@ -55,5 +69,18 @@ private void Awake() {
anchor.y = _linkLength;
joint.connectedAnchor = anchor;
}

#if UNITY_EDITOR
[ContextMenu("Store Chain Transform")]
private void StoreChainTransform() {
_positions = new Vector3[_length];
_rotations = new Quaternion[_length];
for (var i = 0; i < _length; i++) {
var link = _links[i].transform;
_positions[i] = link.position;
_rotations[i] = link.rotation;
}
}
#endif
}
}
8 changes: 8 additions & 0 deletions Assets/Player/PlayerController.cs
Original file line number Diff line number Diff line change
Expand Up @@ -206,6 +206,14 @@ private void HandleCommand(InputAction.CallbackContext context) {
if (Raycast(out var hit)) {
if (hit.transform.gameObject.layer == _config.GroundLayer) {
Navigate();
if (NavMesh.SamplePosition(
hit.point,
out var point,
100,
NavMesh.AllAreas
)) {
_target.transform.position = point.position;
}
} else if (hit.transform.TryGetComponent<Interactable>(
out var interactable
)) {
Expand Down
Loading