private void CalcAngle() { /// Calculate angle base upon the difference of the previous parentDir and current. /// parentDir is the direction of a vector perpendicular to the axis relative to the parent of this part var vdir = this.part.parent.transform.InverseTransformDirection(this.transform.TransformDirection(KRSUtils.VectorSwap(this.axis))); var delta = -KRSUtils.VectorSignedAngle(vdir, parentDir, parentAxis); this.angle = KRSUtils.Wrap(this.angleStart + delta, -180f, 179.999f); }
private void LoadShaders() { foreach (var shaderFilename in Shaders) { try { var mat = new Material(KRSUtils.GetResourceString(shaderFilename)); Materials[mat.shader.name] = mat; } catch { MonoBehaviour.print("[ERROR] " + this.GetType().Name + " : Failed to load " + shaderFilename); } } }
public override void OnStart(PartModule.StartState state) { print(new StackTrace(true).GetFrame(0).GetFileLineNumber()); this.part.force_activate(); this.angleStart = this.angle; InitializeStatic(this.angle); if (this.part.parent) { this.parentAxis = this.part.parent.transform.InverseTransformDirection(this.transform.TransformDirection(this.axis)); this.parentDir = this.part.parent.transform.InverseTransformDirection(this.transform.TransformDirection(KRSUtils.VectorSwap(this.axis))); } if (this.isFixed) { SetTargetAngle(this.angle); } }
private Func <Part, bool> CanApplyIfType(string typeName) { var type = KRSUtils.FindType(typeName); return((p) => type.IsInstanceOfType(p)); }