Get launch clamp code working

pull/767/head
Andrew Cassidy 5 years ago
parent 3e13dab645
commit 922dd5e282
No known key found for this signature in database
GPG Key ID: 963017B38FD477A1

@ -1 +1 @@
Subproject commit 9bb51cacb47afca6ecda55304bff0af55d18f821 Subproject commit 864a8e82e28160d09be161af4af4c6a34cd46a4c

@ -21,13 +21,13 @@
trf_towerYoke_name = obj_yoke trf_towerYoke_name = obj_yoke
trf_anchor_name = obj_ground trf_anchor_name = obj_ground
trf_animationRoot_name = restock-clamp-1 trf_animationRoot_name = restock-clamp-1
anim_decouple_name = deploy anim_decouple_name = RestockLaunchClamp_Deploy
} }
MODULE MODULE
{ {
name = ModuleAnimateGeneric name = ModuleAnimateGeneric
animationName = extend animationName = RestockLaunchClamp_Extend
startEventGUIName = #LOC_RestockPlus_light_rotate_on startEventGUIName = #LOC_RestockPlus_light_rotate_on
endEventGUIName = #LOC_RestockPlus_light_rotate_off endEventGUIName = #LOC_RestockPlus_light_rotate_off
actionGUIName = #LOC_RestockPlus_light_rotate_toggle actionGUIName = #LOC_RestockPlus_light_rotate_toggle

@ -16,8 +16,8 @@ namespace Restock
[KSPField] public Transform towerGirder; [KSPField] public Transform towerGirder;
[KSPField] public Transform towerStretch; [KSPField] public Transform towerStretch;
[KSPField] private Mesh _girderSegmentMesh; [KSPField] public Mesh girderSegmentMesh;
[KSPField] private Mesh _girderMesh; [KSPField] public Mesh girderMesh;
private List<Vector3> _girderVerts; private List<Vector3> _girderVerts;
private List<Vector2> _girderUVs; private List<Vector2> _girderUVs;
@ -27,8 +27,6 @@ namespace Restock
private List<int> _girderTris; private List<int> _girderTris;
private int _girderSegments; private int _girderSegments;
private float _girderHeight = -1f;
private bool _girderHasTangents = false; private bool _girderHasTangents = false;
private bool _girderHasColors = false; private bool _girderHasColors = false;
private int _girderVertCount; private int _girderVertCount;
@ -38,45 +36,44 @@ namespace Restock
public override void OnLoad(ConfigNode node) public override void OnLoad(ConfigNode node)
{ {
base.OnLoad(node); Debug.Log("OnLoad Called");
if (HighLogic.LoadedSceneIsEditor || HighLogic.LoadedSceneIsFlight) return;
}
public override void OnStart(StartState state)
{
Debug.Log("OnStart Called");
towerPivot = base.part.FindModelTransform(trf_towerPivot_name); towerPivot = base.part.FindModelTransform(trf_towerPivot_name);
towerYoke = base.part.FindModelTransform(trf_towerYoke_name); towerYoke = base.part.FindModelTransform(trf_towerYoke_name);
towerAnchor = base.part.FindModelTransform(trf_anchor_name); towerAnchor = base.part.FindModelTransform(trf_anchor_name);
towerGirder = base.part.FindModelTransform(trf_towerGirder_name); towerGirder = base.part.FindModelTransform(trf_towerGirder_name);
towerStretch = base.part.FindModelTransform(trf_towerStretch_name); towerStretch = base.part.FindModelTransform(trf_towerStretch_name);
girderMesh = towerGirder.GetComponent<MeshFilter>().mesh;
girderSegmentMesh = Instantiate<Mesh>(girderMesh);
base.OnLoad(node);
}
_girderMesh = towerGirder.GetComponent<MeshFilter>().mesh; public override void OnStart(StartState state)
_girderSegmentMesh = Instantiate<Mesh>(_girderMesh); {
_girderHeight = Vector3.Distance(towerStretch.position, towerAnchor.position); Debug.Log("OnStart Called");
Debug.Log(girderSegmentMesh == null);
girderMesh = towerGirder.GetComponent<MeshFilter>().mesh;
_girderVertCount = _girderSegmentMesh.vertexCount; _girderVertCount = girderSegmentMesh.vertexCount;
_girderTriCount = _girderSegmentMesh.triangles.Length; _girderTriCount = girderSegmentMesh.triangles.Length;
_girderVerts = new List<Vector3>(_girderSegmentMesh.vertices); _girderVerts = new List<Vector3>(girderSegmentMesh.vertices);
_girderUVs = new List<Vector2>(_girderSegmentMesh.uv); _girderUVs = new List<Vector2>(girderSegmentMesh.uv);
_girderNormals = new List<Vector3>(_girderSegmentMesh.normals); _girderNormals = new List<Vector3>(girderSegmentMesh.normals);
if (_girderSegmentMesh.tangents.Length > 0) if (girderSegmentMesh.tangents.Length > 0)
{ {
_girderHasTangents = true; _girderHasTangents = true;
_girderTangents = new List<Vector4>(_girderSegmentMesh.tangents); _girderTangents = new List<Vector4>(girderSegmentMesh.tangents);
} }
if (_girderSegmentMesh.colors32.Length > 0) if (girderSegmentMesh.colors32.Length > 0)
{ {
_girderHasColors = true; _girderHasColors = true;
_girderColors = new List<Color32>(_girderSegmentMesh.colors32); _girderColors = new List<Color32>(girderSegmentMesh.colors32);
} }
_girderTris = new List<int>(_girderSegmentMesh.triangles); _girderTris = new List<int>(girderSegmentMesh.triangles);
_girderSegments = 1; _girderSegments = 1;
base.OnStart(state); base.OnStart(state);
@ -97,45 +94,50 @@ namespace Restock
public void UpdateClamp() public void UpdateClamp()
{ {
var height = base.height;
var initialHeight = base.initialHeight;
towerAnchor.position = towerStretch.position - (towerStretch.up * height);
var vec1 = Vector3.down; var vec1 = Vector3.down;
var vec2 = towerAnchor.localPosition - towerYoke.localPosition ; var vec2 = towerAnchor.localPosition - towerYoke.localPosition ;
towerYoke.localRotation = Quaternion.FromToRotation(vec1, vec2); towerYoke.localRotation = Quaternion.FromToRotation(vec1, vec2);
var height = Vector3.Distance(towerStretch.position, towerAnchor.position); var segments = Mathf.CeilToInt(height / initialHeight);
var segments = Mathf.CeilToInt(height / _girderHeight);
if (segments != _girderSegments) if (segments != _girderSegments)
{ {
UpdateGirder(segments); UpdateGirder(segments);
} }
towerAnchor.position = towerStretch.position - (towerStretch.up * height);
} }
private void UpdateGirder(int length) private void UpdateGirder(int length)
{ {
if (length > _girderSegments) if (length > _girderSegments)
{ {
Debug.Log("lengthening to: " + length);
for (int i = _girderSegments; i < length; i++) for (int i = _girderSegments; i < length; i++)
{ {
var offset = Vector3.down * _girderHeight * i; var offset = Vector3.down * base.initialHeight * i;
var indexOffset = _girderVertCount * i; var indexOffset = _girderVertCount * i;
for (int v = 0; v < _girderVertCount; v++) for (int v = 0; v < _girderVertCount; v++)
{ {
_girderVerts.Add(_girderSegmentMesh.vertices[v] + offset); _girderVerts.Add(girderSegmentMesh.vertices[v] + offset);
} }
_girderNormals.AddRange(_girderSegmentMesh.normals); _girderNormals.AddRange(girderSegmentMesh.normals);
_girderUVs.AddRange(_girderSegmentMesh.uv); _girderUVs.AddRange(girderSegmentMesh.uv);
if (_girderHasTangents) _girderTangents.AddRange(_girderSegmentMesh.tangents); if (_girderHasTangents) _girderTangents.AddRange(girderSegmentMesh.tangents);
if (_girderHasColors) _girderColors.AddRange(_girderSegmentMesh.colors32); if (_girderHasColors) _girderColors.AddRange(girderSegmentMesh.colors32);
for (int t = 0; t < _girderTriCount; t++) for (int t = 0; t < _girderTriCount; t++)
{ {
_girderTris.Add(_girderSegmentMesh.triangles[t] + indexOffset); _girderTris.Add(girderSegmentMesh.triangles[t] + indexOffset);
} }
} }
} }
else else
{ {
Debug.Log("shortening to: " + length);
var startIndex = length * _girderVertCount; var startIndex = length * _girderVertCount;
var count = (_girderSegments - length) * _girderVertCount; var count = (_girderSegments - length) * _girderVertCount;
Debug.Log("removing verts"); Debug.Log("removing verts");
@ -148,17 +150,18 @@ namespace Restock
Debug.Log("removing tris"); Debug.Log("removing tris");
_girderTris.RemoveRange(length * _girderTriCount, (_girderSegments - length) * _girderTriCount); _girderTris.RemoveRange(length * _girderTriCount, (_girderSegments - length) * _girderTriCount);
} }
Debug.Log("vertex count: "+ _girderVerts.Count);
_girderMesh.Clear(); girderMesh.Clear();
_girderMesh.SetVertices(_girderVerts); girderMesh.SetVertices(_girderVerts);
_girderMesh.SetNormals(_girderNormals); girderMesh.SetNormals(_girderNormals);
_girderMesh.SetUVs(0, _girderUVs); girderMesh.SetUVs(0, _girderUVs);
if (_girderHasTangents) _girderMesh.SetTangents(_girderTangents); if (_girderHasTangents) girderMesh.SetTangents(_girderTangents);
if (_girderHasColors) _girderMesh.SetColors(_girderColors); if (_girderHasColors) girderMesh.SetColors(_girderColors);
_girderMesh.SetTriangles(_girderTris, 0); girderMesh.SetTriangles(_girderTris, 0);
_girderMesh.RecalculateBounds(); girderMesh.RecalculateBounds();
_girderSegments = length; _girderSegments = length;
} }
} }

Loading…
Cancel
Save