public static MixAndVolume PipeOrNet(PipeData pipe)
 {
     if (pipe.NetCompatible && pipe.OnNet != null)
     {
         return(pipe.OnNet.mixAndVolume);
     }
     else
     {
         return(pipe.mixAndVolume);
     }
 }
        //Stuff for pipes to go in here

        public void Initialise(PipeTile DataToTake, MetaDataNode metaDataNode, Vector3Int searchVec, Matrix locatedon, int RotationOffset)
        {
            RelatedTile = DataToTake;
            IsOn        = metaDataNode;
            pipeData    = new PipeData();
            pipeData.SetUp(DataToTake, RotationOffset);
            pipeData.pipeNode = this;
            NodeLocation      = searchVec;
            LocatedOn         = locatedon;
            pipeData.OnEnable();
        }
        public static bool CanEqualiseWith(PipeData pipe1, PipeData pipe2)
        {
            var PipeDirectio   = PipesToDirections(pipe1, pipe2);
            int pipe2Direction = (int)PipeDirectio + 2;

            if (pipe2Direction > 3)
            {
                pipe2Direction -= 4;
            }

            return(pipe2.Connections.Directions[pipe2Direction].PortType.HasFlag(OutputType.Can_Equalise_With));
        }
Beispiel #4
0
        public void RemovePipe(PipeData pipeData)
        {
            pipeData.OnNet = null;

            var Outmix = mixAndVolume.Take(pipeData.mixAndVolume);

            Covering.Remove(pipeData);

            pipeData.SpillContent(Outmix);

            SplitPipeNets();
        }
        public void ConnectedRemove(PipeData OldConnection)
        {
            ConnectedPipes.Remove(OldConnection);

            if (NetCompatible == false)
            {
                Outputs.Remove(OldConnection);
            }

            foreach (var Connection in Connections.Directions)
            {
                if (Connection.Connected == OldConnection)
                {
                    Connection.Connected = null;
                }
            }

            //What about net outputs then That should be handle as part of the Reconstruction of the net
        }
        public static List <PipeData> GetConnectedPipes(List <PipeData> ToPutInto, PipeData pipeData, Vector3Int Location,
                                                        Matrix LocatedOn)
        {
            for (var i = 0; i < pipeData.Connections.Directions.Length; i++)
            {
                if (pipeData.Connections.Directions[i].Bool)
                {
                    Vector3Int SearchVector = Vector3Int.zero;
                    switch (i)
                    {
                    case (int)PipeDirection.North:
                        SearchVector = Vector3Int.up;
                        break;

                    case (int)PipeDirection.East:
                        SearchVector = Vector3Int.right;
                        break;

                    case (int)PipeDirection.South:
                        SearchVector = Vector3Int.down;
                        break;

                    case (int)PipeDirection.West:
                        SearchVector = Vector3Int.left;
                        break;
                    }

                    SearchVector   = Location + SearchVector;
                    SearchVector.z = 0;
                    var PipesOnTile = LocatedOn.GetPipeConnections(SearchVector);
                    foreach (var pipe in PipesOnTile)
                    {
                        if (ArePipeCompatible(pipeData, i, pipe, out var pipe1ConnectAndType))
                        {
                            pipe1ConnectAndType.Connected = pipe;
                            ToPutInto.Add(pipe);
                        }
                    }
                }
            }

            return(ToPutInto);
        }
Beispiel #7
0
        public void SpreadPipenet(PipeData pipe)
        {
            List <PipeData> foundPipes = new List <PipeData>();

            foundPipes.Add(pipe);
            while (foundPipes.Count > 0)
            {
                var foundPipe = foundPipes[0];
                AddPipe(foundPipe);
                foundPipes.Remove(foundPipe);
                for (int i = 0; i < foundPipe.ConnectedPipes.Count; i++)
                {
                    var nextPipe = foundPipe.ConnectedPipes[i];
                    if (nextPipe.NetCompatible && nextPipe.OnNet == null)
                    {
                        foundPipes.Add(nextPipe);
                    }
                }
            }
        }
        public void ConnectedAdd(PipeData NewConnection)
        {
            ConnectedPipes.Add(NewConnection);
            var pipe1Connection =
                this.Connections.Directions[(int)PipeFunctions.PipesToDirections(this, NewConnection)];

            pipe1Connection.Connected = NewConnection;


            if (NetCompatible == false)
            {
                //This is a special pipe
                if (NewConnection.NetCompatible == false)
                {
                    //NewConnection is a special pipe
                    if (PipeFunctions.IsPipeOutputTo(this, NewConnection) &&
                        PipeFunctions.CanEqualiseWith(this, NewConnection))
                    {
                        pipe1Connection.Connected = NewConnection;
                        Outputs.Add(NewConnection);
                    }
                }
                else
                {
                    //NewConnection is a Pipe net
                    if (PipeFunctions.IsPipeOutputTo(this, NewConnection))
                    {
                        //An input to the pipe net it does not need to be recorded
                        Outputs.Add(NewConnection);
                    }

                    if (this.Connections.Directions[(int)PipeFunctions.PipesToDirections(this, NewConnection)].PortType
                        .HasFlag(OutputType.Can_Equalise_With))
                    {
                        NewConnection.OnNet.AddEqualiseWith(this);
                    }
                }
            }
        }
Beispiel #9
0
        public static PipeDirection PipesToDirections(PipeData pipe1, PipeData pipe2)
        {
            var VectorDifference = pipe2.MatrixPos - pipe1.MatrixPos;

            if (VectorDifference == Vector3Int.up)
            {
                return(PipeDirection.North);
            }
            else if (VectorDifference == Vector3Int.right)
            {
                return(PipeDirection.East);
            }
            else if (VectorDifference == Vector3Int.down)
            {
                return(PipeDirection.South);
            }
            else if (VectorDifference == Vector3Int.left)
            {
                return(PipeDirection.West);
            }

            return(PipeDirection.North);
        }
        public static bool IsPipeOutputTo(PipeData pipe1, PipeData pipe2)
        {
            var Data = pipe1.Connections.Directions[(int)PipesToDirections(pipe1, pipe2)];

            return(Data.Bool && Data.PortType.HasFlag(OutputType.Output_Allowed));
        }
Beispiel #11
0
 public void RemoveEqualiseWith(PipeData pipeData)
 {
     CanEqualiseWith.Remove(pipeData);
     //Inputs.Remove(pipeData);
 }