Example #1
0
        internal bool acceptsCurrentFrom(WireCurrentTransfer wireCurrentTransfer)
        {
            if (currentTransfer == WireCurrentTransfer.NONE)
            {
                return(true);
            }

            else if (wireCurrentTransfer == WireCurrentTransfer.DOWN && transfersCurrentTo(WireCurrentTransfer.DOWN))
            {
                return(true);
            }
            else if (wireCurrentTransfer == WireCurrentTransfer.UP && transfersCurrentTo(WireCurrentTransfer.UP))
            {
                return(true);
            }
            else if (wireCurrentTransfer == WireCurrentTransfer.LEFT && transfersCurrentTo(WireCurrentTransfer.LEFT))
            {
                return(true);
            }
            else if (wireCurrentTransfer == WireCurrentTransfer.RIGHT && transfersCurrentTo(WireCurrentTransfer.RIGHT))
            {
                return(true);
            }
            else
            {
                return(false);
            }
        }
Example #2
0
        internal bool acceptsCurrentFrom(WireCurrentTransfer wireCurrentTransfer)
        {
            if (this.currentTransfer == WireCurrentTransfer.NONE)
                return true;

            else if (wireCurrentTransfer == WireCurrentTransfer.DOWN && this.transfersCurrentTo(WireCurrentTransfer.DOWN))
                return true;
            else if (wireCurrentTransfer == WireCurrentTransfer.UP && this.transfersCurrentTo(WireCurrentTransfer.UP))
                return true;
            else if (wireCurrentTransfer == WireCurrentTransfer.LEFT && this.transfersCurrentTo(WireCurrentTransfer.LEFT))
                return true;
            else if (wireCurrentTransfer == WireCurrentTransfer.RIGHT && this.transfersCurrentTo(WireCurrentTransfer.RIGHT))
                return true;
            else
                return false;
        }
Example #3
0
File: Form1.cs Project: habb0/Bfly
 internal void AddOrUpdateWire(int x, int y, CurrentType type, WireCurrentTransfer transfer)
 {
     List<Point> result = null;
     result = wireSolver.AddOrUpdateWire(x, y, type, transfer);
     foreach (Point t in result)
     {
         try
         {
             yaaaay[t].updateWireState(wireSolver.getWireTransfer(t));
         }
         catch { }
     }
     StringBuilder sb = new StringBuilder();
     foreach (Point t in result)
     {
         sb.AppendLine(t.ToString());
     }
 }
Example #4
0
        public List <Point> AddOrUpdateWire(int x, int y, CurrentType newCurrent, WireCurrentTransfer currentTransfer)
        {
            var result      = new LinkedList <WireTransfer>();
            var updatedWire = getWireTransfer(new Point(x, y));

            if (newCurrent == CurrentType.ON)
            {
            }
            else if (newCurrent == CurrentType.SENDER)
            {
                currentTransfer = WireCurrentTransfer.DOWN | WireCurrentTransfer.LEFT | WireCurrentTransfer.RIGHT | WireCurrentTransfer.UP;
                updatedWire.setCurrentTransfer(currentTransfer);
                updatedWire.setCurrent(CurrentType.SENDER);
                updatePowerGrid(updatedWire, ref result);
            }
            else if (newCurrent == CurrentType.OFF)
            {
                var neighbours = new WireTransfer[4];
                storeNeighbours(updatedWire, neighbours, true);
                updatedWire.setCurrent(CurrentType.OFF);
                updatedWire.setCurrentTransfer(currentTransfer);
                updatePowerGrid(updatedWire, ref result);
                for (var i = 0; i < 4; i++)
                {
                    if (neighbours[i] == null)
                    {
                        continue;
                    }
                    updatePowerGrid(neighbours[i], ref result);
                }
            }
            var finalResult = new List <Point>();

            foreach (var t in result)
            {
                if (!finalResult.Contains(t.location))
                {
                    finalResult.Add(t.location);
                }
            }
            return(finalResult);
        }
Example #5
0
        internal void AddOrUpdateWire(int x, int y, CurrentType type, WireCurrentTransfer transfer)
        {
            List <Point> result = null;

            result = wireSolver.AddOrUpdateWire(x, y, type, transfer);
            foreach (Point t in result)
            {
                try
                {
                    yaaaay[t].updateWireState(wireSolver.getWireTransfer(t));
                }
                catch { }
            }
            StringBuilder sb = new StringBuilder();

            foreach (Point t in result)
            {
                sb.AppendLine(t.ToString());
            }
        }
Example #6
0
        internal void TriggerOnWire(Point location)
        {
            WireTransfer transferItem = wireSlower.getWireTransfer(location);

            List <Point>        pointsToTrigger;
            WireCurrentTransfer transferType = WireCurrentTransfer.DOWN | WireCurrentTransfer.LEFT | WireCurrentTransfer.RIGHT | WireCurrentTransfer.UP;

            if (transferItem.isPowered() && transferItem.getTransfer() == transferType)
            {
                pointsToTrigger = wireSlower.RemoveWire(location.X, location.Y);
                //form.Remove(location.X, location.Y);
            }
            else
            {
                pointsToTrigger = wireSlower.AddOrUpdateWire(location.X, location.Y, CurrentType.SENDER, WireCurrentTransfer.NONE);
                //form.AddOrUpdateWire(location.X, location.Y, CurrentType.SENDER, WireCurrentTransfer.NONE);
            }

            HandleItems(pointsToTrigger, location);
        }
Example #7
0
 public List<Point> AddOrUpdateWire(int x, int y, CurrentType newCurrent, WireCurrentTransfer currentTransfer)
 {
     LinkedList<WireTransfer> result = new LinkedList<WireTransfer>();
     WireTransfer updatedWire = getWireTransfer(new Point(x, y));
     if(newCurrent == CurrentType.ON)
     {
     }
     else if (newCurrent == CurrentType.SENDER)
     {
         currentTransfer = WireCurrentTransfer.DOWN | WireCurrentTransfer.LEFT | WireCurrentTransfer.RIGHT | WireCurrentTransfer.UP;
         updatedWire.setCurrentTransfer(currentTransfer);
         updatedWire.setCurrent(CurrentType.SENDER);
         updatePowerGrid(updatedWire, ref result);
     }
     else if (newCurrent == CurrentType.OFF)
     {
         WireTransfer[] neighbours = new WireTransfer[4];
         storeNeighbours(updatedWire, neighbours, true);
         updatedWire.setCurrent(CurrentType.OFF);
         updatedWire.setCurrentTransfer(currentTransfer);
         updatePowerGrid(updatedWire, ref result);
         for (int i = 0; i < 4; i++)
         {
             if (neighbours[i] == null)
                 continue;
             updatePowerGrid(neighbours[i], ref result);
         }
     }
     List<Point> finalResult = new List<Point>();
     foreach (WireTransfer t in result)
     {
         if (!finalResult.Contains(t.location))
             finalResult.Add(t.location);
     }
     return finalResult;
 }
Example #8
0
 internal void setCurrentTransfer(WireCurrentTransfer wireCurrentTransfer)
 {
     currentTransfer = wireCurrentTransfer;
 }
Example #9
0
 internal bool transfersCurrentTo(WireCurrentTransfer current)
 {
     return((current & currentTransfer) == current);
 }
Example #10
0
 public WireTransfer(int x, int y, WireCurrentTransfer currentTransfer)
 {
     location             = new Point(x, y);
     this.currentTransfer = currentTransfer;
     Current = CurrentType.OFF;
 }
Example #11
0
        internal void AddWire(RoomItem item, Point location, int rotation, InteractionType wireType)
        {
            WireCurrentTransfer transfer = WireCurrentTransfer.NONE;

            switch (wireType)
            {
            case InteractionType.wireCenter:
            {
                transfer = WireCurrentTransfer.DOWN | WireCurrentTransfer.LEFT | WireCurrentTransfer.RIGHT | WireCurrentTransfer.UP;
                break;
            }

            case InteractionType.wireCorner:
            {
                switch (rotation)
                {
                default:
                {
                    transfer = WireCurrentTransfer.DOWN | WireCurrentTransfer.RIGHT;
                    break;
                }

                case 2:
                {
                    transfer = WireCurrentTransfer.DOWN | WireCurrentTransfer.LEFT;
                    break;
                }

                case 4:
                {
                    transfer = WireCurrentTransfer.UP | WireCurrentTransfer.LEFT;
                    break;
                }

                case 6:
                {
                    transfer = WireCurrentTransfer.RIGHT | WireCurrentTransfer.UP;
                    break;
                }
                }

                break;
            }

            case InteractionType.wireSplitter:
            {
                switch (rotation)
                {
                default:
                {
                    transfer = WireCurrentTransfer.UP | WireCurrentTransfer.DOWN | WireCurrentTransfer.RIGHT;
                    break;
                }

                case 2:
                {
                    transfer = WireCurrentTransfer.LEFT | WireCurrentTransfer.RIGHT | WireCurrentTransfer.DOWN;
                    break;
                }

                case 4:
                {
                    transfer = WireCurrentTransfer.UP | WireCurrentTransfer.DOWN | WireCurrentTransfer.LEFT;
                    break;
                }

                case 6:
                {
                    transfer = WireCurrentTransfer.LEFT | WireCurrentTransfer.RIGHT | WireCurrentTransfer.UP;
                    break;
                }
                }
                break;
            }

            case InteractionType.wireStandard:
            {
                switch (rotation)
                {
                default:
                case 0:
                case 4:
                {
                    transfer = WireCurrentTransfer.UP | WireCurrentTransfer.DOWN;
                    break;
                }

                case 2:
                case 6:
                {
                    transfer = WireCurrentTransfer.LEFT | WireCurrentTransfer.RIGHT;
                    break;
                }
                }
                break;
            }
            }

            if (transfer == WireCurrentTransfer.NONE)
            {
                return;
            }

            List <Point> pointsToTrigger = wireSlower.AddOrUpdateWire(location.X, location.Y, CurrentType.OFF, transfer);

            //form.AddOrUpdateWire(location.X, location.Y, CurrentType.OFF, transfer);
            HandleItems(pointsToTrigger);
        }
Example #12
0
 internal void setCurrentTransfer(WireCurrentTransfer wireCurrentTransfer)
 {
     this.currentTransfer = wireCurrentTransfer;
 }
Example #13
0
 public WireTransfer(int x, int y, WireCurrentTransfer currentTransfer)
 {
     this.location = new Point(x, y);
     this.currentTransfer = currentTransfer;
     this.Current = CurrentType.OFF;
 }
Example #14
0
 internal bool transfersCurrentTo(WireCurrentTransfer current)
 {
     return ((current & this.currentTransfer) == current);
 }