Rope shrink extend done
This commit is contained in:
parent
cd20189a2c
commit
e971b101b4
|
@ -0,0 +1,36 @@
|
||||||
|
%YAML 1.1
|
||||||
|
%TAG !u! tag:unity3d.com,2011:
|
||||||
|
--- !u!114 &11400000
|
||||||
|
MonoBehaviour:
|
||||||
|
m_ObjectHideFlags: 0
|
||||||
|
m_CorrespondingSourceObject: {fileID: 0}
|
||||||
|
m_PrefabInstance: {fileID: 0}
|
||||||
|
m_PrefabAsset: {fileID: 0}
|
||||||
|
m_GameObject: {fileID: 0}
|
||||||
|
m_Enabled: 1
|
||||||
|
m_EditorHideFlags: 0
|
||||||
|
m_Script: {fileID: 11500000, guid: c46f07b5ed07e4e92aa78254188d3d10, type: 3}
|
||||||
|
m_Name: InputSystem.inputsettings
|
||||||
|
m_EditorClassIdentifier:
|
||||||
|
m_SupportedDevices: []
|
||||||
|
m_UpdateMode: 1
|
||||||
|
m_MaxEventBytesPerUpdate: 5242880
|
||||||
|
m_MaxQueuedEventsPerUpdate: 1000
|
||||||
|
m_CompensateForScreenOrientation: 1
|
||||||
|
m_BackgroundBehavior: 0
|
||||||
|
m_EditorInputBehaviorInPlayMode: 0
|
||||||
|
m_DefaultDeadzoneMin: 0.125
|
||||||
|
m_DefaultDeadzoneMax: 0.925
|
||||||
|
m_DefaultButtonPressPoint: 0.5
|
||||||
|
m_ButtonReleaseThreshold: 0.75
|
||||||
|
m_DefaultTapTime: 0.2
|
||||||
|
m_DefaultSlowTapTime: 0.5
|
||||||
|
m_DefaultHoldTime: 0.4
|
||||||
|
m_TapRadius: 5
|
||||||
|
m_MultiTapDelayTime: 0.75
|
||||||
|
m_DisableRedundantEventsMerging: 0
|
||||||
|
m_ShortcutKeysConsumeInputs: 0
|
||||||
|
m_iOSSettings:
|
||||||
|
m_MotionUsage:
|
||||||
|
m_Enabled: 0
|
||||||
|
m_Description:
|
|
@ -0,0 +1,8 @@
|
||||||
|
fileFormatVersion: 2
|
||||||
|
guid: de04e34f85a966e4da851d9b3d804fa1
|
||||||
|
NativeFormatImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
mainObjectFileID: 11400000
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
|
@ -2072,7 +2072,7 @@ MonoBehaviour:
|
||||||
end: {fileID: 1259212308}
|
end: {fileID: 1259212308}
|
||||||
subDivision: 50
|
subDivision: 50
|
||||||
collisionCheckDist: 0.1
|
collisionCheckDist: 0.1
|
||||||
distBetweenRopePoints: 0.3
|
distBetweenRopePoints: 0.35
|
||||||
ropeRadius: 0.171
|
ropeRadius: 0.171
|
||||||
ignoreResolveThreshold: 0
|
ignoreResolveThreshold: 0
|
||||||
ropeCollidersParent: {fileID: 1647138193}
|
ropeCollidersParent: {fileID: 1647138193}
|
||||||
|
@ -2081,9 +2081,10 @@ MonoBehaviour:
|
||||||
m_Bits: 1
|
m_Bits: 1
|
||||||
pullForce: 65
|
pullForce: 65
|
||||||
xyGravityDampScalor: 1
|
xyGravityDampScalor: 1
|
||||||
ropeExtendSpeed: 15
|
ropeExtendSpeed: 10
|
||||||
ropeShrinkSpeed: 15
|
ropeShrinkSpeed: 15
|
||||||
ropeMaxLength: 0
|
ropeMaxLength: 50
|
||||||
|
ropeMinLength: 20
|
||||||
lineRenderer: {fileID: 1647138191}
|
lineRenderer: {fileID: 1647138191}
|
||||||
--- !u!4 &1647138193
|
--- !u!4 &1647138193
|
||||||
Transform:
|
Transform:
|
||||||
|
|
|
@ -19,7 +19,7 @@ public class PlayerInput : MonoBehaviour
|
||||||
|
|
||||||
public int PlayerNum => playerNumber;
|
public int PlayerNum => playerNumber;
|
||||||
|
|
||||||
private void Awake()
|
private void Start()
|
||||||
{
|
{
|
||||||
controller = Gamepad.all.ElementAtOrDefault(playerNumber);
|
controller = Gamepad.all.ElementAtOrDefault(playerNumber);
|
||||||
if (controller == null)
|
if (controller == null)
|
||||||
|
|
|
@ -17,6 +17,7 @@ public class Rope
|
||||||
float sum = 0f;
|
float sum = 0f;
|
||||||
foreach (Stick stick in sticks)
|
foreach (Stick stick in sticks)
|
||||||
{
|
{
|
||||||
|
Debug.DrawRay(stick.B.position, (stick.A.position - stick.B.position).normalized * stick.desiredLength);
|
||||||
float dist = Vector3.Distance(stick.A.position, stick.B.position);
|
float dist = Vector3.Distance(stick.A.position, stick.B.position);
|
||||||
sum += dist - stick.desiredLength;
|
sum += dist - stick.desiredLength;
|
||||||
}
|
}
|
||||||
|
|
|
@ -94,48 +94,57 @@ public class RopeSimulator : MonoBehaviour
|
||||||
if (subDivision < ropeMinLength)
|
if (subDivision < ropeMinLength)
|
||||||
subDivision = ropeMinLength;
|
subDivision = ropeMinLength;
|
||||||
|
|
||||||
if (prevSubDivision - (int)subDivision > 0) return;
|
if (prevSubDivision - (int)subDivision <= 0) return;
|
||||||
|
|
||||||
// Shrink from start
|
// Shrink from start
|
||||||
if (playerNumber == start.playerInput.PlayerNum)
|
rope.sticks.Clear();
|
||||||
|
rope.points.RemoveAt(1);
|
||||||
|
|
||||||
|
var builder = new RopeBuilder(rope.points, rope.sticks);
|
||||||
|
|
||||||
|
// Re-gen sticks
|
||||||
|
for (int i = 0; i < (int) subDivision; i++)
|
||||||
{
|
{
|
||||||
rope.sticks.Clear();
|
builder.ConnectPointsWithDesiredLength(i, i + 1, distBetweenRopePoints);
|
||||||
rope.points.RemoveAt(0);
|
|
||||||
|
|
||||||
var builder = new RopeBuilder(rope.points, new List<Stick>());
|
|
||||||
|
|
||||||
// Re-gen sticks
|
|
||||||
for (int i = 0; i < (int) subDivision; i++)
|
|
||||||
{
|
|
||||||
builder.ConnectPoints(i, i + 1);
|
|
||||||
}
|
|
||||||
rope = builder.Build();
|
|
||||||
}
|
}
|
||||||
// Shrink from end
|
rope = builder.Build();
|
||||||
else if (playerNumber == end.playerInput.PlayerNum)
|
|
||||||
{
|
|
||||||
rope.points.RemoveAt(rope.points.Count - 2);
|
|
||||||
rope.sticks.Clear();
|
|
||||||
|
|
||||||
var builder = new RopeBuilder(rope.points, new List<Stick>());
|
RebuildRopeColliders();
|
||||||
|
|
||||||
// Re-gen sticks
|
|
||||||
for (int i = 0; i < (int)subDivision; i++)
|
|
||||||
{
|
|
||||||
builder.ConnectPoints(i, i + 1);
|
|
||||||
}
|
|
||||||
rope = builder.Build();
|
|
||||||
}
|
|
||||||
CreateOrderArray();
|
CreateOrderArray();
|
||||||
}
|
}
|
||||||
|
|
||||||
void ExtendRope(int playerNumber)
|
void ExtendRope(int playerNumber)
|
||||||
{
|
{
|
||||||
|
int prevSubDivision = (int)subDivision;
|
||||||
subDivision += ropeExtendSpeed * Time.deltaTime;
|
subDivision += ropeExtendSpeed * Time.deltaTime;
|
||||||
if (subDivision > ropeMaxLength)
|
if (subDivision > ropeMaxLength)
|
||||||
subDivision = ropeMaxLength;
|
subDivision = ropeMaxLength;
|
||||||
|
|
||||||
Rebuild();
|
if (prevSubDivision - (int) subDivision >= 0) return;
|
||||||
|
|
||||||
|
// Extend from start
|
||||||
|
rope.points.Insert(1, new Point(rope.points[1].position));
|
||||||
|
rope.sticks.Clear();
|
||||||
|
|
||||||
|
// Ripple existing rope points
|
||||||
|
//for (int i = 2; i < (int) subDivision; i++)
|
||||||
|
//{
|
||||||
|
// rope.points[i].position = rope.points[i + 1].position;
|
||||||
|
//}
|
||||||
|
|
||||||
|
var builder = new RopeBuilder(rope.points, rope.sticks);
|
||||||
|
|
||||||
|
// Re-gen sticks
|
||||||
|
for (int i = 0; i < (int)subDivision; i++)
|
||||||
|
{
|
||||||
|
//Debug.Log($"Reg-gen stick. from: {i} to {i + 1}, with dist: {distBetweenRopePoints}");
|
||||||
|
builder.ConnectPointsWithDesiredLength(i, i + 1, distBetweenRopePoints);
|
||||||
|
}
|
||||||
|
rope = builder.Build();
|
||||||
|
|
||||||
|
RebuildRopeColliders();
|
||||||
|
CreateOrderArray();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void OnDestroy()
|
private void OnDestroy()
|
||||||
|
@ -150,7 +159,6 @@ public class RopeSimulator : MonoBehaviour
|
||||||
private void Rebuild()
|
private void Rebuild()
|
||||||
{
|
{
|
||||||
Debug.Log("rebuild");
|
Debug.Log("rebuild");
|
||||||
ropeCollidersParent.DestroyChildren();
|
|
||||||
|
|
||||||
RopeBuilder builder = new RopeBuilder();
|
RopeBuilder builder = new RopeBuilder();
|
||||||
builder.AddPoint(new Point(start.position, locked: true));
|
builder.AddPoint(new Point(start.position, locked: true));
|
||||||
|
@ -171,6 +179,14 @@ public class RopeSimulator : MonoBehaviour
|
||||||
}
|
}
|
||||||
rope = builder.Build();
|
rope = builder.Build();
|
||||||
|
|
||||||
|
RebuildRopeColliders();
|
||||||
|
|
||||||
|
CreateOrderArray();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void RebuildRopeColliders()
|
||||||
|
{
|
||||||
|
ropeCollidersParent.DestroyChildren();
|
||||||
foreach (var point in rope.points)
|
foreach (var point in rope.points)
|
||||||
{
|
{
|
||||||
GameObject ropeCollider = new GameObject("Rope Collider");
|
GameObject ropeCollider = new GameObject("Rope Collider");
|
||||||
|
@ -184,12 +200,13 @@ public class RopeSimulator : MonoBehaviour
|
||||||
var rigidBody = ropeCollider.AddComponent<Rigidbody2D>();
|
var rigidBody = ropeCollider.AddComponent<Rigidbody2D>();
|
||||||
rigidBody.isKinematic = true;
|
rigidBody.isKinematic = true;
|
||||||
}
|
}
|
||||||
CreateOrderArray();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void Update()
|
private void Update()
|
||||||
{
|
{
|
||||||
ShrinkenRope(1);
|
//Debug.Log($"overshoot: {rope.CalculateLengthOvershoot()}");
|
||||||
|
//ShrinkenRope(1);
|
||||||
|
//ExtendRope(0);
|
||||||
colliderToSquezeForce.Clear();
|
colliderToSquezeForce.Clear();
|
||||||
|
|
||||||
rope.points.First().position = start.position;
|
rope.points.First().position = start.position;
|
||||||
|
@ -300,7 +317,7 @@ public class RopeSimulator : MonoBehaviour
|
||||||
|
|
||||||
Vector3 stickCentre = (stick.A.position + stick.B.position) / 2;
|
Vector3 stickCentre = (stick.A.position + stick.B.position) / 2;
|
||||||
Vector3 stickDir = (stick.A.position - stick.B.position).normalized;
|
Vector3 stickDir = (stick.A.position - stick.B.position).normalized;
|
||||||
float length = (stick.A.position - stick.B.position).magnitude;
|
float length = Vector2.Distance(stick.A.position, stick.B.position);
|
||||||
|
|
||||||
if (length > stick.desiredLength || constrainStickMinLength)
|
if (length > stick.desiredLength || constrainStickMinLength)
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in New Issue