示例#1
0
        private void First()
        {
            var connector = Tile(0);

            connector.South = GlueFactory.IncrementStopper(binaryValue, signal);

            var middleZ0 = Tile(1);

            connector.North = Bind(connector, middleZ0);
            middleZ0.South  = connector.North;


            var middleZ1 = Tile(2);

            middleZ0.Up   = Bind(middleZ0, middleZ1);
            middleZ1.Down = middleZ0.Up;


            var rightZ1 = Tile(3);

            middleZ1.East = Bind(middleZ1, rightZ1);
            rightZ1.West  = middleZ1.East;

            var rightZ0 = Tile(4);

            rightZ1.Down  = Bind(rightZ1, rightZ0);
            rightZ0.Up    = rightZ1.Down;
            rightZ0.North = GlueFactory.Copier(binaryValue, signal);
            tiles.AddRange(new [] { connector, middleZ0, middleZ1, rightZ0, rightZ1 });
        }
示例#2
0
 public Copier(string binaryValue, string signal)
 {
     this.binaryValue = binaryValue;
     this.signal      = signal;
     tiles            = new List <Tile>();
     startGlue        = GlueFactory.LeftHook();
 }
示例#3
0
        private void SetUp()
        {
            var previous = Guid.NewGuid();
            var results  = new List <Tile>();

            for (var i = 0; i < binaryValue.Length; i++)
            {
                var bit = binaryValue[i] == '0' ? (AbstractBit) new ZeroBit(binaryValue, i, Modes.Copy, signal) : new OneBit(binaryValue, i, Modes.Copy, signal);

                if (i == 0)
                {
                    bit.SouthGlue = GlueFactory.Copier(binaryValue, signal);
                }
                else
                {
                    bit.SouthGlue = new Glue(previous.ToString());
                }

                if (i + 1 == binaryValue.Length)
                {
                    bit.NorthGlue = startGlue;
                }
                else
                {
                    previous      = Guid.NewGuid();
                    bit.NorthGlue = new Glue(previous.ToString());
                }


                results.AddRange(bit.Tiles());
            }

            tiles.AddRange(results);
        }
示例#4
0
        private CSharpToJavascriptConverter GetCSharpToJavascriptConverterForPerformance()
        {
            var cacher  = new SessionCacher();
            var factory = new GlueFactory(null, cacher, null, _ObjectChangesListener);

            return(new CSharpToJavascriptConverter(cacher, factory, _Logger));
        }
        /// <summary>
        /// Instanciate a new CJsonConverter
        /// </summary>
        public CJsonConverter()
        {
            var cache   = new SessionCacher();
            var factory = new GlueFactory(null, cache, null, null);

            _Converter = new CSharpToGlueMapper(cache, factory, new NullLogger());
        }
示例#6
0
 public RightHook(string binaryStringValue, int height, bool carry)
 {
     this.height            = height;
     this.binaryStringValue = binaryStringValue;
     signal    = carry ? Signals.Carry : Signals.NoCarry;
     NorthGlue = GlueFactory.Writer(binaryStringValue, signal);
     SouthGlue = GlueFactory.RightHook(binaryStringValue, signal);
 }
示例#7
0
 public Writer(string binaryValue, string signal, int stoppingValue)
 {
     this.stoppingValue = stoppingValue;
     this.binaryValue   = binaryValue;
     this.signal        = signal;
     tiles     = new List <Tile>();
     startGlue = GlueFactory.Writer(binaryValue, signal);
 }
示例#8
0
        public LeftHook(string binaryStringValue, int height)
        {
            this.height            = height * 4;
            this.binaryStringValue = binaryStringValue;

            signal    = Signals.Nth;
            NorthGlue = GlueFactory.LeftHook();
            SouthGlue = GlueFactory.PreReadLeft(signal);
        }
示例#9
0
        private void SetUp()
        {
            var id = Guid.NewGuid();


            for (var i = 0; i <= height * 4; i++)
            {
                var tile = new Tile($"RightWall {i}");

                if (i == 0)
                {
                    tile.West = GlueFactory.RightWall;
                }
                else
                {
                    tile.South = G(id);
                }

                id         = Guid.NewGuid();
                tile.North = G(id);
                tiles.Add(tile);
            }

            tiles.AddRange(new [] { RightBottom, RightMiddle, RightTopZ0, RightTopZ1, LeftBottom, LeftMiddle, LeftTopZ0, LeftTopZ1 });

            RightBottom.South = G(id);
            RightBottom.North = Bind(RightBottom, RightMiddle);
            RightMiddle.South = RightBottom.North;
            RightMiddle.North = Bind(RightMiddle, RightTopZ0);
            RightTopZ0.South  = RightMiddle.North;
            RightTopZ0.Up     = Bind(RightTopZ0, RightTopZ1);
            RightTopZ1.Down   = RightTopZ0.Up;

            RightTopZ1.West = Bind(RightTopZ1, LeftTopZ1);
            LeftTopZ1.East  = RightTopZ1.West;

            LeftTopZ1.Down = Bind(LeftTopZ1, LeftTopZ0);
            LeftTopZ0.Up   = LeftTopZ1.Down;

            LeftTopZ0.South  = Bind(LeftTopZ0, LeftMiddle);
            LeftMiddle.North = LeftTopZ0.South;

            LeftMiddle.South = Bind(LeftMiddle, LeftBottom);
            LeftBottom.North = LeftMiddle.South;

            LeftBottom.South = GlueFactory.PreReadRight(Signals.Carry);
        }
示例#10
0
        private void SetUp()
        {
            var id = Guid.NewGuid();

            for (var i = 0; i < height; i++)
            {
                var tile = Tile(i);

                tile.North = i == 0 ? GlueFactory.PreReadRight(signal) : G(id);

                id = Guid.NewGuid();

                if (i + 1 == height)
                {
                    tile.West = G(id);

                    if (signal != Signals.Carry)
                    {
                        tile.South = GlueFactory.LeftWall;
                    }
                }
                else
                {
                    tile.South = G(id);
                }

                tiles.Add(tile);
            }

            var right = Tile(height);

            right.East = G(id);
            id         = Guid.NewGuid();
            right.West = G(id);
            tiles.Add(right);

            var left = Tile(height + 1);

            left.East = right.West;

            left.West = GlueFactory.Reader(signal);

            tiles.Add(left);
        }
示例#11
0
        private void SetUp()
        {
            var previous = Guid.NewGuid();

            for (var i = 0; i < binaryValue.Length; i++)
            {
                var value = binaryValue[i];
                var bit   = value == '0' ? (AbstractBit) new ZeroBit(binaryValue, i, Modes.Copy, signal) : new OneBit(binaryValue, i, Modes.Copy, signal);


                // the first tile needs to bind with the hook, according to this binary string's data
                bit.NorthGlue = i == 0 ? startGlue : new Glue(previous.ToString());


                // the last tiles should propagate a copy stopper, every other bit should propagate another bit
                previous = Guid.NewGuid();

                var lastBit = i + 1 == binaryValue.Length;

                if (lastBit)
                {
                    var valueBase10 = Convert.ToInt32(binaryValue, 2) + 1;
                    bit.SouthGlue = valueBase10 <= stoppingValue?GlueFactory.CopyStopper(signal) : new Glue();
                }
                else
                {
                    bit.SouthGlue = new Glue(previous.ToString());
                }

                List <Tile> results = bit.Tiles().ToList();
                if (value == '1')
                {
                    foreach (var tile in results)
                    {
                        tile.Color = "blue";
                    }
                }

                tiles.AddRange(results);
            }
        }
示例#12
0
        private void SetUp()
        {
            var id = Guid.NewGuid();

            for (var i = 0; i < height; i++)
            {
                var tile = Tile(i);

                tile.North = i == 0 ? GlueFactory.PreReadLeft(signal) : G(id);

                id = Guid.NewGuid();

                if (i + 1 == height)
                {
                    tile.Up    = G(id);
                    tile.South = GlueFactory.RightTurn();
                }
                else
                {
                    tile.South = G(id);
                }

                tiles.Add(tile);
            }

            var leftZ1 = Tile(height);

            leftZ1.Down = G(id);
            id          = Guid.NewGuid();

            leftZ1.East = G(id);

            var rightZ1 = Tile(height + 1);

            rightZ1.West = leftZ1.East;
            rightZ1.East = GlueFactory.Reader(signal);
            tiles.Add(leftZ1);
            tiles.Add(rightZ1);
        }
示例#13
0
        private void SetUp()
        {
            topRight    = Tile(TileNames.CopyStopperTopRight);
            topLeft     = Tile(TileNames.CopyStopperTopLeft);
            bottomLeft  = Tile(TileNames.CopyStopperBottomLeft);
            bottomRight = Tile(TileNames.CopyStopperBottomRight);

            topRight.North = GlueFactory.CopyStopper(signal);

            topRight.West = Bind(topRight, topLeft);
            topLeft.East  = topRight.West;

            topLeft.South    = Bind(topLeft, bottomLeft);
            bottomLeft.North = topLeft.South;

            bottomLeft.East  = Bind(bottomLeft, bottomRight);
            bottomRight.West = bottomLeft.East;

            bottomRight.South = GlueFactory.PreReadRight(signal);
            tiles             = new List <Tile> {
                topRight, topLeft, bottomLeft, bottomRight
            };
        }
示例#14
0
        private void Setup()
        {
            tiles.AddRange(new [] { bottomRightZ0, bottomRightZ1, bottomMiddle });
            bottomRightZ0.North = GlueFactory.LeftWall;

            bottomRightZ0.Up   = Bind(bottomRightZ0, bottomRightZ1);
            bottomRightZ1.Down = bottomRightZ0.Up;

            bottomRightZ1.West = Bind(bottomRightZ1, bottomMiddle);
            bottomMiddle.East  = bottomRightZ1.West;
            bottomMiddle.North = Bind(0, 1);

            var height = bits * 4;

            for (var i = 0; i <= height; i++)
            {
                var tile = Tile(i);
                tile.North = Bind(i, i + 1);
                tile.South = Bind(i - 1, i);
                tiles.Add(tile);
            }

            var lastAdded = tiles.Last();

            lastAdded.North = Bind(lastAdded, topMiddle);
            topMiddle.South = lastAdded.North;

            tiles.Add(topMiddle);

            topMiddle.West = Bind(topMiddle, topLeft);
            topLeft.East   = topMiddle.West;

            tiles.Add(topLeft);


            // 2n + 2 start north and south
            var leftSideHeight = height * 2 + 4;

            var id = Guid.NewGuid();

            topLeft.Down = new Glue(id.ToString());

            for (var i = 0; i < leftSideHeight; i++)
            {
                var tile = Tile("LeftSide", i);
                tiles.Add(tile);

                tile.South = new Glue(id.ToString());
                id         = Guid.NewGuid();
                tile.North = new Glue(id.ToString());

                if (i == 0)
                {
                    tile.Up    = tile.South;
                    tile.South = new Glue();
                }

                if (i + 1 == leftSideHeight)
                {
                    tile.East  = tile.North;
                    tile.North = new Glue();
                }
            }

            var rightSideHeight = height + 2;

            for (var i = 0; i < rightSideHeight; i++)
            {
                var tile = Tile("RightSide", i);
                tiles.Add(tile);

                tile.North = new Glue(id.ToString());
                id         = Guid.NewGuid();
                tile.South = new Glue(id.ToString());


                if (i == 0)
                {
                    tile.West  = tile.North;
                    tile.North = new Glue();
                }

                if (i + 1 == rightSideHeight)
                {
                    tile.South = GlueFactory.PreReadLeft(Signals.First);
                }
            }
        }
示例#15
0
        private void Setup()
        {
            firstZ0  = Tile($"R: Z0-1st, B='{bitsRead}', S={signal}");
            secondZ0 = Tile($"R: Z0-2nd, B='{bitsRead}1', S={signal}");
            thirdZ0  = Tile($"R: Z0-3rd, B='{bitsRead}1', S={signal}");
            fourthZ0 = Tile($"R: Z0-4th, B='{bitsRead}1', S={signal}");


            firstZ1  = Tile($"R: Z1-1st, B='{bitsRead}', S={signal}");
            secondZ1 = Tile($"R: Z1-2nd, B='{bitsRead}0', S={signal}");
            thirdZ1  = Tile($"R: Z1-3rd, B='{bitsRead}0', S={signal}");
            fourthZ1 = Tile($"R: Z1-4th, B='{bitsRead}0', S={signal}");
            fifthZ1  = Tile($"R: Z1-5th, B='{bitsRead}0', S={signal}");

            tiles = new List <Tile> {
                firstZ0, secondZ0, thirdZ0, fourthZ0, firstZ1, secondZ1, thirdZ1, fourthZ1, fifthZ1
            };

            if (bitsRead.Length == 0)
            {
                firstZ0.East = GlueFactory.Reader(signal);
            }
            else
            {
                firstZ0.South = new Glue($"ReadContinue: {bitsRead}, S={signal}");
            }

            firstZ0.North  = Bind(firstZ0, secondZ0);
            secondZ0.South = firstZ0.North;

            secondZ0.North = Bind(secondZ0, thirdZ0);
            thirdZ0.South  = secondZ0.North;

            thirdZ0.North  = Bind(thirdZ0, fourthZ0);
            fourthZ0.South = thirdZ0.North;

            firstZ0.Up = fourthZ0.Down;

            firstZ0.Up   = Bind(firstZ0, firstZ1);
            firstZ1.Down = firstZ0.Up;

            firstZ1.North  = Bind(firstZ1, secondZ1);
            secondZ1.South = firstZ1.North;

            secondZ1.North = Bind(secondZ1, thirdZ1);
            thirdZ1.South  = secondZ1.North;

            thirdZ1.North = Bind(thirdZ1, fourthZ1);

            fourthZ1.South = thirdZ1.North;
            fourthZ1.Down  = Bind(fourthZ1, fifthZ1);
            fifthZ1.Up     = fourthZ1.Down;


            // final bit
            if (bitsRead.Length + 1 == totalBits)
            {
                fourthZ0.North = new Glue($"ReadContinue: {bitsRead}1, S={signal}");
                fifthZ1.North  = new Glue($"ReadContinue: {bitsRead}0, S={signal}");


                var currentCarrySignal = signal == Signals.Carry;

                if (currentCarrySignal)
                {
                    var value     = $"{bitsRead}0";
                    var inDecimal = Convert.ToInt32(value, 2);
                    var canIncrementIfLastBitWas0 = inDecimal < baseK - 1;
                    if (canIncrementIfLastBitWas0)
                    {
                        var valueToCreateFifthZ1 = IncrementInBinary(value);
                        fifthZ1.North = GlueFactory.RightHook(valueToCreateFifthZ1, Signals.NoCarry);
                    }
                    else
                    {
                        var allZeros = string.Concat(Enumerable.Repeat("0", totalBits));

                        fifthZ1.North = GlueFactory.RightHook(allZeros, Signals.Carry);
                    }


                    value = $"{bitsRead}1";
                    var canIncrementIfLastBitWas1 = Convert.ToInt32($"{bitsRead}1", 2) < baseK - 1;


                    if (canIncrementIfLastBitWas1)
                    {
                        var valueToCreateFourthZ0 = IncrementInBinary(value);
                        fourthZ0.North = GlueFactory.RightHook(valueToCreateFourthZ0, Signals.NoCarry);
                    }
                    else
                    {
                        var allZeros = string.Concat(Enumerable.Repeat("0", totalBits));
                        fourthZ0.North = GlueFactory.RightHook(allZeros, Signals.Carry);
                    }
                }
                else
                {
                    fourthZ0.North = GlueFactory.RightHook($"{bitsRead}1", Signals.NoCarry);
                    fifthZ1.North  = GlueFactory.RightHook($"{bitsRead}0", Signals.NoCarry);
                }
            }
            else
            {
                fourthZ0.North = new Glue($"ReadContinue: {bitsRead}1, S={signal}");
                fifthZ1.North  = new Glue($"ReadContinue: {bitsRead}0, S={signal}");
            }
        }
示例#16
0
        private static BuildingBase CreateBuildingFromXML(string building, GameServer server, Player player)
        {
            var buildingData = Settings.GetBuilding(building);
            if(buildingData == null) return new BuildingBase(server, player);
            BuildingBase ret = new BuildingBase(server, player);
            switch (buildingData.BuildingType.ToLower())
            {
                default:
                    ret = new BuildingBase(server, player);
                    break;
                case "base":
                    ret =  new HomeBuilding(server,player);
                    break;
                case "supply":
                    ret = new SupplyBuilding(server, player, buildingData.SupplyAdd);
                    break;
                case "gluefactory":
                    ret = new GlueFactory(server, player);
                    break;
            }

            foreach (var unitElement in buildingData.Units)
            {
                ret.spells.Add(unitElement.UnitTypeString, new SpellData(0, null)
                {
                    AppleCost = unitElement.AppleCost,
                    WoodCost = unitElement.WoodCost,
                    CastTime = unitElement.CreationTime,
                    GlueCost = unitElement.GlueCost,
                    SupplyCost = unitElement.SupplyCost,
                    SpellType = SpellTypes.UnitCreation,
                });
            }
            ret.Health = buildingData.Health;
            ret.MaxHealth = buildingData.MaxHealth;
            ret.BuildTime = buildingData.BuildTime;
            ret.HotkeyString = buildingData.Name;
            return ret;
        }
示例#17
0
        private void SetUp()
        {
            var middleBottom = Tile("MiddleBottom");
            var leftBottom   = Tile("LeftBottom");
            var leftMiddle   = Tile("LeftMiddle");
            var leftTopZ0    = Tile("LeftTopZ0");
            var leftTopZ1    = Tile("LeftTopZ1");
            var middleTop    = Tile("MiddleTopZ1");
            var rightTop     = Tile("RightTop");

            tiles.AddRange(new[] { middleBottom, leftBottom, leftMiddle, leftTopZ0, leftTopZ1, middleTop, rightTop });

            middleBottom.North = GlueFactory.RightTurn();
            middleBottom.West  = Bind(middleBottom, leftBottom);
            leftBottom.East    = middleBottom.West;

            leftBottom.North = Bind(leftBottom, leftMiddle);
            leftMiddle.South = leftBottom.North;

            leftMiddle.North = Bind(leftMiddle, leftTopZ0);
            leftTopZ0.South  = leftMiddle.North;

            leftTopZ0.Up   = Bind(leftTopZ0, leftTopZ1);
            leftTopZ1.Down = leftTopZ0.Up;

            leftTopZ1.East = Bind(leftTopZ1, middleTop);
            middleTop.West = leftTopZ1.East;

            middleTop.East = Bind(middleTop, rightTop);
            rightTop.West  = middleTop.East;

            var id = Guid.NewGuid();

            rightTop.Down = Bind(id);

            for (var i = 0; i < height * 2; i += 4)
            {
                var bottomLeft = Tile("BottomLeft", i);

                if (i == 0)
                {
                    bottomLeft.Up = Bind(id);
                }
                else
                {
                    bottomLeft.South = Bind(id);
                }

                var bottomRight = Tile("BottomRight", i + 1);
                bottomLeft.East  = Bind(bottomLeft, bottomRight);
                bottomRight.West = bottomLeft.East;
                var topRight = Tile("TopRight", i + 2);

                bottomRight.North = Bind(bottomRight, topRight);
                topRight.South    = bottomRight.North;

                var topLeft = Tile("TopLeft", i + 3);
                topRight.West = Bind(topRight, topLeft);
                topLeft.East  = topRight.West;

                tiles.AddRange(new[] { bottomLeft, bottomRight, topRight, topLeft });
                id            = Guid.NewGuid();
                topLeft.North = Bind(id);
            }


            var topLeftEnd = new Tile("RightTurnEnd")
            {
                East  = GlueFactory.RightWall,
                South = Bind(id)
            };

            tiles.Add(topLeftEnd);
        }
示例#18
0
        private void Setup()
        {
            firstZ0  = Tile($"LR: Z0-1st, B='{bitsRead}', S={signal}");
            secondZ0 = Tile($"LR: Z0-2nd, B='1{bitsRead}', S={signal}");
            thirdZ0  = Tile($"LR: Z0-3rd, B='1{bitsRead}', S={signal}");
            fourthZ0 = Tile($"LR: Z0-4th, B='1{bitsRead}', S={signal}");


            firstZ1  = Tile($"LR: Z1-1st, B='{bitsRead}', S={signal}");
            secondZ1 = Tile($"LR: Z1-2nd, B='0{bitsRead}', S={signal}");
            thirdZ1  = Tile($"LR: Z1-3rd, B='0{bitsRead}', S={signal}");
            fourthZ1 = Tile($"LR: Z1-4th, B='0{bitsRead}', S={signal}");
            fifthZ1  = Tile($"LR: Z1-5th, B='0{bitsRead}', S={signal}");

            tiles = new List <Tile> {
                firstZ0, secondZ0, thirdZ0, fourthZ0, firstZ1, secondZ1, thirdZ1, fourthZ1, fifthZ1
            };

            if (bitsRead.Length == 0)
            {
                firstZ1.West = GlueFactory.Reader(signal);
            }
            else
            {
                firstZ0.South = new Glue($"LR: ReadContinue: {bitsRead}, S={signal}");
            }
            firstZ0.North  = Bind(firstZ0, secondZ0);
            secondZ0.South = firstZ0.North;

            secondZ0.North = Bind(secondZ0, thirdZ0);
            thirdZ0.South  = secondZ0.North;

            thirdZ0.North  = Bind(thirdZ0, fourthZ0);
            fourthZ0.South = thirdZ0.North;

            firstZ0.Up = fourthZ0.Down;

            firstZ0.Up   = Bind(firstZ0, firstZ1);
            firstZ1.Down = firstZ0.Up;

            firstZ1.North  = Bind(firstZ1, secondZ1);
            secondZ1.South = firstZ1.North;

            secondZ1.North = Bind(secondZ1, thirdZ1);
            thirdZ1.South  = secondZ1.North;

            thirdZ1.North = Bind(thirdZ1, fourthZ1);

            fourthZ1.South = thirdZ1.North;
            fourthZ1.Down  = Bind(fourthZ1, fifthZ1);
            fifthZ1.Up     = fourthZ1.Down;

            // final bit
            if (bitsRead.Length + 1 == totalBits)
            {
                var currentValueForFifthZ1  = $"0{bitsRead}";
                var currentValueForFourthZ0 = $"1{bitsRead}";

                fourthZ0.North = GlueFactory.IncrementStopper(currentValueForFourthZ0, signal);
                fifthZ1.North  = GlueFactory.IncrementStopper(currentValueForFifthZ1, signal);
            }
            else
            {
                fourthZ0.North = new Glue($"LR: ReadContinue: 1{bitsRead}, S={signal}");
                fifthZ1.North  = new Glue($"LR: ReadContinue: 0{bitsRead}, S={signal}");
            }
        }