示例#1
0
        public void onPartUnpack(Part part)
        {
            Pump p = Pumps.FirstOrDefault(pump => pump.partID == part.uid && pump.vesselID == part.vessel.id);

            if (p != null)
            {
                p.part = part;
                PumpNetwork network = PumpNetwork.FindNetwork(part.vessel);

                if (network != null)
                {
                }
            }
        }
示例#2
0
        public void ConnectVessel(Vessel from, Vessel to)
        {
            if (!Connections.ContainsKey(from))
            {
                Connections.Add(from, new List <Vessel>());
            }
            if (!Connections.ContainsKey(to))
            {
                Connections.Add(to, new List <Vessel>());
            }
            if (!Connections[from].Contains(to))
            {
                Connections[from].Add(to);
            }
            if (!Connections[to].Contains(from))
            {
                Connections[to].Add(from);
            }

            if (!ConnectedVessels.Contains(from))
            {
                PumpNetwork origNetwork = Networks.FirstOrDefault(pn => pn.VesselInNetwork(from));
                if (origNetwork != null)
                {
                    ConnectedVessels.AddRange(origNetwork.ConnectedVessels);
                    Pumps.AddRange(origNetwork.Pumps);
                    foreach (var kvp in origNetwork.Connections)
                    {
                        Connections.Add(kvp.Key, kvp.Value);
                    }
                    Networks.Remove(origNetwork);
                }
                else
                {
                    ConnectedVessels.Add(from);
                }
            }
        }
示例#3
0
        public void DisconnectVessel(Vessel from, Vessel to)
        {
            Connections[from].Remove(to);
            Connections[to].Remove(from);
            bool connected = WalkGraph(from).Contains(to);

            if (!connected)
            {
                PumpNetwork newNet = new PumpNetwork();
                newNet.ConnectedVessels = WalkGraph(to).ToList();
                ConnectedVessels        = WalkGraph(from).ToList();
                ILookup <Vessel, Pump> vp = Pumps.ToLookup(p => p.part.vessel);
                newNet.Pumps = newNet.ConnectedVessels.SelectMany(v => vp[v]).ToList();
                Pumps        = ConnectedVessels.SelectMany(v => vp[v]).ToList();
                foreach (var v in Connections.Keys.ToList())
                {
                    if (!ConnectedVessels.Contains(v))
                    {
                        newNet.Connections.Add(v, Connections[v]);
                        Connections.Remove(v);
                    }
                }
            }
        }
示例#4
0
        public void DisconnectVessel(Vessel from, Vessel to)
        {
            Connections[from].Remove(to);
            Connections[to].Remove(from);
            bool connected = WalkGraph(from).Contains(to);
			if(!connected)
			{
				PumpNetwork newNet = new PumpNetwork();
				newNet.ConnectedVessels = WalkGraph(to).ToList();
				ConnectedVessels = WalkGraph(from).ToList();
				ILookup<Vessel, Pump> vp = Pumps.ToLookup(p => p.part.vessel);
				newNet.Pumps = newNet.ConnectedVessels.SelectMany(v => vp[v]).ToList();
				Pumps = ConnectedVessels.SelectMany(v => vp[v]).ToList();
				foreach(var v in Connections.Keys.ToList())
				{
					if(!ConnectedVessels.Contains(v))
					{
						newNet.Connections.Add(v, Connections[v]);
						Connections.Remove(v);
					}
				}

			}
        }