partial restructuring towards allowing loops
This commit is contained in:
parent
d6428dba3e
commit
20d2a9e6c3
7 changed files with 62 additions and 27 deletions
|
@ -3,7 +3,10 @@ using TMPro;
|
|||
using UnityEngine;
|
||||
|
||||
public class Controller : MonoBehaviour {
|
||||
private List<RollerProperties> cableStartingPoints = new();
|
||||
|
||||
[Tooltip("List of cables in the scene. Each cable consists of segments describing the link and last/first can optionally be fixed to points.")]
|
||||
[SerializeField]
|
||||
public List<Cable> cables = new();
|
||||
|
||||
//Initialize
|
||||
void Awake() {
|
||||
|
@ -37,11 +40,9 @@ public class Controller : MonoBehaviour {
|
|||
//collisions and physics
|
||||
Rigidbody2D rb = go.GetOrAddComponent<Rigidbody2D>();
|
||||
// mass is based on area, if not provided
|
||||
if (rp.mass == null) {
|
||||
rb.useAutoMass = rp.mass == null;
|
||||
}
|
||||
else {
|
||||
rb.mass = rp.mass.Value;
|
||||
rb.useAutoMass = rp.mass < 0;
|
||||
if(rp.mass >= 0) {
|
||||
rb.mass = rp.mass;
|
||||
}
|
||||
rb.angularDrag = 1;
|
||||
rb.drag = 1;
|
||||
|
@ -50,9 +51,7 @@ public class Controller : MonoBehaviour {
|
|||
}
|
||||
|
||||
go.AddComponent<PolygonCollider2D>();
|
||||
|
||||
//build list of cable starting objects
|
||||
cableStartingPoints.Add(rp);
|
||||
|
||||
Debug.Log("Initialized roller: " + go.name);
|
||||
}
|
||||
}
|
||||
|
@ -73,9 +72,6 @@ public class Controller : MonoBehaviour {
|
|||
dist.autoConfigureDistance = false;
|
||||
rp.distanceJoint2D = dist;
|
||||
|
||||
//remove linked to objects, so only starting points remain
|
||||
cableStartingPoints.Remove(rp.linkTo);
|
||||
|
||||
//set fixed points only once
|
||||
if (rp.useFixedAttachmentPoint) {
|
||||
dist.anchor = rp.attachmentPoint;
|
||||
|
@ -126,7 +122,9 @@ public class Controller : MonoBehaviour {
|
|||
}
|
||||
}
|
||||
|
||||
Debug.Log("Initialized "+cableStartingPoints.Count+" cables");
|
||||
Debug.Log("Initialized "+cables.Count+" cables");
|
||||
|
||||
/* Define cables directly instead
|
||||
var cableNum = 0;
|
||||
//find and report loops of cables
|
||||
foreach (var cable in cableStartingPoints) {
|
||||
|
@ -139,7 +137,7 @@ public class Controller : MonoBehaviour {
|
|||
}
|
||||
visitedSegments.Add(segment);
|
||||
}
|
||||
}
|
||||
}*/
|
||||
|
||||
}
|
||||
|
||||
|
@ -156,7 +154,7 @@ public class Controller : MonoBehaviour {
|
|||
}
|
||||
|
||||
if (waitedFrames++ > -1) {
|
||||
CableJointsAlgorithm.TimeStep(cableStartingPoints);
|
||||
CableJointsAlgorithm.TimeStep(cables);
|
||||
waitedFrames = 0;
|
||||
}
|
||||
}
|
||||
|
|
25
Assets/Model.cs
Normal file
25
Assets/Model.cs
Normal file
|
@ -0,0 +1,25 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using JetBrains.Annotations;
|
||||
using UnityEngine;
|
||||
|
||||
[Serializable]
|
||||
public class Cable {
|
||||
[SerializeField]
|
||||
public List<CableSegment> segments;
|
||||
}
|
||||
|
||||
[Serializable]
|
||||
public class CableSegment {
|
||||
[SerializeField]
|
||||
public GameObject go;
|
||||
//keep references to all of these, to reduce inefficient getComponent calls
|
||||
protected RollerProperties rp = null;
|
||||
protected RollerProperties linkToGO = null;
|
||||
protected RollerProperties linkToRP = null;
|
||||
protected DistanceJoint2D dist = null;
|
||||
|
||||
[SerializeField] public bool useFixedAttachmentPoint = false;
|
||||
|
||||
[SerializeField] public Vector2 attachmentPoint = new Vector2(0,0);
|
||||
}
|
3
Assets/Model.cs.meta
Normal file
3
Assets/Model.cs.meta
Normal file
|
@ -0,0 +1,3 @@
|
|||
fileFormatVersion: 2
|
||||
guid: 35789436d28644f99ea0a7f2230944a1
|
||||
timeCreated: 1701891888
|
|
@ -1,32 +1,27 @@
|
|||
using System.Collections.Generic;
|
||||
using TMPro;
|
||||
using Unity.VisualScripting;
|
||||
using UnityEngine;
|
||||
using UnityEngine.Serialization;
|
||||
|
||||
[System.Serializable]
|
||||
public class RollerProperties : MonoBehaviour {
|
||||
//settings
|
||||
/// rotation direction, used to determine attachment sides for the cables
|
||||
[Tooltip("rotation direction, used to determine attachment sides for the cables")]
|
||||
[SerializeField] public bool clockwise = false;
|
||||
[SerializeField] public RollerProperties linkTo = null;
|
||||
[SerializeField] public List<RollerProperties> listTest;
|
||||
[SerializeField] public RollerProperties[] arrayTest;
|
||||
[Tooltip("Type of movement of the object. Powered behaves like a wheel, which can be toggled with \"t\".")]
|
||||
[SerializeField] public RotationType movement = RotationType.Fixed;
|
||||
[FormerlySerializedAs("fixedAttachmentPoint")] [SerializeField] public bool useFixedAttachmentPoint = false;
|
||||
[SerializeField] public Vector2 attachmentPoint = new Vector2(0, 0);
|
||||
[SerializeField] public float? mass = null;
|
||||
[Tooltip("Mass of the object. Use -1 to automatically calculate based on area.")]
|
||||
[SerializeField] public float mass = -1;
|
||||
|
||||
//references
|
||||
protected internal GameObject text;
|
||||
protected internal DistanceJoint2D distanceJoint2D = null;
|
||||
protected internal GameObject linkToGameObject => linkTo.gameObject;
|
||||
|
||||
//simulation properties
|
||||
protected internal float actualDistance;
|
||||
|
||||
public (float?, float?) updateDistanceJoints() {
|
||||
Vector2? left = null, right = null;
|
||||
|
||||
if (linkTo != null) {
|
||||
if (useFixedAttachmentPoint && !linkTo.useFixedAttachmentPoint) {
|
||||
//left = attachmentPoint;
|
||||
|
|
|
@ -393,6 +393,20 @@ MonoBehaviour:
|
|||
m_Script: {fileID: 11500000, guid: d406720d26e7d1e4ba8afd140d67de7e, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
cables:
|
||||
- firstRoller: {fileID: 0}
|
||||
segments:
|
||||
- go: {fileID: 0}
|
||||
fixedAttachmentPoint: 0
|
||||
attachmentPoint7: {x: 0, y: 0}
|
||||
- go: {fileID: 0}
|
||||
fixedAttachmentPoint: 0
|
||||
attachmentPoint7: {x: 0, y: 0}
|
||||
- go: {fileID: 0}
|
||||
fixedAttachmentPoint: 0
|
||||
attachmentPoint7: {x: 0, y: 0}
|
||||
cabletes:
|
||||
- 0
|
||||
--- !u!1 &1306628726
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
"com.csutil.cscore": "https://github.com/cs-util-com/cscore.git?path=CsCore/PlainNetClassLib/src/Plugins",
|
||||
"com.unity.collab-proxy": "2.2.0",
|
||||
"com.unity.feature.2d": "2.0.0",
|
||||
"com.unity.ide.rider": "3.0.26",
|
||||
"com.unity.ide.rider": "3.0.27",
|
||||
"com.unity.test-framework": "1.3.9",
|
||||
"com.unity.textmeshpro": "3.0.6",
|
||||
"com.unity.timeline": "1.8.2",
|
||||
|
|
|
@ -151,7 +151,7 @@
|
|||
}
|
||||
},
|
||||
"com.unity.ide.rider": {
|
||||
"version": "3.0.26",
|
||||
"version": "3.0.27",
|
||||
"depth": 0,
|
||||
"source": "registry",
|
||||
"dependencies": {
|
||||
|
|
Loading…
Reference in a new issue