示例#1
0
文件: Player.cs 项目: avilin/Booster
 public override void Draw(SpriteBatch spriteBatch)
 {
     if (Active)
     {
         SpriteEffects flip = CurrentEntityStates.Contains(EntityStates.Left) ? SpriteEffects.FlipHorizontally : SpriteEffects.None;
         Animations[currentAnimation].Draw(spriteBatch, flip);
     }
 }
示例#2
0
文件: Player.cs 项目: avilin/Booster
        private Vector2 GetNextPosition(GameTime gameTime)
        {
            if (CurrentEntityStates.Contains(EntityStates.Boost))
            {
                Speed *= Vector2.UnitX;
            }
            Vector2 nextPosition = Position + Speed * (float)gameTime.ElapsedGameTime.TotalMilliseconds;

            return(nextPosition);
        }
示例#3
0
文件: Player.cs 项目: avilin/Booster
 public void LoseLife(int damage)
 {
     if (CurrentEntityStates.Contains(EntityStates.Hit))
     {
         return;
     }
     CurrentEntityStates.Add(EntityStates.Hit);
     HitSound.Play();
     Health -= damage;
     if (Health <= 0)
     {
         CurrentEntityStates.Add(EntityStates.Dead);
         CurrentEntityStates.Remove(EntityStates.Hit);
         Health = 0;
     }
 }
示例#4
0
文件: Player.cs 项目: avilin/Booster
 private void ChangeAnimation()
 {
     if (!CurrentEntityStates.Contains(EntityStates.Move))
     {
         currentAnimation = "default";
     }
     if (CurrentEntityStates.Contains(EntityStates.Move))
     {
         currentAnimation = Animations.ContainsKey("move") ? "move" : currentAnimation;
     }
     if (CurrentEntityStates.Contains(EntityStates.OnAir) || CurrentEntityStates.Contains(EntityStates.Boost))
     {
         currentAnimation = Animations.ContainsKey("onAir") ? "onAir" : currentAnimation;
     }
     if (CurrentEntityStates.Contains(EntityStates.Hit))
     {
         currentAnimation = Animations.ContainsKey("hurt") ? "hurt" : currentAnimation;
     }
     if (CurrentEntityStates.Contains(EntityStates.Dead))
     {
         currentAnimation = Animations.ContainsKey("dead") ? "dead" : currentAnimation;
     }
 }
示例#5
0
文件: Player.cs 项目: avilin/Booster
        public void ApplyAcceleration(GameTime gameTime, Vector2 acceleration)
        {
            if (CurrentEntityStates.Contains(EntityStates.Boost))
            {
                Speed += Vector2.UnitX * acceleration / 300 * (float)gameTime.ElapsedGameTime.TotalMilliseconds;
            }
            else
            {
                Speed += Vector2.UnitX * acceleration / 400 * (float)gameTime.ElapsedGameTime.TotalMilliseconds;
            }

            if (acceleration.Y != 0 && !CurrentEntityStates.Contains(EntityStates.OnAir))
            {
                Speed = Speed * Vector2.UnitX - Vector2.UnitY * 0.65f;
                CurrentEntityStates.Add(EntityStates.OnAir);
                JumpSound.Play();
            }
            if (!CurrentEntityStates.Contains(EntityStates.Boost))
            {
                ApplyGravity(gameTime);
            }
            ApplyFriction(gameTime);
        }
示例#6
0
文件: Player.cs 项目: avilin/Booster
 public void Update(GameTime gameTime)
 {
     if (CurrentEntityStates.Contains(EntityStates.Dead))
     {
         bool dead = StatesTime[EntityStates.Dead].Update(gameTime);
         if (dead)
         {
             Active = false;
         }
     }
     if (CurrentEntityStates.Contains(EntityStates.Hit))
     {
         bool hit = StatesTime[EntityStates.Hit].Update(gameTime);
         if (hit)
         {
             CurrentEntityStates.Remove(EntityStates.Hit);
         }
     }
     if (CurrentEntityStates.Contains(EntityStates.Recharge))
     {
         bool recharge = StatesTime[EntityStates.Recharge].Update(gameTime);
         if (recharge)
         {
             CurrentEntityStates.Remove(EntityStates.Recharge);
         }
     }
     if (CurrentEntityStates.Contains(EntityStates.Boost))
     {
         bool boost = StatesTime[EntityStates.Boost].Update(gameTime);
         if (boost)
         {
             CurrentEntityStates.Remove(EntityStates.Boost);
             CurrentEntityStates.Add(EntityStates.Recharge);
         }
     }
 }