Exemplo n.º 1
0
            internal SelectorNameTextReader(CssToken token)
            {
                this.token = token;
#if DEBUG
                position = this.token.selectorNamePosition;
#endif
            }
Exemplo n.º 2
0
            internal SelectorClassTextReader(CssToken token)
            {
                this.token = token;
#if DEBUG
                this.position = this.token.selectorClassPosition;
#endif
            }
Exemplo n.º 3
0
        protected internal bool MoveToNextRun(ref Fragment fragment, ref FragmentPosition position, bool skipInvalid)
        {
            InternalDebug.Assert(position.run >= fragment.head - 1 && position.run <= fragment.tail);

            int run = position.run;

            if (run != fragment.tail)
            {
                InternalDebug.Assert(run >= fragment.head || (position.runDeltaOffset == 0 && position.runOffset == fragment.headOffset));

                if (run >= fragment.head)
                {
                    position.runOffset     += this.runList[run].Length;
                    position.runDeltaOffset = 0;
                }

                run++;

                if (skipInvalid)
                {
                    while (run != fragment.tail && this.runList[run].Type == RunType.Invalid)
                    {
                        position.runOffset += this.runList[run].Length;
                        run++;
                    }
                }

                position.run = run;

                return(run != fragment.tail);
            }

            return(false);
        }
Exemplo n.º 4
0
        protected internal bool MoveToNextRun(ref Fragment fragment, ref FragmentPosition position, bool skipInvalid)
        {
            int num = position.run;

            if (num != fragment.tail)
            {
                if (num >= fragment.head)
                {
                    position.runOffset     += runList[num].Length;
                    position.runDeltaOffset = 0;
                }
                num++;
                if (skipInvalid)
                {
                    while (num != fragment.tail && runList[num].Type == RunType.Invalid)
                    {
                        position.runOffset += runList[num].Length;
                        num++;
                    }
                }
                position.run = num;
                return(num != fragment.tail);
            }
            return(false);
        }
Exemplo n.º 5
0
            internal TextReader(Token token)
            {
                this.token = token;
#if DEBUG
                this.position = this.token.wholePosition;
#endif
            }
Exemplo n.º 6
0
            internal PropertyValueTextReader(CssToken token)
            {
                this.token = token;
#if DEBUG
                this.position = this.token.propertyValuePosition;
#endif
            }
Exemplo n.º 7
0
            internal TagUnstructuredContentTextReader(HtmlToken token)
            {
                InternalDebug.Assert(token.TokenId == HtmlTokenId.Tag);

                this.token = token;
#if DEBUG
                this.position = this.token.unstructuredPosition;
#endif
            }
Exemplo n.º 8
0
            internal TagNameTextReader(HtmlToken token)
            {
                InternalDebug.Assert(token.TokenId == HtmlTokenId.Tag);

                this.token = token;
#if DEBUG
                this.position = this.token.namePosition;
#endif
            }
Exemplo n.º 9
0
            internal AttributeValueTextReader(HtmlToken token)
            {
                InternalDebug.Assert(token.TokenId == HtmlTokenId.Tag);

                this.token = token;
#if DEBUG
                this.position = this.token.attrValuePosition;
#endif
            }
Exemplo n.º 10
0
        protected internal bool SkipLeadingWhitespace(LexicalUnit unit, ref FragmentPosition position)
        {
            int num = unit.head;

            if (num != -1)
            {
                int      num2           = unit.headOffset;
                RunEntry runEntry       = runList[num];
                uint     majorKind      = runEntry.MajorKind;
                int      runDeltaOffset = 0;
                int      i;
                do
                {
                    if (runEntry.Type == (RunType)3221225472u)
                    {
                        if (runEntry.Value > 65535)
                        {
                            break;
                        }
                        CharClass charClass = ParseSupport.GetCharClass((char)runEntry.Value);
                        if (!ParseSupport.WhitespaceCharacter(charClass))
                        {
                            break;
                        }
                    }
                    else if (runEntry.Type == (RunType)2147483648u)
                    {
                        for (i = num2; i < num2 + runEntry.Length; i++)
                        {
                            CharClass charClass = ParseSupport.GetCharClass(buffer[i]);
                            if (!ParseSupport.WhitespaceCharacter(charClass))
                            {
                                break;
                            }
                        }
                        if (i < num2 + runEntry.Length)
                        {
                            goto Block_7;
                        }
                    }
                    num2    += runEntry.Length;
                    runEntry = runList[++num];
                }while (runEntry.MajorKindPlusStartFlag == majorKind);
                goto IL_EF;
Block_7:
                runDeltaOffset = i - num2;
IL_EF:
                position.run            = num;
                position.runOffset      = num2;
                position.runDeltaOffset = runDeltaOffset;
                if (num == unit.head || runEntry.MajorKindPlusStartFlag == majorKind)
                {
                    return(true);
                }
            }
            return(false);
        }
Exemplo n.º 11
0
            public void Rewind()
            {
                this.AssertCurrent();

                this.token.wholePosition.Rewind(this.token.whole);
#if DEBUG
                this.position = this.token.wholePosition;
#endif
            }
Exemplo n.º 12
0
            public int Read(char[] buffer, int offset, int count)
            {
                this.AssertCurrent();

                int countRead = this.token.Read(ref this.token.selectorList[this.token.currentSelector].name, ref this.token.selectorNamePosition, buffer, offset, count);

#if DEBUG
                this.position = this.token.selectorNamePosition;
#endif
                return(countRead);
            }
Exemplo n.º 13
0
            public int Read(char[] buffer, int offset, int count)
            {
                this.AssertCurrent();

                int countRead = this.token.Read(ref this.token.propertyList[this.token.currentProperty].value, ref this.token.propertyValuePosition, buffer, offset, count);

#if DEBUG
                this.position = this.token.propertyValuePosition;
#endif
                return(countRead);
            }
Exemplo n.º 14
0
            public int Read(char[] buffer, int offset, int count)
            {
                AssertCurrent();

                var countRead = token.Read(token.attributeList[token.currentAttribute].name, ref token.attrNamePosition, buffer, offset, count);

#if DEBUG
                position = token.attrNamePosition;
#endif
                return(countRead);
            }
Exemplo n.º 15
0
            public int Read(char[] buffer, int offset, int count)
            {
                AssertCurrent();

                var countRead = token.Read(ref token.selectorList[token.currentSelector].className, ref token.selectorClassPosition, buffer, offset, count);

#if DEBUG
                position = token.selectorClassPosition;
#endif
                return(countRead);
            }
Exemplo n.º 16
0
            public int Read(char[] buffer, int offset, int count)
            {
                AssertCurrent();

                var countRead = token.Read(ref token.propertyList[token.currentProperty].name, ref token.propertyNamePosition, buffer, offset, count);

#if DEBUG
                position = token.propertyNamePosition;
#endif
                return(countRead);
            }
Exemplo n.º 17
0
            public int Read(char[] buffer, int offset, int count)
            {
                this.AssertCurrent();

                int countRead = this.token.Read(this.token.attributeList[this.token.currentAttribute].value, ref this.token.attrValuePosition, buffer, offset, count);

#if DEBUG
                this.position = this.token.attrValuePosition;
#endif
                return(countRead);
            }
Exemplo n.º 18
0
            public int Read(char[] buffer, int offset, int count)
            {
                this.AssertCurrent();

                int countRead = this.token.Read(this.token.unstructured, ref this.token.unstructuredPosition, buffer, offset, count);

#if DEBUG
                this.position = this.token.unstructuredPosition;
#endif
                return(countRead);
            }
Exemplo n.º 19
0
        private List <int[]> getShiftedLocations(List <int[]> locations, FragmentPosition fragmentPosition)
        {
            List <int[]> ret = new List <int[]>();

            switch (fragmentPosition)
            {
            case FragmentPosition.LeftHalf:
            case FragmentPosition.TopHalf:
            case FragmentPosition.TopLeftCorner:
                ret.AddRange(locations);
                break;

            case FragmentPosition.RightHalf:
            case FragmentPosition.TopRightCorner:
                foreach (int[] coord in locations)
                {
                    int[] shifted = { coord[0] + LevelContent.LEVEL_SIZE_HALF - 1, coord[1] };
                    ret.Add(shifted);
                }
                break;

            case FragmentPosition.BottomHalf:
            case FragmentPosition.BottomLeftCorner:
                foreach (int[] coord in locations)
                {
                    int[] shifted = { coord[0], coord[1] + LevelContent.LEVEL_SIZE_HALF - 1 };
                    ret.Add(shifted);
                }
                break;

            case FragmentPosition.BottomRightCorner:
                foreach (int[] coord in locations)
                {
                    int[] shifted = { coord[0] + LevelContent.LEVEL_SIZE_HALF - 1, coord[1] + LevelContent.LEVEL_SIZE_HALF - 1 };
                    ret.Add(shifted);
                }
                break;
            }
            return(ret);
        }
Exemplo n.º 20
0
        public Texture2D getDebugTexture(FragmentPosition position)
        {
            switch (position)
            {
            case FragmentPosition.TopLeftCorner:
            case FragmentPosition.TopHalf:
            case FragmentPosition.LeftHalf:
                return(fragmentGrid[0, 0].levelTextureDebug);

            case FragmentPosition.TopRightCorner:
            case FragmentPosition.RightHalf:
                return(fragmentGrid[1, 0].levelTextureDebug);

            case FragmentPosition.BottomLeftCorner:
            case FragmentPosition.BottomHalf:
                return(fragmentGrid[0, 1].levelTextureDebug);

            case FragmentPosition.BottomRightCorner:
                return(fragmentGrid[1, 1].levelTextureDebug);

            default:
                return(null);
            }
        }
Exemplo n.º 21
0
 public List <int[]> getCollectableLocations(FragmentPosition fragmentPosition)
 {
     return(getShiftedLocations(collectableLocations, fragmentPosition));
 }
Exemplo n.º 22
0
 public List <int[]> getEnemyLocations(FragmentPosition fragmentPosition)
 {
     return(getShiftedLocations(enemyLocations, fragmentPosition));
 }
Exemplo n.º 23
0
 public List <int[]> getPrisonerLocations(FragmentPosition fragmentPosition)
 {
     return(getShiftedLocations(prisonerLocations, fragmentPosition));
 }
Exemplo n.º 24
0
 public bool SameAs(FragmentPosition pos2)
 {
     return(run == pos2.run && runOffset == pos2.runOffset && runDeltaOffset == pos2.runDeltaOffset);
 }
Exemplo n.º 25
0
 public List<int[]> getPowerupLocations(FragmentPosition fragmentPosition)
 {
     return getShiftedLocations(powerupLocations, fragmentPosition);
 }
Exemplo n.º 26
0
 public List<int[]> getEnemyLocations(FragmentPosition fragmentPosition)
 {
     return getShiftedLocations(enemyLocations, fragmentPosition);
 }
Exemplo n.º 27
0
 public List<int[]> getCollectableLocations(FragmentPosition fragmentPosition)
 {
     return getShiftedLocations(collectableLocations, fragmentPosition);
 }
Exemplo n.º 28
0
        // Helper function to set parts of the level
        private void setFragmentIntoLevel(LevelFragment fragment, FragmentPosition position)
        {
            int texWidth = fragment.levelTexture.Width;
            int texHeight = fragment.levelTexture.Height;
            int gridWidth = fragment.grid.GetLength(0);
            int gridHeight = fragment.grid.GetLength(1);
            int texStartWidth = 0;
            int texStartHeight = 0;
            int gridStartWidth = 0;
            int gridStartHeight = 0;
            switch (position)
            {
                case FragmentPosition.LeftHalf:
                case FragmentPosition.TopHalf:
                    texStartWidth = 0;
                    texStartHeight = 0;
                    gridStartWidth = 0;
                    gridStartHeight = 0;
                    break;
                case FragmentPosition.TopLeftCorner:
                    texStartWidth = 0;
                    texStartHeight = 0;
                    gridStartWidth = 0;
                    gridStartHeight = 0;
                    break;
                case FragmentPosition.RightHalf:
                case FragmentPosition.TopRightCorner:
                    texStartWidth = texWidth + TILE_SIZE;
                    texStartHeight = 0;
                    gridStartWidth = gridWidth - 1;
                    gridStartHeight = 0;
                    break;
                case FragmentPosition.BottomHalf:
                case FragmentPosition.BottomLeftCorner:
                    texStartWidth = 0;
                    texStartHeight = texHeight + TILE_SIZE;
                    gridStartWidth = 0;
                    gridStartHeight = gridHeight - 1;
                    break;
                case FragmentPosition.BottomRightCorner:
                    texStartWidth = texWidth + TILE_SIZE;
                    texStartHeight = texHeight + TILE_SIZE;
                    gridStartWidth = gridWidth - 1;
                    gridStartHeight = gridHeight - 1;
                    break;
            }
            //cut off last row/column if necessary
            switch (position)
            {
                case FragmentPosition.LeftHalf:
                case FragmentPosition.BottomLeftCorner:
                    gridHeight--;
                    break;
                case FragmentPosition.TopHalf:
                case FragmentPosition.TopRightCorner:
                    gridWidth--;
                    break;
                case FragmentPosition.RightHalf:
                case FragmentPosition.BottomHalf:
                case FragmentPosition.BottomRightCorner:
                    gridWidth--;
                    gridHeight--;
                    break;
            }

            //color grid
            switch (position)
            {
                case FragmentPosition.LeftHalf:
                    fragmentGrid[0, 0] = fragment;
                    fragmentGrid[0, 1] = fragment;
                    break;
                case FragmentPosition.RightHalf:
                    fragmentGrid[1, 0] = fragment;
                    fragmentGrid[1, 1] = fragment;
                    break;
                case FragmentPosition.TopHalf:
                    fragmentGrid[0, 0] = fragment;
                    fragmentGrid[1, 0] = fragment;
                    break;
                case FragmentPosition.BottomHalf:
                    fragmentGrid[0, 1] = fragment;
                    fragmentGrid[1, 1] = fragment;
                    break;
                case FragmentPosition.TopLeftCorner:
                    fragmentGrid[0, 0] = fragment;
                    break;
                case FragmentPosition.TopRightCorner:
                    fragmentGrid[1, 0] = fragment;
                    break;
                case FragmentPosition.BottomLeftCorner:
                    fragmentGrid[0, 1] = fragment;
                    break;
                case FragmentPosition.BottomRightCorner:
                    fragmentGrid[1, 1] = fragment;
                    break;
            }
            //level grid
            grid.setDataRectangle<LevelContent.LevelTile>(new Rectangle(gridStartWidth, gridStartHeight, gridWidth, gridHeight), fragment.grid);
            //locations
            collectableLocations.AddRange(fragment.getCollectableLocations(position));
            enemyLocations.AddRange(fragment.getEnemyLocations(position));
            prisonerLocations.AddRange(fragment.getPrisonerLocations(position));
            powerupLocations.AddRange(fragment.getPowerupLocations(position));
        }
Exemplo n.º 29
0
 public Texture2D getTexture(FragmentPosition position)
 {
     switch (position)
     {
         case FragmentPosition.TopLeftCorner:
         case FragmentPosition.TopHalf:
         case FragmentPosition.LeftHalf:
             return fragmentGrid[0, 0].levelTexture;
         case FragmentPosition.TopRightCorner:
         case FragmentPosition.RightHalf:
             return fragmentGrid[1, 0].levelTexture;
         case FragmentPosition.BottomLeftCorner:
         case FragmentPosition.BottomHalf:
             return fragmentGrid[0, 1].levelTexture;
         case FragmentPosition.BottomRightCorner:
             return fragmentGrid[1, 1].levelTexture;
         default:
             return null;
     }
 }
Exemplo n.º 30
0
 public List <int[]> getPowerupLocations(FragmentPosition fragmentPosition)
 {
     return(getShiftedLocations(powerupLocations, fragmentPosition));
 }
Exemplo n.º 31
0
        protected internal bool SkipLeadingWhitespace(LexicalUnit unit, ref FragmentPosition position)
        {
            int run = unit.head;

            if (run != -1)
            {
                int       runOffset = unit.headOffset;
                CharClass charClass;

                RunEntry runEntry    = this.runList[run];
                uint     kind        = runEntry.MajorKind;
                int      deltaOffset = 0;

                do
                {
                    if (runEntry.Type == RunType.Literal)
                    {
                        if (runEntry.Value > 0xFFFF)
                        {
                            break;
                        }

                        charClass = ParseSupport.GetCharClass((char)runEntry.Value);
                        if (!ParseSupport.WhitespaceCharacter(charClass))
                        {
                            break;
                        }
                    }
                    else if (runEntry.Type == RunType.Normal)
                    {
                        int offset = runOffset;
                        while (offset < runOffset + runEntry.Length)
                        {
                            charClass = ParseSupport.GetCharClass(this.buffer[offset]);
                            if (!ParseSupport.WhitespaceCharacter(charClass))
                            {
                                break;
                            }

                            offset++;
                        }

                        if (offset < runOffset + runEntry.Length)
                        {
                            deltaOffset = offset - runOffset;
                            break;
                        }
                    }

                    runOffset += runEntry.Length;

                    runEntry = this.runList[++run];
                }while (runEntry.MajorKindPlusStartFlag == kind);

                position.run            = run;
                position.runOffset      = runOffset;
                position.runDeltaOffset = deltaOffset;

                if (run == unit.head || runEntry.MajorKindPlusStartFlag == kind)
                {
                    return(true);
                }
            }

            return(false);
        }
Exemplo n.º 32
0
 public List<int[]> getPrisonerLocations(FragmentPosition fragmentPosition)
 {
     return getShiftedLocations(prisonerLocations, fragmentPosition);
 }
Exemplo n.º 33
0
        protected internal int Read(LexicalUnit unit, ref FragmentPosition position, char[] buffer, int offset, int count)
        {
            InternalDebug.Assert(count != 0);

            int startOffset = offset;

            if (unit.head != -1)
            {
                uint kind = this.runList[unit.head].MajorKind;

                int run = position.run;

                if (run == unit.head - 1)
                {
                    run = position.run = unit.head;
                }

                RunEntry runEntry = this.runList[run];

                if (run == unit.head || runEntry.MajorKindPlusStartFlag == kind)
                {
                    int runOffset      = position.runOffset;
                    int runDeltaOffset = position.runDeltaOffset;

                    do
                    {
                        InternalDebug.Assert(count != 0);

                        if (runEntry.Type == RunType.Literal)
                        {
                            int literalLength = Token.LiteralLength(runEntry.Value);

                            if (runDeltaOffset != literalLength)
                            {
                                if (literalLength == 1)
                                {
                                    InternalDebug.Assert(runDeltaOffset == 0);

                                    buffer[offset++] = (char)runEntry.Value;
                                    count--;
                                }
                                else
                                {
                                    InternalDebug.Assert(literalLength == 2);

                                    if (runDeltaOffset != 0)
                                    {
                                        InternalDebug.Assert(runDeltaOffset == 1);

                                        buffer[offset++] = Token.LiteralLastChar(runEntry.Value);
                                        count--;
                                    }
                                    else
                                    {
                                        buffer[offset++] = Token.LiteralFirstChar(runEntry.Value);
                                        count--;

                                        if (count == 0)
                                        {
                                            runDeltaOffset = 1;
                                            break;
                                        }

                                        buffer[offset++] = Token.LiteralLastChar(runEntry.Value);
                                        count--;
                                    }
                                }
                            }
                        }
                        else if (runEntry.Type == RunType.Normal)
                        {
                            InternalDebug.Assert(runDeltaOffset >= 0 && runDeltaOffset < runEntry.Length);

                            int copyCount = Math.Min(count, runEntry.Length - runDeltaOffset);

                            InternalDebug.Assert(copyCount != 0);

                            {
                                Buffer.BlockCopy(this.buffer, (runOffset + runDeltaOffset) * 2, buffer, offset * 2, copyCount * 2);

                                offset += copyCount;
                                count  -= copyCount;

                                if (runDeltaOffset + copyCount != runEntry.Length)
                                {
                                    runDeltaOffset += copyCount;
                                    break;
                                }
                            }
                        }

                        runOffset     += runEntry.Length;
                        runDeltaOffset = 0;

                        runEntry = this.runList[++run];
                    }while (runEntry.MajorKindPlusStartFlag == kind && count != 0);

                    position.run            = run;
                    position.runOffset      = runOffset;
                    position.runDeltaOffset = runDeltaOffset;
                }
            }

            return(offset - startOffset);
        }
Exemplo n.º 34
0
 private List<int[]> getShiftedLocations(List<int[]> locations, FragmentPosition fragmentPosition)
 {
     List<int[]> ret = new List<int[]>();
     switch (fragmentPosition)
     {
         case FragmentPosition.LeftHalf:
         case FragmentPosition.TopHalf:
         case FragmentPosition.TopLeftCorner:
             ret.AddRange(locations);
             break;
         case FragmentPosition.RightHalf:
         case FragmentPosition.TopRightCorner:
             foreach (int[] coord in locations)
             {
                 int[] shifted = { coord[0] + LevelContent.LEVEL_SIZE_HALF - 1, coord[1] };
                 ret.Add(shifted);
             }
             break;
         case FragmentPosition.BottomHalf:
         case FragmentPosition.BottomLeftCorner:
             foreach (int[] coord in locations)
             {
                 int[] shifted = { coord[0], coord[1] + LevelContent.LEVEL_SIZE_HALF - 1 };
                 ret.Add(shifted);
             }
             break;
         case FragmentPosition.BottomRightCorner:
             foreach (int[] coord in locations)
             {
                 int[] shifted = { coord[0] + LevelContent.LEVEL_SIZE_HALF - 1, coord[1] + LevelContent.LEVEL_SIZE_HALF - 1 };
                 ret.Add(shifted);
             }
             break;
     }
     return ret;
 }
Exemplo n.º 35
0
        protected internal int Read(LexicalUnit unit, ref FragmentPosition position, char[] buffer, int offset, int count)
        {
            int num = offset;

            if (unit.head != -1)
            {
                uint majorKind = runList[unit.head].MajorKind;
                int  num2      = position.run;
                if (num2 == unit.head - 1)
                {
                    num2 = (position.run = unit.head);
                }
                RunEntry runEntry = runList[num2];
                if (num2 == unit.head || runEntry.MajorKindPlusStartFlag == majorKind)
                {
                    int num3 = position.runOffset;
                    int num4 = position.runDeltaOffset;
                    int num6;
                    while (true)
                    {
                        if (runEntry.Type == (RunType)3221225472u)
                        {
                            int num5 = LiteralLength(runEntry.Value);
                            if (num4 != num5)
                            {
                                if (num5 == 1)
                                {
                                    buffer[offset++] = (char)runEntry.Value;
                                    count--;
                                }
                                else if (num4 != 0)
                                {
                                    buffer[offset++] = LiteralLastChar(runEntry.Value);
                                    count--;
                                }
                                else
                                {
                                    buffer[offset++] = LiteralFirstChar(runEntry.Value);
                                    count--;
                                    if (count == 0)
                                    {
                                        break;
                                    }
                                    buffer[offset++] = LiteralLastChar(runEntry.Value);
                                    count--;
                                }
                            }
                        }
                        else if (runEntry.Type == (RunType)2147483648u)
                        {
                            num6 = Math.Min(count, runEntry.Length - num4);
                            Buffer.BlockCopy(this.buffer, (num3 + num4) * 2, buffer, offset * 2, num6 * 2);
                            offset += num6;
                            count  -= num6;
                            if (num4 + num6 != runEntry.Length)
                            {
                                goto Block_10;
                            }
                        }
                        num3    += runEntry.Length;
                        num4     = 0;
                        runEntry = runList[++num2];
                        if (runEntry.MajorKindPlusStartFlag != majorKind || count == 0)
                        {
                            goto IL_1CF;
                        }
                    }
                    num4 = 1;
                    goto IL_1CF;
Block_10:
                    num4 += num6;
IL_1CF:
                    position.run            = num2;
                    position.runOffset      = num3;
                    position.runDeltaOffset = num4;
                }
            }
            return(offset - num);
        }
Exemplo n.º 36
0
        // Helper function to set parts of the level
        private void setFragmentIntoLevel(LevelFragment fragment, FragmentPosition position)
        {
            int texWidth        = fragment.levelTexture.Width;
            int texHeight       = fragment.levelTexture.Height;
            int gridWidth       = fragment.grid.GetLength(0);
            int gridHeight      = fragment.grid.GetLength(1);
            int texStartWidth   = 0;
            int texStartHeight  = 0;
            int gridStartWidth  = 0;
            int gridStartHeight = 0;

            switch (position)
            {
            case FragmentPosition.LeftHalf:
            case FragmentPosition.TopHalf:
                texStartWidth   = 0;
                texStartHeight  = 0;
                gridStartWidth  = 0;
                gridStartHeight = 0;
                break;

            case FragmentPosition.TopLeftCorner:
                texStartWidth   = 0;
                texStartHeight  = 0;
                gridStartWidth  = 0;
                gridStartHeight = 0;
                break;

            case FragmentPosition.RightHalf:
            case FragmentPosition.TopRightCorner:
                texStartWidth   = texWidth + TILE_SIZE;
                texStartHeight  = 0;
                gridStartWidth  = gridWidth - 1;
                gridStartHeight = 0;
                break;

            case FragmentPosition.BottomHalf:
            case FragmentPosition.BottomLeftCorner:
                texStartWidth   = 0;
                texStartHeight  = texHeight + TILE_SIZE;
                gridStartWidth  = 0;
                gridStartHeight = gridHeight - 1;
                break;

            case FragmentPosition.BottomRightCorner:
                texStartWidth   = texWidth + TILE_SIZE;
                texStartHeight  = texHeight + TILE_SIZE;
                gridStartWidth  = gridWidth - 1;
                gridStartHeight = gridHeight - 1;
                break;
            }
            //cut off last row/column if necessary
            switch (position)
            {
            case FragmentPosition.LeftHalf:
            case FragmentPosition.BottomLeftCorner:
                gridHeight--;
                break;

            case FragmentPosition.TopHalf:
            case FragmentPosition.TopRightCorner:
                gridWidth--;
                break;

            case FragmentPosition.RightHalf:
            case FragmentPosition.BottomHalf:
            case FragmentPosition.BottomRightCorner:
                gridWidth--;
                gridHeight--;
                break;
            }

            //color grid
            switch (position)
            {
            case FragmentPosition.LeftHalf:
                fragmentGrid[0, 0] = fragment;
                fragmentGrid[0, 1] = fragment;
                break;

            case FragmentPosition.RightHalf:
                fragmentGrid[1, 0] = fragment;
                fragmentGrid[1, 1] = fragment;
                break;

            case FragmentPosition.TopHalf:
                fragmentGrid[0, 0] = fragment;
                fragmentGrid[1, 0] = fragment;
                break;

            case FragmentPosition.BottomHalf:
                fragmentGrid[0, 1] = fragment;
                fragmentGrid[1, 1] = fragment;
                break;

            case FragmentPosition.TopLeftCorner:
                fragmentGrid[0, 0] = fragment;
                break;

            case FragmentPosition.TopRightCorner:
                fragmentGrid[1, 0] = fragment;
                break;

            case FragmentPosition.BottomLeftCorner:
                fragmentGrid[0, 1] = fragment;
                break;

            case FragmentPosition.BottomRightCorner:
                fragmentGrid[1, 1] = fragment;
                break;
            }
            //level grid
            grid.setDataRectangle <LevelContent.LevelTile>(new Rectangle(gridStartWidth, gridStartHeight, gridWidth, gridHeight), fragment.grid);
            //locations
            collectableLocations.AddRange(fragment.getCollectableLocations(position));
            enemyLocations.AddRange(fragment.getEnemyLocations(position));
            prisonerLocations.AddRange(fragment.getPrisonerLocations(position));
            powerupLocations.AddRange(fragment.getPowerupLocations(position));
        }