Пример #1
0
        //Constructor
        public Map(int tilesize)
        {
            int x=0;
            int y=0;
            tileSize = tilesize;
            currentDimension = 2;
            spriteArrMax = 0;
            sprites[000] = null;
            sprites[001] = new Player(-200, -200);
            sprites[002] = new Boo(-200, -200);
            sprites[003] = new Goomba(-200, -200, false, (short)rnd.Next(1, 4));
            sprites[004] = new Koopa_green(-200, -200);
            sprites[005] = new Koopa_green(-200, -200, false, 1, 2);  //jumping
            sprites[006] = new Koopa_green(-200, -200, false, 1, 3);  //high jumping
            sprites[007] = new Koopa_red(-200, -200);
            sprites[008] = new Koopa_red(-200, -200, false, 1, 2);  //jumping
            sprites[009] = new Koopa_red(-200, -200, false, 1, 3);  //high jumping
            sprites[010] = new Bulletbill(-200, -200, false, (short)rnd.Next(1, 5));
            sprites[011] = new Bulletbill(-200, -200, false, 3,true);   //homing version (only type 3 !!!)
            sprites[012] = new Buzzybeetle(-200, -200, false);
            sprites[013] = new Spiny(-200, -200, false, 1, false);  //Spiny
            sprites[014] = new Spiny(-200, -200, false, 1, true);   //Spiny-Egg
            sprites[015] = new Piranhaplant(-200, -200, 1);     //Green Piranha Plant
            sprites[016] = new Piranhaplant(-200, -200, 2);     //Red Piranha Plant
            sprites[017] = new Hammerbros(-200, -200);
            sprites[018] = new Lakitu(-200, -200);
            sprites[019] = new Blooper(-200, -200,(short)rnd.Next(0,2));
            sprites[020] = new CheepCheep(-200, -200,false, 0); //Green CheepCheep
            sprites[021] = new CheepCheep(-200, -200, false, 1); //Red CheepCheep
            sprites[022] = new Bowser_smb1(-200, -200, false, false);   //smb1 Bowser
            sprites[023] = new Bowser_smb1(-200, -200, false, true);    //smb1 Bowser with Hammers

            sprites[100] = null;
            sprites[101] = new Coin(-200, -200, (short)rnd.Next(1, 6));     //fixed Coin
            sprites[102] = new Coin(-200, -200, (short)rnd.Next(1, 6), false);  //loose Coin
            sprites[103] = new Pow(-200, -200);
            sprites[104] = new Mushroom(-200, -200, false, (short)rnd.Next(1, 3));
            sprites[105] = new Mushroom_p(-200, -200);
            sprites[106] = new Fireflower(-200, -200, (short)rnd.Next(1, 4));
            sprites[107] = new Starman(-200, -200, false, (short)rnd.Next(1, 5));
            sprites[108] = new OneUp(-200, -200);
            sprites[109] = new ThreeUp(-200, -200);
            sprites[110] = new Keyy(-200, -200, (short)rnd.Next(1, 3));
            sprites[111] = new Spring_p(-200, -200);
            sprites[112] = new PSwitch_b(-200, -200);
            sprites[113] = new Cannon(-200, -200);

            sprites[200] = new Lava(-200, -200);
            sprites[201] = new Potaboo(-200, -200);
            sprites[202] = new Firebar(-200, -200);
            sprites[203] = new Winehead(-200, -200);
            sprites[204] = new Bricks(-200, -200, (short)rnd.Next(1, 5), (short)rnd.Next(102,114));
            sprites[205] = new Qm(-200, -200, 1, 102);
            sprites[206] = new Keyhole(-200, -200);
            sprites[207] = new Generator(-200, -200, 3);    //Sprite-generator
            sprites[208] = new WarpToWarp(-200, -200, true, 1, 0, warpNr);      //Warp Start-Point
            sprites[209] = new WarpToWarp(-200, -200, false, 3, 0, warpNr);  //Warp End-Point
            sprites[210] = new WarpToXYS(-200, -200, 200, 200);     //Warp to XY Coordinates (S=Section of that level)
            sprites[211] = new RollingRock(-200, -200);
            sprites[212] = new Platform(-200, -200);
            sprites[213] = new Platform_pulley(-200, -200, 6);
            sprites[214] = new FixedSpring(-200, -200, 0);  //Red normal fix spring
            sprites[215] = new FixedSpring(-200, -200, 1);  //Green strong fix spring

            maxTextureSize = GL.GetInteger(OpenTK.Graphics.OpenGL.GetPName.MaxTextureSize);
            Console.WriteLine("BG: " + Texture.backGround);
            MyImage.activeTexture = Texture.backGround;
            GL.BindTexture(TextureTarget.Texture2D, Texture.backGround);
            GL.GetTexLevelParameter(TextureTarget.Texture2D, 0, GetTextureParameter.TextureWidth, out bgW);     //Get Width and
            GL.GetTexLevelParameter(TextureTarget.Texture2D, 0, GetTextureParameter.TextureHeight, out bgH);    //Height from the loaded Background

            MyImage.activeTexture = Texture.tileSet;
            GL.BindTexture(TextureTarget.Texture2D, Texture.tileSet);
            GL.GetTexLevelParameter(TextureTarget.Texture2D, 0, GetTextureParameter.TextureWidth, out tileSetW);    //Get Width and
            GL.GetTexLevelParameter(TextureTarget.Texture2D, 0, GetTextureParameter.TextureHeight, out tileSetH);   //Height from the loaded tileset

            currentIDArr[0, 1] = 2;                                                 //numer of diffrent collision-types
            currentIDArr[1, 1] = Texture.bgTilesArray.GetLength(0) - 1;             //Max Back- / Fore-ground Object ID
            currentIDArr[2, 1] = ((tileSetW / tileSize) * (tileSetH / tileSize))-1; //max tileID
            currentIDArr[3, 1] = sprites.GetLength(0) - 1;                          //max spriteID
            currentIDArr[4, 1] = Texture.bgTilesArray.GetLength(0) - 1;             //Max Back- / Fore-ground Object ID

            currentIDArr[3, 0] = 100;

            while (y < map.GetLength(0))    //fill a new map with empty and no collision
            {
                while (x < map.GetLength(1))
                {
                    map[y, x, 0] = 0;           //collision info, 0=non-solid     1=solid     2=cloud (only top-solid)      3=Ladder        4=Lava/Instant-death      5=Spikes/1Hit
                    map[y, x, 1] = 0;           //Background Objects (not the actual Background !!!)
                    map[y, x, 2] = currentIDArr[2,1]-3; //Tile-IDs, -1 means no block there
                    map[y, x, 3] = 0;           //sprite-IDs, -1 means that the sprites was spawned and won't spawn endless each loop
                    map[y, x, 4] = 0;           //Foreground Objects (no collision)

                    x++;
                    if (x == map.GetLength(1))
                    { y++; x = 0; }
                    if (y == map.GetLength(0))
                        break;
                }
            }

            map[9, 9, 3] = 1; //Test Player
            map[11, 8, 2] = 0;//Block under Player
            map[11, 8, 0] = 1;//Solid under Player
            map[11, 9, 2] = 0;//Block under Player
            map[11, 9, 0] = 1;//Solid under Player
            map[11, 10, 2] = 0;//Block under Player
            map[11, 10, 0] = 1;//Solid under Player
            map[10, 10, 3] = 2; //Test Boo
            map[11, 11, 3] = 300;   //Test Fireball (harms player)
        }
Пример #2
0
        //////////////////////////////////////////////////////////////////////////////////////////////////////////////////// PROCESS
        public void process(int mausXX, int mausYY)
        {
            int fpsX = 642;
            int fpsY = 367;

            if (fpsLine.Count >= 1)
            {
                for (int i = 0; i != fpsLine.Count - 1; i++)
                {
                    GL.Begin(PrimitiveType.Lines);
                    GL.Color3(Color.Yellow);
                    GL.Vertex2(fpsX + i, fpsY + 100);
                    GL.Vertex2(fpsX + i, fpsY + 100 - fpsLine[i]);
                    GL.End();
                }
            }

            MyImage.beginDraw2D();

            if (fpsLine.Count >= 1)
                MyImage.drawText("FPS-Graph:"+(int)fpsLine[0], 705, 468, Color.Yellow, Texture.ASCII);

            frameCount++;
            if (frameCount == 10)
            {
                frameDelay++;
                frameCount=0;
                if (frameDelay == 10)
                    frameDelay = 0;
            }

            var keyboard = RootThingy.keyboard;
            var maus = Mouse.GetState();        //Don't use this mouse for coordinates, their origin is not from the gameWindow !!!

            MyImage.drawText("Press F12 to toggle Debug-Info", 870, 38, Color.Blue, Texture.ASCII);

            ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////Calculate Average Player(s) Position for Camera
            double avgX = 0;
            double avgY = 0;
            int avgNr = 0;
            for (int i = 0; i <= spriteArrMax; i++)
            {
                if (spriteArray[i] != null && spriteArray[i].name=="Player")
                {
                    avgX += Map.spriteArray[i].colRect.x;
                    avgY += Map.spriteArray[i].colRect.y;
                    avgNr++;
                }
            }
            if (avgNr > 0)
            {
                RootThingy.camX = avgX / avgNr;
                RootThingy.camY = avgY / avgNr;
            }
            else
            {
                RootThingy.camX = RootThingy.sceneX / 2;
                RootThingy.camY = RootThingy.sceneY / 2;
            }

            ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////AI-Loop
            spriteCount = 0;
            for (int i = 0; i <= spriteArrMax; i++)
            {
                if (spriteArray[i] != null)
                {
                    spriteCount++;
                    if (spriteArray[i].AIEnabled)
                    {

                        spriteArray[i].doAI();
                        spriteArray[i].refreshColRect();
                    }
                    if (RootThingy.debugInfo)
                    {
                        MyImage.drawText("[" + i + "][id"+spriteArray[i].id+"]=" + spriteArray[i].name + " X=" + (int)spriteArray[i].x + " Y=" + (int)spriteArray[i].y, 870, (i * 12) + 50, Color.Red, Texture.ASCII);
                        MyImage.endDraw2D();
                        GL.Begin(PrimitiveType.LineLoop);
                        GL.Color3(Color.Aqua);
                        GL.Vertex2(spriteArray[i].colRect.x, spriteArray[i].colRect.y);
                        GL.Vertex2(spriteArray[i].colRect.x + spriteArray[i].colRect.w, spriteArray[i].colRect.y);
                        GL.Vertex2(spriteArray[i].colRect.x + spriteArray[i].colRect.w, spriteArray[i].colRect.y + spriteArray[i].colRect.h);
                        GL.Vertex2(spriteArray[i].colRect.x, spriteArray[i].colRect.y + spriteArray[i].colRect.h);
                        GL.End();
                        MyImage.beginDraw2D();
                    }
                    if (spriteArray[i].despawnOffScreen)
                    {
                        if (spriteArray[i].x + spriteArray[i].w > RootThingy.sceneX || spriteArray[i].x < 0 || /*spriteArray[i].y < 0 ||*/ spriteArray[i].y + spriteArray[i].h > RootThingy.sceneY)
                        {
                            spriteArray[i] = null;
                            //spriteArrayCount--;
                        }   //Delete sprites that are out of scene Borders
                    }
                }
            }
            ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////Render-Loops
            for (int i = 0; i <= spriteArrMax; i++)
            {
                if (spriteArray[i] != null && spriteArray[i].renderOrder < 0)   // -X to -1 = Background
                {
                    if(spriteArray[i].renderEnabled)
                        spriteArray[i].doRender();
                }
            }
            for (int i = 0; i <= spriteArrMax; i++)
            {
                if (spriteArray[i] != null && spriteArray[i].renderOrder == 0)   // 0 = Middle
                {
                    if (spriteArray[i].renderEnabled)
                        spriteArray[i].doRender();
                }
            }
            for (int i = 0; i <= spriteArrMax; i++)
            {
                if (spriteArray[i] != null && spriteArray[i].renderOrder > 0)   // 1 to +X = Foreground
                {
                    if (spriteArray[i].renderEnabled)
                        spriteArray[i].doRender();
                }
            }
            ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
            ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

            if (powActive > 0)
                powActive--;

            if (pSwitchTimer_b > -1)        //Handle Blue P-Switches
                pSwitchTimer_b--;                   //Count down the switch duration
            if (pSwitchTimer_b == 0)                                                    //
            {                                                                             //
                pSwitch_b = false;                                                          //
                double tempX;                                                                   //
                double tempY;                                                                       //
                short tempType;                                                                         //
                for (int i = 0; i != spriteArrMax; i++)                                               //
                {
                    if (spriteArray[i] != null)                                                            //
                    {
                        if (spriteArray[i].name == "Coin")                                                       //
                        {                                                                                       //
                            tempX = spriteArray[i].x;                                            //
                            tempY = spriteArray[i].y;                                            //Buffer X, Y and type of the object to be replaced
                            tempType = spriteArray[i].type;                                      //
                            spriteArray[i] = new Qm_e(tempX, tempY, tempType);               //Overwrite position with new object data from Buffers
                        }                                                                                       //
                        else if (spriteArray[i].name == "?-Block_e")                                             //
                        {                                                                                       //
                            tempX = spriteArray[i].x;                                                            //
                            tempY = spriteArray[i].y;                                                            //
                            tempType = spriteArray[i].type;                                                      //
                            spriteArray[i] = new Coin(tempX, tempY, tempType);                                   //
                            Map.map[(int)(tempY/16), (int)(tempX/16), 0] = 0;
                        }
                    }                                                                                         //
                }                                                                                           //
            }

            if (pSwitchTimer_b == 1)
                pSwitch_b = false;

                                    //Handle Silver P-Switches
            if (pSwitchTimer_s > -1)    //Count down the switch duration
                pSwitchTimer_s--;       //
            if (pSwitchTimer_s == 1)   //Revert effect after time is up
                pSwitch_s = false;      //

            MyImage.drawText("Mouse-Grid X: " + (mausXX / 16), 0, 504, Color.Red, Texture.ASCII);
            MyImage.drawText("Mouse-Grid Y: " + (mausYY / 16), 0, 516, Color.Red, Texture.ASCII);
            MyImage.drawText("Mouse X: " + mausXX + "(xVel: " + mausXVel + ")", 0, 528, Color.Red, Texture.ASCII);
            MyImage.drawText("Mouse Y: " + mausYY + "(yVel: " + mausYVel + ")", 0, 540, Color.Red, Texture.ASCII);

            mausXVel = mausXX - mausXLast;
            mausYVel = mausYY - mausYLast;

            mausXLast = mausXX;
            mausYLast = mausYY;
            mausX = mausXX;
            mausY = mausYY;

            mausX = mausXX / 16;
            mausY = mausYY / 16;

            mausRadLast = mausRad;
            mausRad = maus.Wheel;
            int mausRadDelta = mausRad - mausRadLast;

            if (currentIDArr[currentDimension, 0] < currentIDArr[currentDimension, 1] && mausRadDelta > 0)
                currentIDArr[currentDimension, 0] += mausRadDelta;
            if (currentIDArr[currentDimension, 0] > 0 && mausRadDelta < 0)
                currentIDArr[currentDimension, 0] += mausRadDelta;

            MyImage.drawText(getCurrentDimensionStr() + " (" + currentDimension + ")", 0, 492, Color.Red, Texture.ASCII);
            MyImage.drawText(" | ID " + currentIDArr[currentDimension, 0] + " / " + currentIDArr[currentDimension, 1], 204, 492, Color.Red, Texture.ASCII);

            switch (currentDimension)
            {
                case 0: ; break;    //COllision
                case 1:
                    if (Texture.bgTilesArray[currentIDArr[currentDimension, 0], 1] == 1)
                        MyImage.drawImage(Texture.bgTilesArray[currentIDArr[currentDimension, 0],0], mausX * 16, mausY * 16);   //Background
                    if (Texture.bgTilesArray[currentIDArr[currentDimension, 0], 1] > 1)
                        MyImage.drawTileFrame(Texture.bgTilesArray[currentIDArr[currentDimension, 0], 0], frameDelay, Texture.bgTilesArray[currentIDArr[currentDimension, 0], 1], mausX * 16, mausY * 16);
                break;

                case 2:
                    MyImage.drawTileFromID(Texture.tileSet, currentIDArr[currentDimension, 0], tileSize, mausX * 16, mausY * 16);
                    break;  //tiles

                case 3:
                    if(sprites[currentIDArr[currentDimension, 0]]!=null)
                        MyImage.drawText("Id" + currentIDArr[currentDimension, 0] + " = " + sprites[currentIDArr[currentDimension, 0]].getName(), (mausX * 16), (mausY * 16) - 12, Color.White, Texture.ASCII);
                    else
                        MyImage.drawText("Id" + currentIDArr[currentDimension, 0]+" = Leer", (mausX * 16), (mausY * 16) - 12, Color.White, Texture.ASCII);
                    break;    //sprites

                case 4: ; break;    //Foreground
                default: break;
            }

            if ((mausX >= 0 && mausX < map.GetLength(1)) && (mausY >= 0 && mausY < map.GetLength(0))) //Mouse in range of map-array ?
            {
                if (maus[MouseButton.Left]) //Place
                {
                    map[mausY, mausX, currentDimension] = currentIDArr[currentDimension, 0];
                    if (currentDimension != 1 && currentDimension != 3 && currentDimension != 4)    //Background sprites and Foreground don't set collision data to map
                        map[mausY, mausX, 0] = colInf[currentIDArr[currentDimension, 0]];
                    //Console.WriteLine("wrote TileID " + mausRad + "to [" + mausX + "][" + mausY + "].");
                    if(currentDimension==3)
                        Thread.Sleep(180);
                }
                if (maus[MouseButton.Right]) //remove
                {
                    map[mausY, mausX, currentDimension] = -1;
                    map[mausY, mausX, 0] = 0;
                    //Console.WriteLine("removed Tile from [" + mausX + "][" + mausY + "].");

                    BaseObj.ColRect obj1= new BaseObj.ColRect();
                    obj1.x=mausXX;
                    obj1.y=mausYY;
                    obj1.w=1;
                    obj1.h=1;
                    for (int i = 0; i <= spriteArrMax; i++)
                    {
                        if (spriteArray[i] != null)
                        {
                            BaseObj.ColRect obj2 = new BaseObj.ColRect();
                            obj2 = spriteArray[i].colRect;
                            if ((obj1.x + obj1.w >= obj2.x && obj1.x <= obj2.x + obj2.w) && (obj1.y + obj1.h >= obj2.y && obj1.y <= obj2.y + obj2.h))
                                spriteArray[i] = null;
                        }
                    }
                }
            }

            ///////////////////////////////////////////////////////////////////// KEYS

            if (keyboard[Key.V])
            {spriteAdd(new VeloTest(mausX * 16, mausY * 16)); Thread.Sleep(150); }

            if (keyboard[Key.Y])    //its actuacly the Z-Key on QWERTZ-Keyboards
            { RootThingy.zoomed = !RootThingy.zoomed; Thread.Sleep(150); }

            if (keyboard[Key.D])
            {
                currentDimension++;
                if (currentDimension > map.GetLength(2) - 1)
                    currentDimension = 0;
                Thread.Sleep(150);
            }

            if (keyboard[Key.F8])
            { spriteAdd(new RollingRock(mausX * 16, mausY * 16)); Thread.Sleep(150); }

            if (keyboard[Key.F9])               // F9
            { spriteAdd(new Resizeable(mausX * 16, mausY * 16,(short)(rnd.Next(2,7)),(short)(rnd.Next(2,7)),Texture.resizeable001)); Thread.Sleep(150); }     // Spawn something with F9 Key

            if (keyboard[Key.F10])               // F10
            { spriteAdd(new Blooper(mausX * 16, mausY * 16)); Thread.Sleep(150); }     // Spawn something with F10 Key

            if (keyboard[Key.F11])               // F11
            { spriteAdd(new WaterArea(mausX * 16, mausY * 16, 256, 256)); Thread.Sleep(150); }     // Spawn something with F11 Key

            if (keyboard[Key.F12])               // F12
            { RootThingy.debugInfo = !RootThingy.debugInfo; Thread.Sleep(150); }

            if (keyboard[Key.PageUp] || keyboard[Key.Keypad9])               // +
            { temp += 0.01; warpNr++; /*Thread.Sleep(20);*/ }     // A temp
            if (keyboard[Key.PageDown] || keyboard[Key.Keypad3])             // Variable
            { temp -= 0.01; warpNr--; /*Thread.Sleep(20);*/ }     // -

            MyImage.drawText("Temp: " + Math.Round(temp,3), 0, 612, Color.Red, Texture.ASCII);

            MyImage.endDraw2D();
        }