59 lines
1.9 KiB
C#
59 lines
1.9 KiB
C#
// using UltimateWater;
|
|
using UnityEngine;
|
|
|
|
namespace PhysicsTools
|
|
{
|
|
public class Segment
|
|
{
|
|
public GameObject seg;
|
|
|
|
public Rigidbody body;
|
|
|
|
public Joint prev;
|
|
|
|
public Joint next;
|
|
|
|
public CapsuleCollider capsuleCollider;
|
|
|
|
public MeshFilter meshFilter;
|
|
|
|
public MeshRenderer meshRenderer;
|
|
|
|
// public WaterInteractive waterInteractive;
|
|
|
|
public Segment(string name, float len, Vector3 pos, Quaternion q, SegmentPropertiesBase segProperties, Rope r)
|
|
{
|
|
SegmentPropertiesCylinder segmentPropertiesCylinder = (SegmentPropertiesCylinder)segProperties;
|
|
float radius = segmentPropertiesCylinder.radius;
|
|
seg = GameObject.CreatePrimitive(PrimitiveType.Cylinder);
|
|
capsuleCollider = seg.GetComponent<CapsuleCollider>();
|
|
meshFilter = seg.GetComponent<MeshFilter>();
|
|
meshRenderer = seg.GetComponent<MeshRenderer>();
|
|
body = seg.AddComponent<Rigidbody>();
|
|
capsuleCollider.sharedMaterial = r.ropeMaterial;
|
|
capsuleCollider.enabled = r.useColliders;
|
|
r.lstComponentsCreated.Add(seg);
|
|
seg.hideFlags = (r.HideChildren ? HideFlags.HideInHierarchy : HideFlags.None);
|
|
meshRenderer.enabled = true;
|
|
r.linkMesh.defaultMesh = meshFilter.sharedMesh;
|
|
r.linkMesh.defaultMeshMaterial = meshRenderer.sharedMaterial;
|
|
r.linkMesh.defaultTransform = Matrix4x4.identity;
|
|
if (r.linkMesh.getMesh() != null)
|
|
{
|
|
meshFilter.sharedMesh = r.linkMesh.getMesh();
|
|
meshRenderer.sharedMaterial = r.linkMesh.meshMaterial;
|
|
}
|
|
seg.name = name;
|
|
seg.transform.localScale = new Vector3(radius * 2f, len / 2f, radius * 2f);
|
|
seg.transform.localPosition = pos;
|
|
seg.transform.localRotation = q;
|
|
body.maxAngularVelocity = 1f;
|
|
body.angularDamping = segmentPropertiesCylinder.angularDamping;
|
|
body.linearDamping = segmentPropertiesCylinder.linearDamping;
|
|
body.mass = segmentPropertiesCylinder.massPerUnitLength * segmentPropertiesCylinder.length;
|
|
body.solverIterations = segmentPropertiesCylinder.solverCount;
|
|
body.isKinematic = r.kinematic;
|
|
}
|
|
}
|
|
}
|