private static void UpdateStraightOutHint(ModuleActiveStrut module, GameObject hint) { hint.SetActive(false); var rayres = Utilities.PerformRaycastIntoDir(module.Origin.position, module.RealModelForward, module.RealModelForward, module.part); var trans = hint.transform; trans.position = module.Origin.position; var dist = rayres.HitResult ? rayres.DistanceFromOrigin / 2f : Config.Instance.MaxDistance; if (rayres.HitResult) { trans.LookAt(rayres.Hit.point); } else { trans.LookAt(module.Origin.transform.position + (module.IsFlexible ? module.Origin.up : module.RealModelForward)); } trans.Rotate(new Vector3(0, 1, 0), 90f); trans.Rotate(new Vector3(0, 0, 1), 90f); trans.localScale = new Vector3(0.05f, dist, 0.05f); trans.Translate(new Vector3(0f, dist, 0f)); hint.SetActive(true); }
public StraightOutHintActivePart(Part part, Guid moduleId, GameObject hintObject, ModuleActiveStrut module) : base(part, moduleId) { HintObject = hintObject; Module = module; Duration = Config.Instance.StraightOutHintDuration; }
public static bool IsPossibleFreeAttachTarget(this ModuleActiveStrut origin, Vector3 mousePosition) { var raycast = PerformRaycast(origin.Origin.position, mousePosition, origin.RealModelForward); return(raycast.HitResult && raycast.DistanceFromOrigin <= Config.Instance.MaxDistance && raycast.RayAngle <= Config.Instance.MaxAngle); }
public static List <ModuleActiveStrut> GetAllConnectedTargeters(this ModuleActiveStrut target) { return (GetAllActiveStruts() .Where(m => !m.IsTargetOnly && m.Mode == Mode.Linked && m.Target != null && m.Target == target) .ToList()); }
public static void UnlinkAllConnectedTargeters(this ModuleActiveStrut target) { var allTargeters = target.GetAllConnectedTargeters(); foreach (var moduleActiveStrut in allTargeters) { moduleActiveStrut.Unlink(); } }
public static List <ModuleActiveStrut> GetAllPossibleTargets(this ModuleActiveStrut origin) { Debug.Log("[IRAS] there are " + GetAllActiveStruts().Count + " active struts"); foreach (var moduleActiveStrut in GetAllActiveStruts()) { Debug.Log("[IRAS] module with ID " + moduleActiveStrut.ID + " is a possible target: " + origin.IsPossibleTarget(moduleActiveStrut)); } return (GetAllActiveStruts().Where(m => m.ID != origin.ID && origin.IsPossibleTarget(m)).Select(m => m).ToList()); }
public static bool IsPossibleTarget(this ModuleActiveStrut origin, ModuleActiveStrut possibleTarget) { if (possibleTarget.IsConnectionFree || (possibleTarget.Targeter != null && possibleTarget.Targeter.ID == origin.ID) || (possibleTarget.Target != null && possibleTarget.Target.ID == origin.ID)) { var raycast = PerformRaycast(origin.Origin.position, possibleTarget.Origin.position, origin.IsFlexible ? origin.Origin.up : origin.RealModelForward, origin.part); return(raycast.HitResult && raycast.HittedPart == possibleTarget.part && raycast.DistanceFromOrigin <= Config.Instance.MaxDistance && raycast.RayAngle <= Config.Instance.MaxAngle); } return(false); }
public static FreeAttachTargetCheck CheckFreeAttachPoint(this ModuleActiveStrut origin) { var raycast = PerformRaycast(origin.Origin.position, origin.FreeAttachTarget.PartOrigin.position, origin.RealModelForward); if (raycast.HitResult) { var distOk = raycast.DistanceFromOrigin <= Config.Instance.MaxDistance; return(new FreeAttachTargetCheck { TargetPart = raycast.HittedPart, HitResult = distOk }); } return(new FreeAttachTargetCheck { TargetPart = null, HitResult = false }); }
private static GameObject CreateStraightOutHintForPart(ModuleActiveStrut module) { var go = GameObject.CreatePrimitive(PrimitiveType.Cylinder); go.SetActive(false); go.name = Guid.NewGuid().ToString(); DestroyImmediate(go.collider); var connDim = Config.Instance.ConnectorDimension; go.transform.localScale = new Vector3(connDim, connDim, connDim); var mr = go.GetComponent <MeshRenderer>(); mr.name = go.name; mr.material = new Material(Shader.Find("Transparent/Diffuse")) { color = Color.blue.MakeColorTransparent(Config.Instance.ColorTransparency) }; //Debug.Log ("[IRAS] creating hint, color transparency:" + Config.Instance.ColorTransparency); UpdateStraightOutHint(module, go); return(go); }
public static bool AnyTargetersConnected(this ModuleActiveStrut target) { return (GetAllActiveStruts() .Any(m => !m.IsTargetOnly && m.Mode == Mode.Linked && m.Target != null && m.Target == target)); }