コード例 #1
0
        public void Blockchange2(Player p, ushort x, ushort y, ushort z, byte type)
        {
            type = p.bindings[type];

            p.ClearBlockchange();
            byte b = p.level.GetTile(x, y, z);

            p.SendBlockchange(x, y, z, b);

            CatchPos cpos = (CatchPos)p.blockchangeObject;

            ushort cur;

            if (x == cpos.x && z == cpos.z)
            {
                Player.SendMessage(p, "No direction was selected"); return;
            }

            if (Math.Abs(cpos.x - x) > Math.Abs(cpos.z - z))
            {
                cur = cpos.x;
                if (x > cpos.x)
                {
                    foreach (char c in cpos.givenMessage)
                    {
                        cur = FindReference.writeLetter(p, c, cur, cpos.y, cpos.z, type, 0);
                    }
                }
                else
                {
                    foreach (char c in cpos.givenMessage)
                    {
                        cur = FindReference.writeLetter(p, c, cur, cpos.y, cpos.z, type, 1);
                    }
                }
            }
            else
            {
                cur = cpos.z;
                if (z > cpos.z)
                {
                    foreach (char c in cpos.givenMessage)
                    {
                        cur = FindReference.writeLetter(p, c, cpos.x, cpos.y, cur, type, 2);
                    }
                }
                else
                {
                    foreach (char c in cpos.givenMessage)
                    {
                        cur = FindReference.writeLetter(p, c, cpos.x, cpos.y, cur, type, 3);
                    }
                }
            }

            if (p.staticCommands)
            {
                p.Blockchange += new Player.BlockchangeEventHandler(Blockchange1);
            }
        }
コード例 #2
0
 void OnDisable()
 {
     instance = null;
 }
コード例 #3
0
 void OnEnable()
 {
     instance = this;
 }
コード例 #4
0
ファイル: CmdImageprint.cs プロジェクト: voidpublic/MCZombie
        public void Blockchange2(Player p, ushort x, ushort y, ushort z, byte type)
        {
            p.ClearBlockchange();
            byte b = p.level.GetTile(x, y, z);

            p.SendBlockchange(x, y, z, b);

            Bitmap myBitmap = new Bitmap("extra/images/" + bitmaplocation + ".bmp");

            myBitmap.RotateFlip(RotateFlipType.RotateNoneFlipY);

            CatchPos cpos = (CatchPos)p.blockchangeObject;

            if (x == cpos.x && z == cpos.z)
            {
                Player.SendMessage(p, "No direction was selected"); return;
            }

            int direction;

            if (Math.Abs(cpos.x - x) > Math.Abs(cpos.z - z))
            {
                direction = 0;
                if (x <= cpos.x)
                {
                    direction = 1;
                }
            }
            else
            {
                direction = 2;
                if (z <= cpos.z)
                {
                    direction = 3;
                }
            }
            if (layer)
            {
                if (popType == 1)
                {
                    popType = 2;
                }
                if (popType == 3)
                {
                    popType = 4;
                }
            }
            List <FindReference.ColorBlock> refCol = FindReference.popRefCol(popType);

            FindReference.ColorBlock colblock;
            Player.SendMessage(p, "" + direction);
            Thread printThread = new Thread(new ThreadStart(delegate
            {
                double[] distance = new double[refCol.Count]; // Array of distances between color pulled from image to the referance colors.

                int position;                                 // This is the block selector for when we find which distance is the shortest.

                for (int k = 0; k < myBitmap.Width; k++)
                {
                    for (int i = 0; i < myBitmap.Height; i++)
                    {
                        if (layer)
                        {
                            colblock.y = cpos.y;
                            if (direction <= 1)
                            {
                                if (direction == 0)
                                {
                                    colblock.x = (ushort)(cpos.x + k); colblock.z = (ushort)(cpos.z - i);
                                }
                                else
                                {
                                    colblock.x = (ushort)(cpos.x - k); colblock.z = (ushort)(cpos.z + i);
                                }
                                //colblock.z = (ushort)(cpos.z - i);
                            }
                            else
                            {
                                if (direction == 2)
                                {
                                    colblock.z = (ushort)(cpos.z + k); colblock.x = (ushort)(cpos.x + i);
                                }
                                else
                                {
                                    colblock.z = (ushort)(cpos.z - k); colblock.x = (ushort)(cpos.x - i);
                                }
                                //colblock.x = (ushort)(cpos.x - i);
                            }
                        }
                        else
                        {
                            colblock.y = (ushort)(cpos.y + i);
                            if (direction <= 1)
                            {
                                if (direction == 0)
                                {
                                    colblock.x = (ushort)(cpos.x + k);
                                }
                                else
                                {
                                    colblock.x = (ushort)(cpos.x - k);
                                }
                                colblock.z = cpos.z;
                            }
                            else
                            {
                                if (direction == 2)
                                {
                                    colblock.z = (ushort)(cpos.z + k);
                                }
                                else
                                {
                                    colblock.z = (ushort)(cpos.z - k);
                                }
                                colblock.x = cpos.x;
                            }
                        }


                        colblock.r = myBitmap.GetPixel(k, i).R;
                        colblock.g = myBitmap.GetPixel(k, i).G;
                        colblock.b = myBitmap.GetPixel(k, i).B;
                        colblock.a = myBitmap.GetPixel(k, i).A;

                        if (popType == 6)
                        {
                            if ((colblock.r + colblock.g + colblock.b) / 3 < (256 / 4))
                            {
                                colblock.type = Block.obsidian;
                            }
                            else if (((colblock.r + colblock.g + colblock.b) / 3) >= (256 / 4) && ((colblock.r + colblock.g + colblock.b) / 3) < (256 / 4) * 2)
                            {
                                colblock.type = Block.darkgrey;
                            }
                            else if (((colblock.r + colblock.g + colblock.b) / 3) >= (256 / 4) * 2 && ((colblock.r + colblock.g + colblock.b) / 3) < (256 / 4) * 3)
                            {
                                colblock.type = Block.lightgrey;
                            }
                            else
                            {
                                colblock.type = Block.white;
                            }
                        }
                        else
                        {
                            for (int j = 0; j < distance.Length; j++) // Calculate distances between the colors in the image and the set referance colors, and store them.
                            {
                                distance[j] = Math.Sqrt(Math.Pow((colblock.r - refCol[j].r), 2) + Math.Pow((colblock.b - refCol[j].b), 2) + Math.Pow((colblock.g - refCol[j].g), 2));
                            }

                            position       = 0;
                            double minimum = distance[0];
                            for (int h = 1; h < distance.Length; h++) // Find the smallest distance in the array of distances.
                            {
                                if (distance[h] < minimum)
                                {
                                    minimum  = distance[h];
                                    position = h;
                                }
                            }


                            colblock.type = refCol[position].type; // Set the block we found closest to the image to the block we are placing.

                            if (popType == 1)
                            {
                                if (position <= 20)
                                {
                                    if (direction == 0)
                                    {
                                        colblock.z = (ushort)(colblock.z + 1);
                                    }
                                    else if (direction == 2)
                                    {
                                        colblock.x = (ushort)(colblock.x - 1);
                                    }
                                    else if (direction == 1)
                                    {
                                        colblock.z = (ushort)(colblock.z - 1);
                                    }
                                    else if (direction == 3)
                                    {
                                        colblock.x = (ushort)(colblock.x + 1);
                                    }
                                }
                            }
                            else if (popType == 3)
                            {
                                if (position <= 3)
                                {
                                    if (direction == 0)
                                    {
                                        colblock.z = (ushort)(colblock.z + 1);
                                    }
                                    else if (direction == 2)
                                    {
                                        colblock.x = (ushort)(colblock.x - 1);
                                    }
                                    else if (direction == 1)
                                    {
                                        colblock.z = (ushort)(colblock.z - 1);
                                    }
                                    else if (direction == 3)
                                    {
                                        colblock.x = (ushort)(colblock.x + 1);
                                    }
                                }
                            }
                        }

                        //ALPHA HANDLING (REAL HARD STUFF, YO)
                        if (colblock.a < 20)
                        {
                            colblock.type = Block.air;
                        }

                        FindReference.placeBlock(p.level, p, colblock.x, colblock.y, colblock.z, colblock.type);
                    }
                }
                if (bitmaplocation == "tempImage_" + p.name)
                {
                    File.Delete("extra/images/tempImage_" + p.name + ".bmp");
                }

                string printType;
                switch (popType)
                {
                case 1: printType = "2-layer color"; break;

                case 2: printType = "1-layer color"; break;

                case 3: printType = "2-layer grayscale"; break;

                case 4: printType = "1-layer grayscale"; break;

                case 5: printType = "Black and White"; break;

                case 6: printType = "Mathematical grayscale"; break;

                default: printType = "Something unknown"; break;
                }

                Player.SendMessage(p, "Finished printing image using " + printType);
            })); printThread.Start();
        }
コード例 #5
0
    static void Init()
    {
        FindReference window = (FindReference)EditorWindow.GetWindow(typeof(FindReference));

        window.Show();
    }
コード例 #6
0
ファイル: CmdWrite.cs プロジェクト: blha303/MCDawn
        public void Blockchange2(Player p, ushort x, ushort y, ushort z, byte type)
        {
            type = p.bindings[type];

            p.ClearBlockchange();
            byte b = p.level.GetTile(x, y, z);

            p.SendBlockchange(x, y, z, b);

            CatchPos cpos = (CatchPos)p.blockchangeObject;

            ushort cur;

            if (x == cpos.x && z == cpos.z)
            {
                Player.SendMessage(p, "No direction was selected"); return;
            }

            ushort msgLength = 0; int breaksmade = 0;

            if (Math.Abs(cpos.x - x) > Math.Abs(cpos.z - z))
            {
                cur = cpos.x;
                if (x > cpos.x)
                {
                    foreach (char c in cpos.givenMessage)
                    {
                        msgLength += (ushort)(FindReference.charWidth(c) + 1);
                        if ((ushort)(cpos.x + msgLength) >= p.level.width)
                        {
                            cpos.y = (ushort)(cpos.y - 6);
                            cur    = FindReference.writeLetter(p, c, (ushort)(x - 1), cpos.y, cpos.z, type, 0);
                            breaksmade++;
                            msgLength = 0;
                        }
                        else
                        {
                            cur = FindReference.writeLetter(p, c, cur, cpos.y, cpos.z, type, 0);
                        }
                    }
                }
                else
                {
                    foreach (char c in cpos.givenMessage)
                    {
                        msgLength += (ushort)(FindReference.charWidth(c) + 1);
                        if ((ushort)(cpos.x - msgLength) <= 0)
                        {
                            cpos.y = (ushort)(cpos.y - 6);
                            cur    = FindReference.writeLetter(p, c, (ushort)(x + 1), cpos.y, cpos.z, type, 0);
                            breaksmade++;
                            msgLength = 0;
                        }
                        else
                        {
                            cur = FindReference.writeLetter(p, c, cur, cpos.y, cpos.z, type, 1);
                        }
                    }
                }
            }
            else
            {
                cur = cpos.z;
                if (z > cpos.z)
                {
                    foreach (char c in cpos.givenMessage)
                    {
                        msgLength += (ushort)(FindReference.charWidth(c) + 1);
                        if ((ushort)(cpos.z + msgLength) >= p.level.width)
                        {
                            cpos.y = (ushort)(cpos.y - 6);
                            cur    = FindReference.writeLetter(p, c, cpos.x, cpos.y, (ushort)(z - 1), type, 2);
                            breaksmade++;
                            msgLength = 0;
                        }
                        else
                        {
                            cur = FindReference.writeLetter(p, c, cpos.x, cpos.y, cur, type, 2);
                        }
                    }
                }
                else
                {
                    foreach (char c in cpos.givenMessage)
                    {
                        msgLength += (ushort)(FindReference.charWidth(c) + 1);
                        if ((ushort)(cpos.z - msgLength) <= 0)
                        {
                            cpos.y = (ushort)(cpos.y - 6);
                            cur    = FindReference.writeLetter(p, c, cpos.x, cpos.y, (ushort)(z + 1), type, 3);
                            breaksmade++;
                            msgLength = 0;
                        }
                        else
                        {
                            cur = FindReference.writeLetter(p, c, cpos.x, cpos.y, cur, type, 3);
                        }
                    }
                }
            }

            if (breaksmade > 0)
            {
                Player.SendMessage(p, breaksmade + " line breaks were added.");
            }

            if (p.staticCommands)
            {
                p.Blockchange += new Player.BlockchangeEventHandler(Blockchange1);
            }
        }
コード例 #7
0
        /// <summary>
        /// Indicates that the expression does not depend on a given (formal) parameter
        /// </summary>
        /// <param name="expression">The expression to check</param>
        /// <param name="parameters">The parameters in respect of which the function should be constant</param>
        /// <returns></returns>
        public bool IsConstant(Expression expression, params Parameter[] parameters)
        {
            bool retVal = true;

            foreach (Parameter parameter in parameters)
            {
                FindReference<InterpreterTreeNode> findReference = new FindReference<InterpreterTreeNode>(parameter);
                findReference.GatherReferences(expression);
                if (findReference.References.Count != 0)
                {
                    retVal = false;
                    break;
                }
            }

            return retVal;
        }