public static HashSet <IntrinsicElectronicData> SwitchCaseConnections(Vector2 searchVec, Matrix matrix, HashSet <PowerTypeCategory> CanConnectTo, Connection ConnPoints, IntrinsicElectronicData OIinheritance, HashSet <IntrinsicElectronicData> connections) { var searchVecInt = new Vector3Int((int)searchVec.x, (int)searchVec.y, 0); { // LogError Duplicate wires var eConnsAtSearchVec = matrix.GetElectricalConnections(searchVecInt); foreach (var con in eConnsAtSearchVec) { if (OIinheritance != con) { if ((OIinheritance.WireEndA == con.WireEndA && OIinheritance.WireEndB == con.WireEndB) || (OIinheritance.WireEndA == con.WireEndB && OIinheritance.WireEndB == con.WireEndA)) { Logger.LogErrorFormat("{0} < duplicate Please remove {1}", Category.Electrical, searchVecInt, OIinheritance); } } } eConnsAtSearchVec.Clear(); ElectricalPool.PooledFPCList.Add(eConnsAtSearchVec); } // Connect to machine connnectors if (ConnPoints == Connection.MachineConnect) { foreach (var dir in MachineConnectorDirections) { var pos = searchVecInt + dir; var conns = matrix.GetElectricalConnections(pos); foreach (var con in conns) { if (OIinheritance != con && CanConnectTo.Contains(con.Categorytype) && ConnectionMap.IsConnectedToTile(Connection.MachineConnect, con.GetConnPoints())) { connections.Add(con); } } conns.Clear(); ElectricalPool.PooledFPCList.Add(conns); } return(connections); } // Make a vector representing the connection direction Vector3Int connVectorInt; switch (ConnPoints) { case Connection.North: { connVectorInt = new Vector3Int(0, 1, 0); break; } case Connection.NorthEast: { connVectorInt = new Vector3Int(1, 1, 0); break; } case Connection.East: { connVectorInt = new Vector3Int(1, 0, 0); break; } case Connection.SouthEast: { connVectorInt = new Vector3Int(1, -1, 0); break; } case Connection.South: { connVectorInt = new Vector3Int(0, -1, 0); break; } case Connection.SouthWest: { connVectorInt = new Vector3Int(-1, -1, 0); break; } case Connection.West: { connVectorInt = new Vector3Int(-1, 0, 0); break; } case Connection.NorthWest: { connVectorInt = new Vector3Int(-1, 1, 0); break; } case Connection.Overlap: { connVectorInt = new Vector3Int(0, 0, 0); break; } default: { // No defined behaviour for any other types return(connections); } } Vector3Int position = searchVecInt + connVectorInt; // Connect wires { var eConnsAtPosition = matrix.GetElectricalConnections(position); bool connectionsAdded = false; foreach (var con in eConnsAtPosition) { if (CanConnectTo.Contains(con.Categorytype) && ConnectionMap.IsConnectedToTile(ConnPoints, con.GetConnPoints())) { connections.Add(con); connectionsAdded = true; } } eConnsAtPosition.Clear(); ElectricalPool.PooledFPCList.Add(eConnsAtPosition); if (connectionsAdded) { return(connections); } } // Connect to overlap { var eConnsAtSearchVec = matrix.GetElectricalConnections(searchVecInt); foreach (var con in eConnsAtSearchVec) { if (OIinheritance != con && CanConnectTo.Contains(con.Categorytype) && ConnectionMap.IsConnectedToTileOverlap(ConnPoints, con.GetConnPoints())) { connections.Add(con); } } eConnsAtSearchVec.Clear(); ElectricalPool.PooledFPCList.Add(eConnsAtSearchVec); } return(connections); }
public static HashSet <ElectricalOIinheritance> SwitchCaseConnections(Vector2 searchVec, Matrix matrix, HashSet <PowerTypeCategory> CanConnectTo, Connection ConnPoints, ElectricalOIinheritance OIinheritance) { HashSet <ElectricalOIinheritance> connections = new HashSet <ElectricalOIinheritance>(); Connection Direction = Connection.Overlap; Vector3Int Position = new Vector3Int(); bool MachineConnect = false; switch (ConnPoints) { case Connection.North: { Direction = Connection.North; Position = new Vector3Int((int)searchVec.x + 0, (int)searchVec.y + 1, 0); } break; case Connection.NorthEast: { Direction = Connection.NorthEast; Position = new Vector3Int((int)searchVec.x + 1, (int)searchVec.y + 1, 0); } break; case Connection.East: { Direction = Connection.East; Position = new Vector3Int((int)searchVec.x + 1, (int)searchVec.y + 0, 0); } break; case Connection.SouthEast: { Direction = Connection.SouthEast; Position = new Vector3Int((int)searchVec.x + 1, (int)searchVec.y - 1, 0); } break; case Connection.South: { Direction = Connection.South; Position = new Vector3Int((int)searchVec.x + 0, (int)searchVec.y - 1, 0); } break; case Connection.SouthWest: { Direction = Connection.SouthWest; Position = new Vector3Int((int)searchVec.x + -1, (int)searchVec.y - 1, 0); } break; case Connection.West: { Direction = Connection.West; Position = new Vector3Int((int)searchVec.x + -1, (int)searchVec.y + 0, 0); } break; case Connection.NorthWest: { Direction = Connection.NorthWest; Position = new Vector3Int((int)searchVec.x + -1, (int)searchVec.y + 1, 0); } break; case Connection.Overlap: { Direction = Connection.Overlap; Position = new Vector3Int((int)searchVec.x + 0, (int)searchVec.y + 0, 0); } break; case Connection.MachineConnect: { Direction = Connection.MachineConnect; MachineConnect = true; } break; } Vector3Int PositionE = new Vector3Int((int)searchVec.x, (int)searchVec.y, 0); var Econns = matrix.GetElectricalConnections(PositionE); foreach (var con in Econns) { if (OIinheritance != con) { if ((OIinheritance.WireEndA == con.WireEndA && OIinheritance.WireEndB == con.WireEndB) || (OIinheritance.WireEndA == con.WireEndB && OIinheritance.WireEndB == con.WireEndA)) { Logger.LogErrorFormat("{0} < duplicate Please remove {1}", Category.Electrical, PositionE, OIinheritance.InData.Categorytype); } } } if (!MachineConnect) { var conns = matrix.GetElectricalConnections(Position); foreach (var con in conns) { if (CanConnectTo.Contains(con.InData.Categorytype)) { if (ConnectionMap.IsConnectedToTile(Direction, con.GetConnPoints())) { connections.Add(con); } } } if (connections.Count == 0) { Position = new Vector3Int((int)searchVec.x, (int)searchVec.y, 0); conns = matrix.GetElectricalConnections(Position); foreach (var con in conns) { if (OIinheritance != con) { if (CanConnectTo.Contains(con.InData.Categorytype)) { if (ConnectionMap.IsConnectedToTileOverlap(Direction, con.GetConnPoints())) { connections.Add(con); } } } } } } else { for (int x = 0; x < 3; x++) { for (int y = 0; y < 3; y++) { Vector3Int pos = new Vector3Int((int)searchVec.x + (x - 1), (int)searchVec.y + (y - 1), 0); var conns = matrix.GetElectricalConnections(pos); foreach (var con in conns) { if (OIinheritance != con) { if (CanConnectTo.Contains(con.InData.Categorytype)) { if (ConnectionMap.IsConnectedToTile(Direction, con.GetConnPoints())) { connections.Add(con); } } } } } } } return(connections); }
public static HashSet <IntrinsicElectronicData> SwitchCaseConnections(Vector2 searchVec, Matrix matrix, HashSet <PowerTypeCategory> CanConnectTo, Connection connectionPoint, IntrinsicElectronicData OIinheritance, HashSet <IntrinsicElectronicData> connections, // used in SurroundingTiles connection Connection otherConnectionPoint = Connection.NA) { var searchVecInt = new Vector3Int((int)searchVec.x, (int)searchVec.y, 0); { // LogError Duplicate wires var eConnsAtSearchVec = matrix.GetElectricalConnections(searchVecInt); foreach (var con in eConnsAtSearchVec) { if (OIinheritance != con) { if ((OIinheritance.WireEndA == con.WireEndA && OIinheritance.WireEndB == con.WireEndB) || (OIinheritance.WireEndA == con.WireEndB && OIinheritance.WireEndB == con.WireEndA)) { Logger.LogErrorFormat("{0} < duplicate Please remove {1}", Category.Electrical, searchVecInt, OIinheritance); } } } eConnsAtSearchVec.Clear(); ElectricalPool.PooledFPCList.Add(eConnsAtSearchVec); } if (connectionPoint == Connection.SurroundingTiles) { foreach (var dir in NeighbourDirections) { // check all nearby connections except connection that is specified in other wire end if (dir.Key == otherConnectionPoint) { continue; } var pos = searchVecInt + dir.Value; var conns = matrix.GetElectricalConnections(pos); // get connections pointing towards our tile [ex. if neighbour is at north, get all south connections(SW, S, SE)] HashSet <Connection> possibleConnections = ConnectionMap.GetConnectionsTargeting(dir.Key); if (possibleConnections != null) { foreach (var con in conns) { if (OIinheritance != con && CanConnectTo.Contains(con.Categorytype) // check if possibleConnections contains our WireEnd A or B && (possibleConnections.Contains(con.WireEndA) || possibleConnections.Contains(con.WireEndB)) // check if contains to avoid errors && !connections.Contains(con)) { connections.Add(con); } } } conns.Clear(); ElectricalPool.PooledFPCList.Add(conns); } return(connections); } // Connect to machine connnectors if (connectionPoint == Connection.MachineConnect) { foreach (var dir in MachineConnectorDirections) { var pos = searchVecInt + dir; var conns = matrix.GetElectricalConnections(pos); foreach (var con in conns) { if (OIinheritance != con && CanConnectTo.Contains(con.Categorytype) && ConnectionMap.IsConnectedToTile(Connection.MachineConnect, con.GetConnPoints()) && !connections.Contains(con)) { connections.Add(con); } } conns.Clear(); ElectricalPool.PooledFPCList.Add(conns); } return(connections); } // Make a vector representing the connection direction Vector3Int connVectorInt = ConnectionMap.GetDirectionFromConnection(connectionPoint); Vector3Int position = searchVecInt + connVectorInt; // Connect wires { var eConnsAtPosition = matrix.GetElectricalConnections(position); bool connectionsAdded = false; foreach (var con in eConnsAtPosition) { if (CanConnectTo.Contains(con.Categorytype) && ConnectionMap.IsConnectedToTile(connectionPoint, con.GetConnPoints())) { connections.Add(con); connectionsAdded = true; } } eConnsAtPosition.Clear(); ElectricalPool.PooledFPCList.Add(eConnsAtPosition); if (connectionsAdded) { return(connections); } } // Connect to overlap { var eConnsAtSearchVec = matrix.GetElectricalConnections(searchVecInt); foreach (var con in eConnsAtSearchVec) { if (OIinheritance != con && CanConnectTo.Contains(con.Categorytype) && ConnectionMap.IsConnectedToTileOverlap(connectionPoint, con.GetConnPoints())) { connections.Add(con); } } eConnsAtSearchVec.Clear(); ElectricalPool.PooledFPCList.Add(eConnsAtSearchVec); } return(connections); }
public static HashSet <IntrinsicElectronicData> SwitchCaseConnections(Vector2 searchVec, Matrix matrix, HashSet <PowerTypeCategory> CanConnectTo, Connection ConnPoints, IntrinsicElectronicData OIinheritance, HashSet <IntrinsicElectronicData> connections) { var Direction = Connection.Overlap; var Position = new Vector3Int(); var MachineConnect = false; switch (ConnPoints) { case Connection.North: { Direction = Connection.North; Position = new Vector3Int((int)searchVec.x + 0, (int)searchVec.y + 1, 0); } break; case Connection.NorthEast: { Direction = Connection.NorthEast; Position = new Vector3Int((int)searchVec.x + 1, (int)searchVec.y + 1, 0); } break; case Connection.East: { Direction = Connection.East; Position = new Vector3Int((int)searchVec.x + 1, (int)searchVec.y + 0, 0); } break; case Connection.SouthEast: { Direction = Connection.SouthEast; Position = new Vector3Int((int)searchVec.x + 1, (int)searchVec.y - 1, 0); } break; case Connection.South: { Direction = Connection.South; Position = new Vector3Int((int)searchVec.x + 0, (int)searchVec.y - 1, 0); } break; case Connection.SouthWest: { Direction = Connection.SouthWest; Position = new Vector3Int((int)searchVec.x + -1, (int)searchVec.y - 1, 0); } break; case Connection.West: { Direction = Connection.West; Position = new Vector3Int((int)searchVec.x + -1, (int)searchVec.y + 0, 0); } break; case Connection.NorthWest: { Direction = Connection.NorthWest; Position = new Vector3Int((int)searchVec.x + -1, (int)searchVec.y + 1, 0); } break; case Connection.Overlap: { Direction = Connection.Overlap; Position = new Vector3Int((int)searchVec.x + 0, (int)searchVec.y + 0, 0); } break; case Connection.MachineConnect: { Direction = Connection.MachineConnect; MachineConnect = true; } break; } var PositionE = new Vector3Int((int)searchVec.x, (int)searchVec.y, 0); var Econns = matrix.GetElectricalConnections(PositionE); foreach (var con in Econns) { if (OIinheritance != con) { if (OIinheritance.WireEndA == con.WireEndA && OIinheritance.WireEndB == con.WireEndB || OIinheritance.WireEndA == con.WireEndB && OIinheritance.WireEndB == con.WireEndA) { Logger.LogErrorFormat("{0} < duplicate Please remove {1}", Category.Electrical, PositionE, OIinheritance); } } } Econns.Clear(); ElectricalPool.PooledFPCList.Add(Econns); if (!MachineConnect) { var conns = matrix.GetElectricalConnections(Position); foreach (var con in conns) { if (CanConnectTo.Contains(con.Categorytype)) { if (ConnectionMap.IsConnectedToTile(Direction, con.GetConnPoints())) { connections.Add(con); } } } conns.Clear(); ElectricalPool.PooledFPCList.Add(conns); if (connections.Count == 0) { Position = new Vector3Int((int)searchVec.x, (int)searchVec.y, 0); conns = matrix.GetElectricalConnections(Position); foreach (var con in conns) { if (OIinheritance != con) { if (CanConnectTo.Contains(con.Categorytype)) { if (ConnectionMap.IsConnectedToTileOverlap(Direction, con.GetConnPoints())) { connections.Add(con); } } } } conns.Clear(); ElectricalPool.PooledFPCList.Add(conns); } } else { foreach (var Direction_ in MachineConnectorDirections) { var pos = new Vector3Int((int)searchVec.x + (int)Direction_.x, (int)searchVec.y + (int)Direction_.y, 0); var conns = matrix.GetElectricalConnections(pos); foreach (var con in conns) { if (OIinheritance != con) { if (CanConnectTo.Contains(con.Categorytype)) { if (ConnectionMap.IsConnectedToTile(Direction, con.GetConnPoints())) { connections.Add(con); } } } } conns.Clear(); ElectricalPool.PooledFPCList.Add(conns); } } return(connections); }