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;
 }
Beispiel #3
0
        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);
        }
Beispiel #4
0
 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());
 }
Beispiel #5
0
        public static void UnlinkAllConnectedTargeters(this ModuleActiveStrut target)
        {
            var allTargeters = target.GetAllConnectedTargeters();

            foreach (var moduleActiveStrut in allTargeters)
            {
                moduleActiveStrut.Unlink();
            }
        }
Beispiel #6
0
 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());
 }
Beispiel #7
0
 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);
 }
Beispiel #8
0
        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);
        }
Beispiel #10
0
 public static bool AnyTargetersConnected(this ModuleActiveStrut target)
 {
     return
         (GetAllActiveStruts()
          .Any(m => !m.IsTargetOnly && m.Mode == Mode.Linked && m.Target != null && m.Target == target));
 }