Guest User

GGJ2013 'Feelings' physics

a guest
May 18th, 2013
54
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 7.54 KB | None | 0 0
  1.     public class Player
  2.     {
  3.         public static float MINACCEL = 250;//120;
  4.         public static float MINSPEED = 40;
  5.         public static float MAXSPEED = 400;
  6.         public static float RUNMAXSPEED = 1000;
  7.         public static float DECELERATION = 12f; //Divides by (1 + DEC)
  8.         public static float ACCELERATION = 200;
  9.         public static float RUNACCELERATION = 500;
  10.         public static float VERTDEC = 3f; //Vertical deceleration: divides by (1 + DEC)
  11.         public static float MINVERTSPEED = 200f;
  12.         public static float JUMPFORCE = 550f;
  13.        
  14.  
  15.         public float x = 600;
  16.         public float y = 0;
  17.         public float velocityX = 0;
  18.         public float velocityY = 0;
  19.         public float width = 0;
  20.         public float height = 0;
  21.     public bool isJumping = true;
  22.     public bool canjump = false;
  23.  
  24.         public Sprite sprite;
  25.  
  26. [...]
  27.  
  28.         public void Update(GameTime gameTime)
  29.         {
  30.             float seconds=(float)gameTime.ElapsedGameTime.TotalSeconds;
  31.            
  32.             //Update width/height
  33.             this.width = this.sprite.GetImage().Width;
  34.             this.height = this.sprite.GetImage().Height;
  35.  
  36.             //Calculate position and check for collision
  37.             float targetX = x + velocityX * seconds;
  38.             float targetY = y + velocityY * seconds;
  39.            
  40.            
  41.             if (targetX < 0) targetX = 0;
  42.             if (targetX + width > Main.LEVEL_EDGE_X) targetX = Main.LEVEL_EDGE_X - width;
  43.            
  44.  
  45.             if(Util.CheckCollision(targetX+width-1, targetY+4, 1, height-8, // collision for right side
  46.                 Main.core.x, Main.core.y, Main.core.sprite.GetImage().Width, Main.core.sprite.GetImage().Height))// right side
  47.             {
  48.                 if(velocityX>-1){
  49.                     targetX = x;
  50.                 }
  51.             }
  52.  
  53.             if(Util.CheckCollision(targetX, targetY+4, 1, height-8, // collision for left side
  54.                 Main.core.x, Main.core.y, Main.core.sprite.GetImage().Width, Main.core.sprite.GetImage().Height))
  55.                 {
  56.                     if(velocityX<0){
  57.                         targetX = x;
  58.                     }
  59.                 }
  60.            
  61.            if( (Util.CheckCollision(targetX+2, targetY+height, width-4, 1, // down check
  62.                   Main.core.x, Main.core.y, Main.core.sprite.GetImage().Width, Main.core.sprite.GetImage().Height)) || (targetY+height>Main.GROUNDY))// core collision
  63.             {
  64.                 if(velocityY>0){
  65.                     while( (Util.CheckCollision(targetX+2, targetY+height, width-4, 1, // down check
  66.                       Main.core.x, Main.core.y, Main.core.sprite.GetImage().Width, Main.core.sprite.GetImage().Height)) || (targetY+height>Main.GROUNDY) )
  67.                     {
  68.                         targetY--;
  69.                     }
  70.                    
  71.                    
  72.                     targetY++;
  73.                     velocityY = 0;
  74.                     isJumping = false;
  75.                     canjump = true;
  76.                 }
  77.            } else
  78.            {
  79.                 isJumping = true;
  80.                 canjump = false;
  81.            }
  82.            
  83.             if(isJumping){ //handle jumping
  84.                 velocityY += 1300 * seconds;
  85.                 y+=velocityY*seconds;
  86.             }
  87.  
  88.            //Update position
  89.             x = targetX;
  90.             y = targetY;
  91.            
  92.             //Update sprite
  93.            
  94.             //Animations
  95.             if (this.sprite.currentAnimation != "default" && this.velocityX == 0 && this.velocityY == 0) this.sprite.ChangeAnimation("default");
  96.             else if (this.sprite.currentAnimation != "jumping" && (this.velocityY < 0 || this.velocityY > 0)) this.sprite.ChangeAnimation("jumping");
  97.             else if (this.sprite.currentAnimation != "running" && (this.velocityX < 0 || this.velocityX > 0) && this.velocityY == 0) this.sprite.ChangeAnimation("running");
  98.  
  99.             //Flip and position
  100.             if (velocityX > 0) this.sprite.isFlipped = Microsoft.Xna.Framework.Graphics.SpriteEffects.None; //Don't flip - face right
  101.             else if (velocityX < 0) this.sprite.isFlipped = Microsoft.Xna.Framework.Graphics.SpriteEffects.FlipHorizontally; //Flip - face left
  102.             this.sprite.SetPosition(x, y); //Set position to player position
  103.         }
  104.        
  105.         public void Jump()
  106.         {
  107.             Audio.PlaySound("jump");
  108.             this.velocityY = -JUMPFORCE;
  109.         }
  110.  
  111.     }
  112.  
  113. -------------------------
  114.  
  115.     public static class Input
  116.     {
  117.         public static void Update(GameTime gameTime)
  118.         {
  119.             oldState = newState;
  120.             newState = Keyboard.GetState();
  121.  
  122.             if (Main.gameState == Main.GameState.Playing)
  123.             {
  124.                 //===================PLAYING==================
  125.                 //------------------Move left/right--------------------
  126.                 //Acceleration stuff
  127.                 float velocityMod = 0;
  128.                 if (newState.IsKeyDown(Keys.LeftShift) || newState.IsKeyDown(Keys.RightShift)) //Running
  129.                 {
  130.                     if (newState.IsKeyDown(Keys.Left)) velocityMod = -Player.RUNACCELERATION;
  131.                     if (newState.IsKeyDown(Keys.Right)) velocityMod = Player.RUNACCELERATION;
  132.                 }
  133.                 else //Normal speed
  134.                 {
  135.                     if (newState.IsKeyDown(Keys.Left)) velocityMod = -Player.ACCELERATION;
  136.                     if (newState.IsKeyDown(Keys.Right)) velocityMod = Player.ACCELERATION;
  137.                 }
  138.  
  139.                 if (Main.player.velocityX < Player.MINACCEL && Main.player.velocityX > -Player.MINACCEL && velocityMod > 0) //Quick start up - right
  140.                 {
  141.                     Main.player.velocityX = Player.MINACCEL;
  142.                 }
  143.                 else if (Main.player.velocityX > -Player.MINACCEL && Main.player.velocityX < Player.MINACCEL && velocityMod < 0) //Quick start up - left
  144.                 {
  145.                     Main.player.velocityX = -Player.MINACCEL;
  146.                 }
  147.                 else //Normal acceleration
  148.                 {
  149.                     Main.player.velocityX += velocityMod * (float)gameTime.ElapsedGameTime.TotalSeconds;
  150.                 }
  151.  
  152.                 //Decelerate if not pushing direction or pushing opposite direction
  153.                 if (velocityMod == 0 || (velocityMod < 0 && Main.player.velocityX > 0) || (velocityMod > 0 && Main.player.velocityX < 0))
  154.                 {
  155.                     Main.player.velocityX = Main.player.velocityX / (1 + (Player.DECELERATION * (float)gameTime.ElapsedGameTime.TotalSeconds));
  156.                 }
  157.  
  158.                 //Stop the player if below min speed
  159.                 if ((Main.player.velocityX < Player.MINSPEED && Main.player.velocityX > 0) || (Main.player.velocityX > -Player.MINSPEED && Main.player.velocityX < 0))
  160.                 {
  161.                     Main.player.velocityX = 0;
  162.                 }
  163.  
  164.                 //Fix speed if over limit
  165.                 float maxSpeed = Player.MAXSPEED;
  166.                 if (newState.IsKeyDown(Keys.RightShift) || newState.IsKeyDown(Keys.LeftShift)) maxSpeed = Player.RUNMAXSPEED;
  167.                 if (Main.player.velocityX > maxSpeed) Main.player.velocityX = maxSpeed;
  168.                 if (Main.player.velocityX < -maxSpeed) Main.player.velocityX = -maxSpeed;
  169.  
  170.                 //----------------------------Jump-----------------
  171.                 if (KeyPressed(Keys.Space) || KeyPressed(Keys.Z) || KeyPressed(Keys.Up))
  172.                 {
  173.                     if (Main.player.canjump)
  174.                     {
  175.                         Main.player.Jump();
  176.                         Main.player.isJumping = true;
  177.                         Main.player.canjump = false;
  178.                     }
  179.                 }
  180. [...]
  181.             }
  182. [...]
  183.         }
  184. [...]
  185.     }
Advertisement
Add Comment
Please, Sign In to add comment