From fc963ca484f1c4e926fbf63211cc54584991e689 Mon Sep 17 00:00:00 2001 From: camlost2 Date: Tue, 25 Nov 2014 22:50:41 -0500 Subject: [PATCH] remove IR dependency, use action group --- GameData/AVTOL/Plugins/AVTOL.dll | Bin 0 -> 7680 bytes .../MagicSmokeIndustries/Plugins/AVTOL.dll | Bin 7680 -> 0 bytes Source/AVTOL.cs | 63 ++++++++++-------- Source/AVTOL.csproj | 7 -- Source/AVTOL.v12.suo | Bin 31744 -> 36864 bytes 5 files changed, 35 insertions(+), 35 deletions(-) create mode 100644 GameData/AVTOL/Plugins/AVTOL.dll delete mode 100644 GameData/MagicSmokeIndustries/Plugins/AVTOL.dll diff --git a/GameData/AVTOL/Plugins/AVTOL.dll b/GameData/AVTOL/Plugins/AVTOL.dll new file mode 100644 index 0000000000000000000000000000000000000000..81f57603d545f60fa0e30f60c3449b6bbf656fa9 GIT binary patch literal 7680 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 J?33w%{{ko$Cd~i< literal 0 HcmV?d00001 diff --git a/GameData/MagicSmokeIndustries/Plugins/AVTOL.dll b/GameData/MagicSmokeIndustries/Plugins/AVTOL.dll deleted file mode 100644 index ccc9c9e1396126452ae6b2fe701188772502f5b3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7680 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 diff --git a/Source/AVTOL.cs b/Source/AVTOL.cs index e02aaec..2fb1eca 100644 --- a/Source/AVTOL.cs +++ b/Source/AVTOL.cs @@ -10,22 +10,26 @@ namespace AVTOL { public class AVTOL:PartModule { - [KSPField(isPersistant = true, guiActive = true, guiActiveEditor = true, guiName = "Pitch Neutral%", guiFormat = "0"), + [KSPField(isPersistant = true, guiActive = true, guiActiveEditor = true, guiName = "Pitch Neutral%"), UI_FloatRange(minValue = 0f, maxValue = 100f, stepIncrement = 1f)] public float pitchNeutral = 100f; - [KSPField(isPersistant = true, guiActive = true, guiActiveEditor = true, guiName = "Pitch Range%", guiFormat = "0"), + [KSPField(isPersistant = true, guiActive = true, guiActiveEditor = true, guiName = "Pitch Range%"), UI_FloatRange(minValue = -100f, maxValue = 100f, stepIncrement = 1f)] public float pitchRange = 0f; + + [KSPField(isPersistant = true, guiActive = true, guiActiveEditor = true, guiName = "Phase Angle"), + UI_FloatRange(minValue = 0f, maxValue = 180f, stepIncrement = 5f)] + public float phaseAngle = 90f; - [KSPField(isPersistant = true, guiActive = true, guiActiveEditor = true, guiName = "IR Sync:"), - UI_Toggle(disabledText = "Off", enabledText = "On")] - public bool usePhaseAngle = false; - - [KSPField(isPersistant = true, guiActive = true, guiActiveEditor = true, guiName = "Phase Angle", guiFormat = "0"), - UI_FloatRange(minValue = -180f, maxValue = 180f, stepIncrement = 5f)] - public float phaseAngle = 90f; + [KSPField(isPersistant = true, guiActive = true, guiActiveEditor = true, guiName = "Max Angle"), + UI_FloatRange(minValue = 0f, maxValue = 180f, stepIncrement = 5f)] + public float maxAngle = 90f; - [KSPField(isPersistant = true, guiActive = true, guiActiveEditor = true, guiName = "Vertical Cutoff", guiFormat = "0"), + [KSPField(isPersistant = true, guiActive = true, guiActiveEditor = true, guiName = "Step Angle"), + UI_FloatRange(minValue = -90f, maxValue = 90f, stepIncrement = 0.5f)] + public float stepAngle = 22.5f; + + [KSPField(isPersistant = true, guiActive = true, guiActiveEditor = true, guiName = "Vertical Cutoff"), UI_FloatRange(minValue = 1f, maxValue = 100f, stepIncrement = 1f)] public float verticalspeed = 100f; @@ -47,10 +51,22 @@ public void toggleSystem(KSPActionParam param) SetThrustPercentage(100f); } } - + [KSPAction("Increase Phase Angle")] + public void increasePhaseAngle(KSPActionParam param) + { + phaseAngle += stepAngle; + if (phaseAngle > maxAngle) + phaseAngle = maxAngle; + } + [KSPAction("Decrease Phase Angle")] + public void DecreasePhaseAngle(KSPActionParam param) + { + phaseAngle -= stepAngle; + if (phaseAngle < 0f) + phaseAngle = 0f; + } private ModuleEngines engine; private ModuleEnginesFX engineFX; - private MuMech.MuMechToggle muMechToggle; public override void OnStart(StartState state) { if (state == StartState.Editor) @@ -60,14 +76,6 @@ public override void OnStart(StartState state) engine = (ModuleEngines)part.Modules["ModuleEngines"]; if (part.Modules.Contains("ModuleEnginesFX")) engineFX = (ModuleEnginesFX)part.Modules["ModuleEnginesFX"]; - foreach (Part p in vessel.parts) - { - if (p.Modules.Contains("MuMechToggle")) - { - muMechToggle = (MuMech.MuMechToggle)p.Modules["MuMechToggle"]; - return; - } - } } public void FixedUpdate() @@ -76,10 +84,13 @@ public void FixedUpdate() this.Fields["pitchNeutral"].guiActiveEditor = showMenu; this.Fields["pitchRange"].guiActive = showMenu; this.Fields["pitchRange"].guiActiveEditor = showMenu; - this.Fields["usePhaseAngle"].guiActive = showMenu; - this.Fields["usePhaseAngle"].guiActiveEditor = showMenu; - this.Fields["phaseAngle"].guiActive = showMenu; this.Fields["phaseAngle"].guiActiveEditor = showMenu; + this.Fields["phaseAngle"].guiActive = showMenu; + this.Fields["maxAngle"].guiActive = showMenu; + this.Fields["maxAngle"].guiActiveEditor = showMenu; + this.Fields["stepAngle"].guiActive = showMenu; + this.Fields["stepAngle"].guiActiveEditor = showMenu; + this.Fields["verticalspeed"].guiActive = showMenu; this.Fields["verticalspeed"].guiActiveEditor = showMenu; @@ -93,12 +104,8 @@ public void FixedUpdate() float T = pitchNeutral; T *= (1f - (float)vessel.verticalSpeed / verticalspeed); + T *= Mathf.Sin(phaseAngle / 57.259f); T = Mathf.Clamp(T, 0f, 100f); - if(muMechToggle!=null && usePhaseAngle) - { - T *= Mathf.Cos((muMechToggle.rotation - phaseAngle)/57.259f); - } - T += pitchRange * vessel.ctrlState.pitch; SetThrustPercentage(T); diff --git a/Source/AVTOL.csproj b/Source/AVTOL.csproj index 100bf1f..cc35234 100644 --- a/Source/AVTOL.csproj +++ b/Source/AVTOL.csproj @@ -35,13 +35,6 @@ D:\Program Files (x86)\Steam\steamapps\common\Kerbal Space Program\KSP_Data\Managed\Assembly-CSharp.dll - - False - D:\Program Files (x86)\Steam\steamapps\common\Kerbal Space Program\KSP_Data\Managed\Assembly-CSharp-firstpass.dll - - - D:\Program Files (x86)\Steam\steamapps\common\Kerbal Space Program\GameData\MagicSmokeIndustries\Plugins\InfernalRobotics.dll - diff --git a/Source/AVTOL.v12.suo b/Source/AVTOL.v12.suo index fae42035d75a97a6e64b2f97fff8c382dcf53284..04b461c64742e033f6f529ea357d6a8c14c1429c 100644 GIT binary patch literal 36864 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 X(?;_ODQId|RhrlUz1~a+j0v9Jb^OBk75YJzR z_7Z?M=aPdu)2tM=rs#6ejli`)Ca?nFIZhUKBDz+3=()^_)y(pus}5KXH~?O*9&{7n z1M=pk{F+qSQyNY`{Y2~oWlqDBd76fOSEJ$GMh$s8F0AoIP!@^Jp=)SCo%>m9rb|Ip zAS2b*$FY{&&ssC(VxJS;^Eb4$>qpG%GsvEKtVC}xy&fB_1*!m@Pj6+GcXPvNzy=Js z5!ej)fkr@|5KPsZLAL-~ffk?@(8t__I-RjOXls^RUYh7UlFSa!J0&%;lH%E)SS9-i zTSxaRI$3OyRvNpugKqP#);!Hb=W;%wca$3XX=zxavD}DSf=TR9`ox0U(0CT$@}Jb- z$NJx&tkm?Mid810jjvgaCb1A#Z5WFQGb?GPv`yt3QUvJ6kWCaX3!6)sl`><-8Z^!b zx==P|;lmL$x~fe@ND#b?J~4wmuw0=F#Vu@UOCOq#(S)mwwt26kN!PXo^o)|5tP5(f zf$yxo2*v8U&G`m~4AZ%~4y#-Vp4rInp!oW*S_~G)0DZot9gS9++1P3o921;|K8n>R zEH{9$pJwXYRK7@j@Aav&n&O+n^lpjUsws&sK^OCyt&*>zVi-w@$INuV`G97ZZq z=Yw)9jjq6+d>dC8hFWe$V}xdMTG?|cmh!^iy|LTOaaEVWqIu%fOzja#30ER@;1sJ2 zTVy$pOP$EGKUH4l0R=&|00TJg>5IuWiWhV(SYL+dTmh_!L!2!$45e6M!WICd8{qPf z&t_v-nA=t-Fu*1aG<5}l?NyKvM8&^n|uDd zFFRj+>YKye9p`tsKK}WX5X02Ce;Y+QGsvIsnA#op$rBz0TfW_sN7bW6Q?HDklF16c z!6Zw1Av=d5hL3g}^HJgBgDE3*ymF{sp_d*mFd_8O?BSJpoUim!4mag{DaBFBdgRuO z?YsL&MrueN*(fh#R4KvBIM-)c1KRNF?IRTwJz7*a-_)1asZ&S=Ie&Sw!c6ZTbs*H* z$zN_JwPFM6D(;740qjK{?as7=<`?%;?-Q>Q^G+7~d7cSbf`06&rOD1rQi^=@YfZX> z$%=&iy%l5M7j~X_|Ap7Se*VLcx(5(c_QGGHDKzqUo1Qh8{s(f_54Jaw*)c6u&CVw# zEil?lFk@xPl#AT6h{}Tf(U$H`gp5n7S1GP!A0_z%FiZa z?ABuTXMdKD#Qb;X^kycatpIVCp@c3EDu3UcYqE!S-45`y5%**lbHv zR{$@hd3PS{v9B5y`@~+cOW4K>%iqNNk(bg-Q=lt=XCL2W`qihdWaI1*aj_d8KMjK- zB$~u6cqDD26%Aem&K+s+A&aqt>=gr8_I3;!LM<-tLcLM+Ac}`YyQmg}+AsKvuM0NNzHKo#C09$-mwZ8LVYt=J!q`Q#}Y9e zKy3%;I(#)a$bL*6)M!mgv|y;cg)O(8?$~(<_Rpu|0WgbQU77RHzl?^>ZUIT?Q*Aan}st?_zy|_fn`|%(Is|jem_id>#{U5bfps) zrg(5B^FnlX{~Ej<@~6zh&r3Snxr4g* dZlI1muGABwUYWYIN0Bsn!1@0Z