예제 #1
0
 //TODO: actual parallaxing
 public void parallaxBackground(Gameworld gameWorld)
 {
     for (int i = 0; i < gameWorld.Backgrounds.Count; i++ )
     {
         if (gameWorld.Backgrounds[i].Position.X < (-gameWorld.Backgrounds[i].TextureWidth))
         {
             gameWorld.Backgrounds[i].Position = new Vector2(gameWorld.Backgrounds[i].Position.X + gameWorld.Backgrounds[i].TextureWidth, 0);
             //gameWorld.Backgrounds[i+1].Position = new Vector2(gameWorld.Backgrounds[i+1].Position.X + gameWorld.Backgrounds[i+1].TextureWidth, 0);
         }
         gameWorld.Backgrounds[i].update();
     }
 }
예제 #2
0
파일: Game1.cs 프로젝트: Slokken/Risseproto
 public void buttonClicked(string action)
 {
     switch (action)
     {
         case "Start Spill":
             gameWorld = new Gameworld(contentHolder);
             gameState = GameState.Grandma;
             break;
         case "Start paa nytt":
             //F*****G UPDATE THE F*****G F**K, F**K
             gameWorld.resetToCheckpoint();
             gameState = GameState.InGame;
             break;
         case "Meny":
             gameState = GameState.Menu;
             break;
     }
 }
예제 #3
0
파일: Game1.cs 프로젝트: Slokken/Risseproto
        /// <summary>
        /// Allows the game to run logic such as updating the world,
        /// checking for collisions, gathering input, and playing audio.
        /// </summary>
        /// <param name="gameTime">Provides a snapshot of timing values.</param>
        protected override void Update(GameTime gameTime)
        {
            input.Update();

            if (gameState == GameState.Menu)
            {
                // Allows the game to exit
                if (input.WasKeyClicked(Keys.Escape))
                    this.Exit();
                if (input.WasKeyClicked(Keys.Enter))
                {
                    gameWorld = new Gameworld(contentHolder);
                    gameState = GameState.Grandma;
                }
                startButton.Update();
            }
            else if (gameState == GameState.Grandma)
            {
                if (input.WasKeyClicked(Keys.Escape))
                    gameState = GameState.Menu;
                if (input.WasKeyClicked(Keys.Enter))
                    gameState = GameState.InGame;
                if (input.WasMouseClicked())
                    gameState = GameState.InGame;
            }
            else if (gameState == GameState.Outro)
            {
                if (input.WasKeyClicked(Keys.Escape))
                    gameState = GameState.Menu;
                if (input.WasKeyClicked(Keys.Enter))
                {
                    gameWorld.resetToCheckpoint();
                    gameState = GameState.InGame;
                }
                restartButton.Update();
                menuButton.Update();

            }
            else if (gameState == GameState.InGame)
            {
                // Puts you back into the menu
                if (input.WasKeyClicked(Keys.Escape))
                    gameState = GameState.Menu;

                controller.update(gameWorld, gameTime);
                input.Swipe();
                input.Click();
            }
            base.Update(gameTime);
        }
예제 #4
0
파일: Game1.cs 프로젝트: Slokken/Risseproto
 protected override void Initialize()
 {
     // TODO: Add your initialization logic here
     input = new Input();
     contentHolder = new ContentHolder(Content);
     soundManager = new SoundManager(contentHolder);
     gameWorld = new Gameworld(contentHolder);
     controller = new Controller(input, soundManager, contentHolder);
     this.IsMouseVisible = true;
     base.Initialize();
 }
예제 #5
0
        public void update(Gameworld gameWorld, GameTime gameTime)
        {
            risse = gameWorld.Risse;
            Vector2 prePos = risse.Position;
            parallaxBackground(gameWorld);

            physicsEngine.gravitation(risse, gameTime);
            collisionResolution(gameWorld, prePos);
            risse.update(gameTime);
            foreach (Gameobject go in gameWorld.Platforms)
            {
                go.update();
            }

            //if (!(MediaPlayer.State == MediaState.Playing))
            //{
            //    MediaPlayer.Play(contentHolder.soundtrack);
            //}

            //foreach (Gameobject ground in gameWorld.Ground)
            //{
            //    ground.update();
            //}

            foreach (List<Gameobject> g in gameWorld.Ground)
            {
                foreach (Gameobject obj in g)
                {
                    obj.update();
                }
            }

            foreach (Gameobject obj in gameWorld.Collidables)
            {
                obj.update();
            }

            //Console.Out.WriteLine(risse.Position);
        }
예제 #6
0
 //handles landing on or jumping up and hitting a platform
 protected void collisionVertical(Gameworld gameworld, Vector2 newPos)
 {
     gameworld.Risse.Position = newPos;
     gameworld.Risse.Velocity = new Vector2(gameworld.Risse.Velocity.X, 0);
 }
예제 #7
0
        protected void collisionResolution(Gameworld gameworld, Vector2 prePos)
        {
            Console.Out.WriteLine(risse.OnTheGround);
            bool collidedWithPlatformSide = false;
            bool airborne = true;
            bool crouchingRisseHiddenBoundingBox;
            if (risse.Animation == (int)state.ducking){
                crouchingRisseHiddenBoundingBox = true;
            }
            else
            {
                crouchingRisseHiddenBoundingBox = false;
            }
            foreach (Gameobject platform in gameworld.Platforms)
            {
                if (physicsEngine.collisionDetection(risse, platform, crouchingRisseHiddenBoundingBox))
                {
                    if (collisionDetermineType(gameworld, risse, platform, prePos))
                    {
                        collidedWithPlatformSide = true;
                    }
                    else
                    {
                        airborne = false;
                    }
                }
            }

            if (!collidedWithPlatformSide)
            {
                //foreach (Gameobject ground in gameworld.Ground)
                //{
                //    if (physicsEngine.collisionDetection(risse, ground))
                //    {
                //        if (collisionDetermineType(gameworld, risse, ground, prePos))
                //        {
                //            collidedWithPlatformSide = true;
                //        }
                //    }
                //}

                foreach (List<Gameobject> list in gameworld.Ground)
                {
                    foreach (Gameobject ground in list)
                    {
                        if (physicsEngine.collisionDetection(risse, ground, crouchingRisseHiddenBoundingBox))
                        {
                            if (collisionDetermineType(gameworld, risse, ground, prePos))
                            {
                                collidedWithPlatformSide = true;
                            }
                            else
                            {
                                airborne = false;
                            }
                        }
                    }
                }

                if (!collidedWithPlatformSide)
                {
                    foreach (Gameobject collidable in gameworld.Collidables)
                    {
                        if (physicsEngine.collisionDetection(risse, collidable, crouchingRisseHiddenBoundingBox))
                        {
                            collisionHorizontal(gameworld, prePos);
                        }
                    }
                }
                if (airborne)
                {
                    //risse.OnTheGround = false;
                }
            }
        }
예제 #8
0
 //handles colliding with something from the side
 protected void collisionHorizontal(Gameworld gameworld, Vector2 prePos)
 {
     gameworld.Risse.Velocity = Vector2.Zero;
     gameworld.Risse.Position = new Vector2(prePos.X, gameworld.Risse.Position.Y);
     if (risse.Animation != (int)state.crash){
         gameworld.Risse.Animation = (int)state.crash;
         Console.Out.WriteLine("crashed");
     }
 }
예제 #9
0
        // returns true if colliding from side
        protected bool collisionDetermineType(Gameworld gameworld, Gameobject risse, Gameobject platform, Vector2 prePos)
        {
            if (risse.BoundingBox.Right - (risse.BoundingBox.Width/2) > platform.BoundingBox.Left && risse.BoundingBox.Right - (risse.BoundingBox.Width/2) < platform.BoundingBox.Right)
            {
                if (risse.Position.Y + risse.BoundingBox.Height < platform.BoundingBox.Y + platform.BoundingBox.Height){
                    collisionVertical(gameworld, new Vector2(risse.Position.X, platform.Position.Y - (risse.BoundingBox.Height - 1)));
                    risse.OnTheGround = true;
                    if (risse.Animation != (int)state.crash && risse.Animation != (int)state.ducking)
                    {
                        gameworld.Risse.Animation = (int)state.running;
                        Console.Out.WriteLine("running");
                    }
                }
                else if (risse.Position.Y < platform.BoundingBox.Y + platform.BoundingBox.Height)
                {
                    if (risse.OnTheGround)
                    {
                        gameworld.Risse.Animation = (int)state.ducking;
                        Console.Out.WriteLine("ducking");
                    }
                    else
                    {
                        collisionVertical(gameworld, new Vector2(risse.Position.X, platform.Position.Y + (platform.BoundingBox.Height + 1)));
                    }
                }
                return false;
            }

            if (risse.OnTheGround && risse.Position.Y + risse.BoundingBox.Height < platform.BoundingBox.Y + platform.BoundingBox.Height)
            {
                collisionVertical(gameworld, new Vector2(risse.Position.X, platform.Position.Y - (risse.BoundingBox.Height - 1)));
                return false;
            }
            collisionHorizontal(gameworld, prePos);
            return true;
        }
예제 #10
0
        protected void collisionResolution(Gameworld gameworld, Vector2 prePos)
        {
            risse.OnTheGround = false;

            foreach (List<Gameobject> list in gameworld.Ground)
            {
                foreach (Gameobject ground in list)
                {
                    if (physicsEngine.collisionDetection(risse, ground))
                    {
                        if (risse.BoundingBox.Bottom <= ground.Position.Y + 30 && theState == state.ducking)
                        {
                            risse.Position = new Vector2(risse.Position.X, ground.Position.Y - (risse.BoundingBox.Height * 2) + 1);
                            risse.Velocity = Vector2.Zero;
                            //playFootstep();
                            risse.OnTheGround = true;
                        }
                        else if (risse.BoundingBox.Bottom <= ground.Position.Y + 30 && risse.Velocity.Y > 0)
                        {
                            risse.Position = new Vector2(risse.Position.X, ground.Position.Y - risse.BoundingBox.Height + 1);
                            risse.Velocity = Vector2.Zero;
                            //playFootstep();
                            risse.OnTheGround = true;
                        }
                    }
                }
            }
            foreach (List<Gameobject> list in gameworld.Platforms)
            {
                foreach (Gameobject platform in list)
                {
                    if (physicsEngine.collisionDetection(risse, platform))
                    {
                        if (risse.BoundingBox.Bottom <= platform.Position.Y + 30 && risse.Velocity.Y > 0 && theState != state.ducking)
                        {
                            risse.Position = new Vector2(risse.Position.X, platform.Position.Y - risse.BoundingBox.Height + 1);
                            risse.Velocity = Vector2.Zero;
                            //playFootstep();
                            risse.OnTheGround = true;
                        }
                    }
                }
            }
            foreach (Gameobject collidable in gameworld.Collidables)
            {
                if (physicsEngine.collisionDetection(risse, collidable))
                {
                    if (risse.BoundingBox.Right <= collidable.Position.X + 30)// && risse.BoundingBox.Bottom >= collidable.Position.Y)
                    {
                        crash();
                        //Console.Out.WriteLine("pang");
                    }
                }
            }
            if (risse.OnTheGround && theState != state.ducking && theState != state.crash)
            {
                playFootstep(false);
                risse.Animation = (int)state.running;
            }

            if (risse.BoundingBox.Top > GraphicsAdapter.DefaultAdapter.CurrentDisplayMode.Height)
            {
                goToOutro();
            }
        }
예제 #11
0
        public void update(Gameworld gameWorld, GameTime gameTime)
        {
            risse = gameWorld.Risse;
            parallaxBackground(gameWorld);

            physicsEngine.gravitation(risse, gameTime);
            collisionResolution(gameWorld, prePos);
            prePos = new Vector2(risse.BoundingBox.X, risse.BoundingBox.Y);
            risse.update(gameTime);
            //foreach (Gameobject go in gameWorld.Platforms)
            //{
            //    go.update();
            //}

            gameWorld.updateCheckpointsDone();

            if (theState == state.ducking)
            {
                if (ducking > 1000)
                {
                    ducking = 0;
                    theState = state.running;
                    risse.Animation = (int)state.running;
                }
                ducking += (float)gameTime.ElapsedGameTime.Milliseconds;
            }
            if (theState == state.crash)
            {
                if (crashing > 1000)
                {
                    crashing = 0;
                    theState = state.running;
                    risse.Animation = (int)state.running;
                }
                crashing += (float)gameTime.ElapsedGameTime.Milliseconds;
            }

            foreach (List<Gameobject> p in gameWorld.Platforms)
            {
                foreach (Gameobject obj in p)
                {
                    obj.update();
                }
            }
            if (!(MediaPlayer.State == MediaState.Playing))
            {
                MediaPlayer.Play(contentHolder.music_soundtrack);
            }

            foreach (Gameobject go in gameWorld.BackgroundFluff)
            {
                go.updateFluff(risse, contentHolder);
            }

            gameWorld.Platforms[0][0].Position = new Vector2(gameWorld.BackgroundFluff[0].Position.X - gameWorld.Platforms[0][0].Texture.Width, gameWorld.Platforms[0][0].Position.Y);
            gameWorld.Platforms[0][1].Position = new Vector2(gameWorld.BackgroundFluff[0].Position.X + gameWorld.Platforms[0][1].SpriteWidth, gameWorld.Platforms[0][1].Position.Y);

            //foreach (Gameobject ground in gameWorld.Ground)
            //{
            //    ground.update();
            //}

            foreach (List<Gameobject> g in gameWorld.Ground)
            {
                foreach (Gameobject obj in g)
                {
                    obj.update();
                }
            }

            foreach (Gameobject obj in gameWorld.Collidables)
            {
                obj.update();
            }
        }