Skip to content

Commit 6e30775

Browse files
author
BahamutoD
committed
animate engn in editor, aimLight fixes, alg FAR fix
1 parent 15c94f8 commit 6e30775

4 files changed

Lines changed: 131 additions & 68 deletions

File tree

BDAnimationModules/AnimatedEngine.cs

Lines changed: 37 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -20,25 +20,34 @@ public class AnimatedEngine : PartModule
2020
private ModuleEnginesFX modEngFX = null;
2121
private AnimationState[] engineStates;
2222
private bool engineIsFX = false;
23+
24+
[KSPEvent(guiActive = false, guiActiveEditor = true, guiName = "Toggle Animation")]
25+
public void ToggleAnimationEditor()
26+
{
27+
engineIsOn = !engineIsOn;
28+
}
2329

2430

25-
public override void OnStart(PartModule.StartState state)
31+
public void Start()
2632
{
2733

2834
engineStates = SetUpAnimation(EngineAnimationName, this.part);
2935

30-
foreach (var me in this.part.FindModulesImplementing<ModuleEngines>())
31-
{
32-
engineIsOn = me.EngineIgnited;
33-
modEng = me;
34-
engineIsFX = false;
35-
}
36-
37-
foreach (var me in this.part.FindModulesImplementing<ModuleEnginesFX>())
36+
if(HighLogic.LoadedSceneIsFlight)
3837
{
39-
engineIsOn = me.EngineIgnited;
40-
modEngFX = me;
41-
engineIsFX = true;
38+
foreach (var me in this.part.FindModulesImplementing<ModuleEngines>())
39+
{
40+
engineIsOn = me.EngineIgnited;
41+
modEng = me;
42+
engineIsFX = false;
43+
}
44+
45+
foreach (var me in this.part.FindModulesImplementing<ModuleEnginesFX>())
46+
{
47+
engineIsOn = me.EngineIgnited;
48+
modEngFX = me;
49+
engineIsFX = true;
50+
}
4251
}
4352

4453

@@ -58,32 +67,34 @@ public override void OnStart(PartModule.StartState state)
5867

5968

6069

61-
public override void OnUpdate()
70+
public void Update()
6271
{
63-
if(!engineIsFX)
72+
if(HighLogic.LoadedSceneIsFlight)
6473
{
65-
engineIsOn = modEng.EngineIgnited;
66-
}
67-
else
68-
{
69-
engineIsOn = modEngFX.EngineIgnited;
74+
if(!engineIsFX)
75+
{
76+
engineIsOn = modEng.EngineIgnited;
77+
}
78+
else
79+
{
80+
engineIsOn = modEngFX.EngineIgnited;
81+
}
7082
}
71-
7283

7384
foreach(var anim in engineStates)
7485
{
75-
76-
7786
if(engineIsOn && anim.normalizedTime < WaitForAnimation)
7887
{
7988
anim.speed = 1;
80-
if(engineIsFX) modEngFX.Shutdown();
81-
else modEng.Shutdown();
82-
89+
if(HighLogic.LoadedSceneIsFlight)
90+
{
91+
if(engineIsFX) modEngFX.Shutdown();
92+
else modEng.Shutdown();
93+
}
8394
}
8495

8596

86-
if(anim.normalizedTime >= WaitForAnimation && anim.speed > 0)
97+
if(HighLogic.LoadedSceneIsFlight && anim.normalizedTime >= WaitForAnimation && anim.speed > 0)
8798
{
8899
if(engineIsFX) modEngFX.Activate();
89100
else modEng.Activate();
@@ -107,7 +118,6 @@ public override void OnUpdate()
107118
anim.normalizedTime = 0;
108119
}
109120

110-
111121
}
112122

113123
}

BDAnimationModules/BDAdjustableLandingGear.cs

Lines changed: 32 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
using System;
2+
using System.Collections;
23
using System.Collections.Generic;
34
using System.Reflection;
45
using UnityEngine;
@@ -153,6 +154,8 @@ public void ToggleAdjustment()
153154

154155
[KSPField(isPersistant = true)]
155156
public GearStates TargetState = GearStates.Deployed;
157+
158+
GearStates previousState;
156159

157160
[KSPField(isPersistant = true, guiActiveEditor = false)]
158161
public bool isMirrored = false;
@@ -433,7 +436,7 @@ public override void OnStart(PartModule.StartState state)
433436

434437
if(part.FindModelTransform(boundsCollider)!=null)
435438
{
436-
Destroy(part.FindModelTransform(boundsCollider).gameObject);
439+
DestroyImmediate(part.FindModelTransform(boundsCollider).gameObject);
437440
}
438441

439442
if(!HighLogic.LoadedSceneIsEditor)
@@ -443,6 +446,9 @@ public override void OnStart(PartModule.StartState state)
443446
RefreshTweakables();
444447

445448
wheelColliders = part.FindModelComponents<WheelCollider>();
449+
450+
previousState = CurrentState;
451+
part.SendMessage("GeometryPartModuleRebuildMeshData");
446452
}
447453

448454
public override void OnLoad (ConfigNode node)
@@ -644,6 +650,28 @@ public void FixedUpdate()
644650
UpdateWheelAlignment();
645651

646652
SavePosAndRot();
653+
654+
UpdateFAR();
655+
}
656+
657+
void UpdateFAR()
658+
{
659+
if(previousState!=CurrentState)
660+
{
661+
if(CurrentState == GearStates.Retracted || CurrentState == GearStates.Deployed)
662+
{
663+
StartCoroutine(DelayedMeshUpdate());
664+
}
665+
}
666+
667+
previousState = CurrentState;
668+
}
669+
670+
IEnumerator DelayedMeshUpdate()
671+
{
672+
yield return new WaitForSeconds(1.25f);
673+
Debug.Log ("BDAdjustableLandingGear : Rebuilding mesh data.");
674+
part.SendMessage("GeometryPartModuleRebuildMeshData");
647675
}
648676

649677
void UpdateWheelAlignment()
@@ -770,6 +798,7 @@ void LoadPosAndRot()
770798

771799
public void OnEditorAttach()
772800
{
801+
Debug.Log ("BDADJ oneditorattach");
773802
foreach(Part pSym in part.symmetryCounterparts)
774803
{
775804
if(pSym!=part && isMirrored == false)
@@ -933,7 +962,8 @@ void Steering()
933962

934963
float vPosMult = vesselWheelPos.y > vessel.localCoM.y ? 1 : -1;
935964

936-
float yawValue = vessel.ctrlState.yaw;
965+
float yawValue;// = vessel.ctrlState.yaw;
966+
yawValue = vessel.ctrlState.wheelSteer;
937967
float reverseFactor = reverseSteering ? -1 : 1;
938968
float speedFactor = Mathf.Clamp01((40-(float)vessel.srfSpeed)/40);
939969
float targetAngle = yawValue * maxSteerAngle * reverseFactor * speedFactor * vPosMult;

BDAnimationModules/BDAnimationModules.userprefs

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,17 @@
11
<Properties>
2-
<MonoDevelop.Ide.Workspace ActiveConfiguration="Debug|x86" PreferredExecutionTarget="MonoDevelop.Default" />
2+
<MonoDevelop.Ide.Workspace ActiveConfiguration="Debug|x86" />
33
<MonoDevelop.Ide.Workbench ActiveDocument="BDAdjustableLandingGear.cs">
44
<Files>
5-
<File FileName="BDAdjustableLandingGear.cs" Line="18" Column="4" />
6-
<File FileName="AnimatedThrust.cs" Line="1" Column="1" />
7-
<File FileName="SurfaceWalker.cs" Line="17" Column="28" />
8-
<File FileName="FSwheel\FSBDwheel.cs" Line="844" Column="19" />
9-
<File FileName="Utils.cs" Line="41" Column="4" />
5+
<File FileName="BDAdjustableLandingGear.cs" Line="965" Column="20" />
6+
<File FileName="AnimatedEngine.cs" Line="1" Column="1" />
7+
<File FileName="FSwheel\FSBDwheel.cs" Line="1" Column="1" />
108
</Files>
119
<Pads>
1210
<Pad Id="ProjectPad">
1311
<State expanded="True">
1412
<Node name="BDAnimationModules" expanded="True">
1513
<Node name="FSwheel" expanded="True" />
16-
<Node name="BDGenericAnimationState.cs" selected="True" />
14+
<Node name="BDAdjustableLandingGear.cs" selected="True" />
1715
</Node>
1816
</State>
1917
</Pad>

BDAnimationModules/MouseAimLight.cs

Lines changed: 57 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ namespace BDAnimationModules
66
{
77
public class MouseAimLight : PartModule
88
{
9+
[KSPField(isPersistant = true)]
910
public bool turretEnabled = false; //user initiated
1011
public bool deployed = false; //actual status
1112
public AnimationState[] deployStates;
@@ -39,9 +40,21 @@ public class MouseAimLight : PartModule
3940
public string yawTransformName = "aimRotate";
4041
[KSPField(isPersistant = false)]
4142
public string pitchTransformName = "aimPitch";
42-
43-
43+
44+
[KSPField(isPersistant = true)]
45+
public Vector3 localAimPoint;
46+
47+
[KSPField(isPersistant = true)]
4448
public bool mouseTracking = true;
49+
50+
[KSPField(isPersistant = false)]
51+
public string emissiveObjectName = "lightPlane";
52+
53+
[KSPField(isPersistant = false)]
54+
public string lightObjectName = "light";
55+
56+
57+
Material emissiveMatRef;
4558

4659
[KSPAction("Toggle Position Lock", KSPActionGroup.Light)]
4760
public void AGToggleTracking(KSPActionParam param)
@@ -78,10 +91,17 @@ public override void OnStart (PartModule.StartState state)
7891
{
7992
deployStates = SetUpAnimation(deployAnimName, this.part);
8093
}
94+
95+
emissiveMatRef = part.FindModelTransform(emissiveObjectName).renderer.material;
8196

82-
spotLight = part.FindModelTransform("light").GetComponent<Light>();
97+
spotLight = part.FindModelTransform(lightObjectName).GetComponent<Light>();
8398
spotlightIntensity = spotLight.intensity;
84-
spotLight.intensity = 4;
99+
spotLight.intensity = turretEnabled ? spotlightIntensity : 0;
100+
spotLight.enabled = turretEnabled;
101+
102+
//emissive
103+
float colorSet = spotLight.intensity/spotlightIntensity;
104+
emissiveMatRef.SetColor("_EmissiveColor", new Color(colorSet,colorSet,colorSet,1));
85105

86106
pitchTransform = part.FindModelTransform(pitchTransformName);
87107
yawTransform = part.FindModelTransform(yawTransformName);
@@ -130,8 +150,6 @@ public override void OnFixedUpdate ()
130150
//deploying
131151
if(turretEnabled)
132152
{
133-
134-
135153
if(anim.normalizedTime<1 && anim.speed<1)
136154
{
137155
anim.speed = 1;
@@ -155,6 +173,7 @@ public override void OnFixedUpdate ()
155173

156174
if(turretZeroed)
157175
{
176+
spotLight.enabled = false;
158177
anim.enabled = true;
159178
if(anim.normalizedTime > 0 && anim.speed > -1)
160179
{
@@ -171,40 +190,39 @@ public override void OnFixedUpdate ()
171190

172191
if(hasPower && deployed && (TimeWarp.WarpMode!=TimeWarp.Modes.HIGH || TimeWarp.CurrentRate == 1))
173192
{
174-
if(mouseTracking) Aim ();
193+
if(mouseTracking)
194+
{
195+
Aim(GetTarget());
196+
}
197+
else
198+
{
199+
Aim (transform.TransformPoint(localAimPoint));
200+
}
201+
spotLight.enabled = true;
175202
spotLight.intensity = Mathf.MoveTowards(spotLight.intensity, spotlightIntensity, spotlightIntensity * TimeWarp.fixedDeltaTime);
176203
}
177204
if(!hasPower)
205+
{
178206
spotLight.intensity = Mathf.MoveTowards(spotLight.intensity, 0, 3*spotlightIntensity * TimeWarp.fixedDeltaTime);
207+
if(spotLight.intensity == 0)
208+
{
209+
spotLight.enabled = false;
210+
}
211+
}
179212
//emissive
180213
float colorSet = spotLight.intensity/spotlightIntensity;
181-
part.FindModelTransform("lightPlane").renderer.material.SetColor("_EmissiveColor", new Color(colorSet,colorSet,colorSet,1));
214+
emissiveMatRef.SetColor("_EmissiveColor", new Color(colorSet,colorSet,colorSet,1));
182215

183216
}
184217

185-
186-
187-
private void Aim()
218+
Vector3 GetTarget()
188219
{
189-
Vector3 target = Vector3.zero;
190-
Vector3 targetYawOffset;
191-
Vector3 targetPitchOffset;
192-
193-
//auto target tracking
194-
195-
Vessel targetVessel = null;
196-
if(vessel.targetObject!=null)
220+
Vector3 target;
221+
if(vessel.targetObject!=null && vessel.targetObject.GetTransform()!=null)
197222
{
198-
targetVessel = vessel.targetObject.GetVessel();
223+
target = vessel.targetObject.GetTransform ().position;
199224
}
200-
if(targetVessel!=null)
201-
{
202-
target = targetVessel.transform.position;
203-
}
204-
205-
//
206-
207-
if (target == Vector3.zero) //if no target from vessel Target, use mouse aim
225+
else
208226
{
209227
Vector3 mouseAim = new Vector3(Input.mousePosition.x/Screen.width, Input.mousePosition.y/Screen.height, 0);
210228
Ray ray = FlightCamera.fetch.mainCamera.ViewportPointToRay(mouseAim);
@@ -228,6 +246,16 @@ private void Aim()
228246
target = ray.direction * maxTargetingRange + FlightCamera.fetch.mainCamera.transform.position;
229247
}
230248
}
249+
250+
localAimPoint = transform.InverseTransformPoint(target);
251+
return target;
252+
}
253+
254+
private void Aim(Vector3 target)
255+
{
256+
Vector3 targetYawOffset;
257+
Vector3 targetPitchOffset;
258+
231259
targetDistance = (target - part.transform.position).magnitude;
232260
spotlightIntensity = Mathf.Clamp(0.005f * targetDistance, 1, 4.5f);
233261
targetYawOffset = yawTransform.position - target;
@@ -274,10 +302,7 @@ private void Aim()
274302
yawTransform.localRotation *= Quaternion.AngleAxis(-rotationSpeedYaw, yawAxis);
275303
}
276304
}
277-
278-
279-
280-
305+
281306
//pitch movement
282307
if(targetPitchOffset.z > 0 && pitchTransform.localRotation.Yaw ()>-maxPitch*Mathf.Deg2Rad)
283308
{

0 commit comments

Comments
 (0)