Advertisement
nepphhh

Untitled

Jan 2nd, 2020
147
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 3.25 KB | None | 0 0
  1. using ContractConfigurator.Parameters;
  2. using Contracts;
  3. using UnityEngine;
  4.  
  5. namespace ContractConfigurator.RP0
  6. {
  7.     public class AvionicsCheckFactory : ParameterFactory
  8.     {
  9.         protected bool continuousControlRequired;
  10.  
  11.         public override bool Load(ConfigNode configNode)
  12.         {
  13.             bool valid = base.Load(configNode);
  14.  
  15.             valid &= ConfigNodeUtil.ParseValue<bool>(configNode, "continuousControlRequired", x => continuousControlRequired = x, this);
  16.  
  17.             return valid;
  18.         }
  19.  
  20.         public override ContractParameter Generate(Contract contract)
  21.         {
  22.             return new AvionicsCheckParameter(title, continuousControlRequired);
  23.         }
  24.     }
  25.     public class AvionicsCheckParameter : VesselParameter
  26.     {
  27.         protected bool vesselHasControl = true;
  28.         protected bool controlHasLapsed = false;
  29.         protected bool continuousControlRequired = false;
  30.  
  31.         private float lastUpdate = -5.0f;
  32.         private const float UPDATE_FREQUENCY = 1f;
  33.  
  34.         public AvionicsCheckParameter() : base(null) { }
  35.  
  36.         public AvionicsCheckParameter(string title, bool continuousControlRequired) : base(title)
  37.         {
  38.             this.continuousControlRequired = continuousControlRequired;
  39.             this.title = GetParameterTitle();
  40.         }
  41.  
  42.         protected override void OnParameterSave(ConfigNode node)
  43.         {
  44.             base.OnParameterSave(node);
  45.         }
  46.  
  47.         protected override void OnParameterLoad(ConfigNode node)
  48.         {
  49.             base.OnParameterLoad(node);
  50.         }
  51.  
  52.         private void OnLockModifiedHandler(GameEvents.FromToAction<ControlTypes, ControlTypes> data)
  53.         {
  54.             CheckVessel(FlightGlobals.ActiveVessel);
  55.         }
  56.  
  57.         protected override void OnRegister()
  58.         {
  59.             base.OnRegister();
  60.             GameEvents.onInputLocksModified.Add(OnLockModifiedHandler);
  61.         }
  62.  
  63.         protected override void OnUnregister()
  64.         {
  65.             base.OnUnregister();
  66.             GameEvents.onInputLocksModified.Remove(OnLockModifiedHandler);
  67.         }
  68.  
  69.         protected override string GetParameterTitle()
  70.         {
  71.             return continuousControlRequired ? $"Maintain sufficient avionics (do not lose control)" : $"Have sufficient avionics for control";
  72.         }
  73.  
  74.         protected override void OnUpdate()
  75.         {
  76.             Vessel v = FlightGlobals.ActiveVessel;
  77.  
  78.             if (v == null) return;
  79.  
  80.             base.OnUpdate();
  81.  
  82.  
  83.             if (Time.fixedTime - lastUpdate > UPDATE_FREQUENCY)
  84.             {
  85.                 lastUpdate = Time.fixedTime;
  86.  
  87.                 bool controlIsLocked = InputLockManager.GetControlLock("RP0ControlLocker") != 0;
  88.  
  89.                 controlHasLapsed = controlIsLocked || controlHasLapsed;
  90.            
  91.                 vesselHasControl = continuousControlRequired ? !controlHasLapsed && !controlIsLocked : !controlIsLocked;
  92.  
  93.                 GetTitle();
  94.             }
  95.         }
  96.         protected override bool VesselMeetsCondition(Vessel vessel)
  97.         {
  98.             OnUpdate();
  99.  
  100.             Debug.Log(vesselHasControl ? "Avionics check: control locked" : "Avionics check: no control locks");
  101.  
  102.             return vesselHasControl;
  103.         }
  104.     }
  105. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement