예제 #1
0
        public bool CanTransferTo(PackedVessel vsl, HangarPassage other, PassageNode requesting_node = null)
        {
            if (!enabled)
            {
                return(false);
            }
            if (this == other)
            {
                return(CanHold(vsl));
            }
            var  this_node    = requesting_node?.OtherNode;
            bool can_transfer = false;

            foreach (var pn in Nodes.Values)
            {
                if (pn == this_node)
                {
                    continue;
                }
                var other_passage = pn.CanPassThrough(vsl);
                if (other_passage != null)
                {
                    can_transfer = other_passage.CanTransferTo(vsl, other, pn);
                }
                if (can_transfer)
                {
                    break;
                }
            }
            return(can_transfer);
        }
예제 #2
0
        public Part ConnectedPartWithModule <ModuleT>(PassageNode requesting_node = null)
            where ModuleT : PartModule
        {
            if (part.HasModule <ModuleT>())
            {
                return(part);
            }
            var this_node = requesting_node?.OtherNode;

            foreach (var pn in Nodes.Values)
            {
                if (pn == this_node)
                {
                    continue;
                }
                var other_passage = pn.OtherPassage;
                if (other_passage == null)
                {
                    continue;
                }
                var p = other_passage.ConnectedPartWithModule <ModuleT>(pn);
                if (p != null)
                {
                    return(p);
                }
            }
            return(null);
        }
예제 #3
0
 public override void Load(ConfigNode node)
 {
     base.Load(node);
     Nodes.Clear();
     foreach (ConfigNode n in node.GetNodes(PassageNode.NODE_NAME))
     {
         var pn = new PassageNode(part);
         pn.Load(n);
         Nodes.Add(pn.NodeID, pn);
     }
 }
예제 #4
0
 void init_nodes()
 {
     Nodes.Clear();
     if (ModuleConfig == null)
     {
         this.Log("ModuleConfig is null. THIS SHOULD NEVER HAPPEN!"); return;
     }
     foreach (ConfigNode n in ModuleConfig.GetNodes(PassageNode.NODE_NAME))
     {
         var pn = new PassageNode(part);
         pn.Load(n);
         Nodes.Add(pn.NodeID, pn);
     }
 }
예제 #5
0
        public List <HangarPassage> ConnectedPassages(PassageNode requesting_node = null)
        {
            var this_node = requesting_node?.OtherNode;
            var C         = new List <HangarPassage> {
                this
            };

            foreach (var pn in Nodes.Values)
            {
                if (pn == this_node)
                {
                    continue;
                }
                var other_passage = pn.OtherPassage;
                if (other_passage != null)
                {
                    C.AddRange(other_passage.ConnectedPassages(pn));
                }
            }
            return(C);
        }