예제 #1
0
        public bool GetValue(int x, int y)
        {
            int num1 = x / 8;
            int num2 = x % 8;

            return(((int)this._data[y * DamagePattern.GetStride(this._width) + num1] & 1 << num2) != 0);
        }
예제 #2
0
        private static byte[] GetDataFromText(int w, int h, string text)
        {
            if (text == null || w == 0 || h == 0)
            {
                return((byte[])null);
            }
            int stride = DamagePattern.GetStride(w);

            byte[] numArray = new byte[DamagePattern.GetSize(stride, h)];
            int    index1   = 0;

            for (int index2 = 0; index2 < h; ++index2)
            {
                for (int index3 = 0; index3 < w; ++index3)
                {
                    if (text[index1] != '0')
                    {
                        int index4 = index2 * stride + index3 / 8;
                        numArray[index4] |= (byte)(1 << index3 % 8);
                    }
                    ++index1;
                }
                ++index1;
            }
            return(numArray);
        }
예제 #3
0
 public static DamagePattern FromDatabaseString(string base64String)
 {
     using (MemoryStream stream = new MemoryStream(Convert.FromBase64String(base64String)))
     {
         using (ScriptMessageReader r = new ScriptMessageReader(true, stream))
             return(DamagePattern.Read(r));
     }
 }
예제 #4
0
        public void SetValue(int x, int y, bool value)
        {
            int  num1  = x / 8;
            int  num2  = x % 8;
            int  index = y * DamagePattern.GetStride(this._width) + num1;
            byte num3  = this._data[index];
            byte num4  = (byte)(1 << num2);
            byte num5  = !value ? (byte)((uint)num3 & (uint)~num4) : (byte)((uint)num3 | (uint)num4);

            this._data[index] = num5;
        }
예제 #5
0
        public void Write(ScriptMessageWriter m)
        {
            m.WriteInteger(this._width);
            m.WriteInteger(this._height);
            m.WriteInteger(this._originX);
            m.WriteInteger(this._originY);
            int size = DamagePattern.GetSize(DamagePattern.GetStride(this._width), this._height);

            for (int index = 0; index < size; index += 4)
            {
                m.WriteInteger((int)DamagePattern.BytesToFourCC(this._data[index], this._data[index + 1], this._data[index + 2], this._data[index + 3]));
            }
        }
예제 #6
0
 public DamagePattern(int width, int height, int originX, int originY, byte[] initialData)
 {
     this._data    = initialData;
     this._width   = width;
     this._height  = height;
     this._originX = originX;
     this._originY = originY;
     if (this._data != null)
     {
         return;
     }
     this._data = new byte[DamagePattern.GetSize(DamagePattern.GetStride(this._width), this._height)];
 }
예제 #7
0
        public static DamagePattern Read(ScriptMessageReader r)
        {
            int width   = r.ReadInteger();
            int height  = r.ReadInteger();
            int originX = r.ReadInteger();
            int originY = r.ReadInteger();
            int size    = DamagePattern.GetSize(DamagePattern.GetStride(width), height);

            byte[] initialData = new byte[size];
            for (int index = 0; index < size; index += 4)
            {
                DamagePattern.FourCCToBytes((uint)r.ReadInteger(), out initialData[index], out initialData[index + 1], out initialData[index + 2], out initialData[index + 3]);
            }
            return(new DamagePattern(width, height, originX, originY, initialData));
        }
예제 #8
0
 public DamagePattern(int width, int height, int originX, int originY, string initialDataText)
     : this(width, height, originX, originY, DamagePattern.GetDataFromText(width, height, initialDataText))
 {
 }