private void locateAnimation() { Animation[] animsBase = part.gameObject.GetComponentsInChildren <Animation>(true); List <Animation> al = new List <Animation>(); foreach (Animation a in animsBase) { AnimationClip c = a.GetClip(animationName); if (c != null) { al.Add(a); } } anims = al.ToArray(); if (anims == null || anims.Length == 0) { ENUtils.recursePrintComponents(part.gameObject, ""); throw new NullReferenceException("Cannot instantiate ENAnimateControlled with no animatons; could not locate animations for: " + animationName); } foreach (Animation a in anims) { a[animationName].layer = animationLayer; a[animationName].wrapMode = WrapMode.Once; a.wrapMode = WrapMode.Once; } }
public override void OnStart(PartModule.StartState state) { base.OnStart(state); #region animationSetup animationController = ENAnimateControlled.locateAnimationController(part, animationID, onAnimationStatusChanged); #endregion #region gui setup Events["retractEvent"].guiName = retractGuiName; Events["deployEvent"].guiName = deployGuiName; Events["repairEvent"].guiName = repairGuiName; Actions["toggleAction"].guiName = actionGroupGuiName; Events["retractEvent"].active = legState == LegState.DEPLOYED; Events["deployEvent"].active = legState == LegState.RETRACTED; Events["repairEvent"].active = legState == LegState.BROKEN; #endregion #region colliderSetup if (HighLogic.LoadedSceneIsFlight) { //setup suspension upper limits, defaults to config value for suspension travel if (suspensionUpperLimit == -1) { suspensionUpperLimit = suspensionTravel; } String[] wcNameArray = wheelColliderNames.Split(','); String[] susNameArray = suspensionTransformNames.Split(','); String[] footNameArray = footColliderNames.Split(','); int length = wcNameArray.Length < susNameArray.Length ? wcNameArray.Length : susNameArray.Length; LandingLegData legData; Transform suspensionTransform; Transform wheelColliderTransform; Transform footColliderTransform; WheelCollider wheelCollider; float wcRadius = 0, wcTravel = 0, wcTarget = 0, wcSpring = 0, wcDamper = 0; for (int i = 0; i < length; i++) { suspensionTransform = part.FindModelTransform(susNameArray[i].Trim()); wheelColliderTransform = part.FindModelTransform(wcNameArray[i].Trim()); if (suspensionTransform == null || wheelColliderTransform == null) { print("error locating transforms for names: " + susNameArray[i] + ", " + wcNameArray[i]); print("found objects: " + suspensionTransform + ", " + wheelColliderTransform); continue; } wheelCollider = wheelColliderTransform.GetComponent <WheelCollider>(); if (wheelCollider == null) { print("Wheel collider transform does not contain a valid wheel collider! name: " + wcNameArray[i]); ENUtils.recursePrintComponents(wheelColliderTransform.gameObject, ""); continue; } if (i < footNameArray.Length) { footColliderTransform = part.FindModelTransform(footNameArray[i].Trim()); } else { footColliderTransform = null; } legData = new LandingLegData(); legData.suspensionTransform = suspensionTransform; legData.wheelCollider = wheelCollider; legData.footColliderTransform = footColliderTransform; this.legData.Add(legData); //use default values if config values were not written wcRadius = wheelColliderRadius == -1 ? wheelCollider.radius : wheelColliderRadius; wcTravel = suspensionTravel == -1 ? wheelCollider.suspensionDistance : suspensionTravel; wcTarget = suspensionTarget == -1 ? wheelCollider.suspensionSpring.targetPosition : suspensionTarget; wcSpring = suspensionSpring == -1 ? wheelCollider.suspensionSpring.spring : suspensionSpring; wcDamper = suspensionDamper == -1 ? wheelCollider.suspensionSpring.damper : suspensionDamper; //setup wheel collider radius and suspension distance in case of overrides in config wheelCollider.radius = wcRadius; wheelCollider.suspensionDistance = wcTravel; wheelCollider.brakeTorque = 1000f; //setup a new JointSpring for the wheel to use, overriding values from config if needed JointSpring spring = new JointSpring(); spring.spring = wcSpring; spring.damper = wcDamper; spring.targetPosition = wcTarget; wheelCollider.suspensionSpring = spring;//assign the new spring joint to the wheel collider } } #endregion if (controlOn) { enableModule(); } else { disableModule(); } setLegState(legState); if (!moduleControlEnabled) { onControlDisabled(); } }