/// <summary> /// Animates each enemy and allow them to kill the player. /// </summary> public void PlayerAndEnemy(LevelPlayer player, Character enemy, GameTime gameTime) { if (player.oneFrame.Intersects(enemy.BoundingRectangle)) { //Enemy will stop walking, if their bounding box intersect with player and they are not doing some speical animation if (enemy.SpecialAnimationDone || enemy == Statics.Level.Boss) { if (enemy.MoveState != Enums.MoveState.Fall && enemy.MoveState != Enums.MoveState.FireFall && enemy.MoveState != Enums.MoveState.FireReaction) { enemy.movement = 0; } } // Resolve the collision along the X axis between player and enemy, player is not allow to go through the enemy. Vector2 depth = RectangleExtensions.GetIntersectionDepth(player.BoundingRectangle, enemy.BoundingRectangle); player.Position = new Vector2(player.Position.X + depth.X, player.Position.Y); if (player.MoveState == Enums.MoveState.SpecialCombo) { if (enemy == Statics.Level.Boss) { enemy.MoveState = Enums.MoveState.Fall; } else { enemy.MoveState = Enums.MoveState.FireFall; } enemy.SpecialAnimationDone = false; if (!player.AttackOnce) { enemy.Health -= player.AttackStrength; player.Health -= 3; player.AttackOnce = true; } player.movement = 0; } if (PerPixel.Collision(player.oneFrame, player.ColorData, enemy.oneFrame, enemy.ColorData)) { //Placing this test outside of the Intersects test ensures the player will be capable of damage from every enemy punch //This resolves the problem of only once damage per time the player entered the bounding Rectangle of the enemy. if (!player.AttackOnce && enemy.MoveState != Enums.MoveState.FinalCombo2 && (player.ComboCount > 0 || player.Health <= 0.2 * player.fullHealth)) { switch (player.MoveState) { case Enums.MoveState.Punch: enemy.MoveState = Enums.MoveState.Reaction; enemy.Health -= player.AttackStrength; enemy.hurtCount++; player.CountActions += 6; player.punchHurtCount++; break; case Enums.MoveState.PunchUp: enemy.MoveState = Enums.MoveState.Fall; enemy.Health -= player.AttackStrength; enemy.hurtCount += 2; player.CountActions += 6; break; case Enums.MoveState.Kick: enemy.MoveState = Enums.MoveState.Reaction; enemy.Health -= player.AttackStrength; enemy.hurtCount++; player.kickHurtCount++; player.CountActions += 10; break; case Enums.MoveState.ComboKick: enemy.MoveState = Enums.MoveState.Fall; enemy.Health -= 2 * player.AttackStrength; enemy.hurtCount += 2; player.CountActions += 20; break; case Enums.MoveState.FirePunch1: enemy.MoveState = Enums.MoveState.FireReaction; enemy.Health -= 2 * player.AttackStrength; player.CountActions += 15; break; case Enums.MoveState.FirePunch2: enemy.MoveState = Enums.MoveState.FireReaction; enemy.Health -= 2 * player.AttackStrength; player.CountActions += 15; break; case Enums.MoveState.FirePunch3: enemy.MoveState = Enums.MoveState.FireFall; enemy.Health -= 2 * player.AttackStrength; player.CountActions += 15; break; case Enums.MoveState.FinalCombo2: enemy.MoveState = Enums.MoveState.FireFall; enemy.Health -= 4 * player.AttackStrength; player.ComboCount--; break; } enemy.hurtSound.Play(); player.AttackOnce = true; enemy.SpecialAnimationDone = false; HitTime = gameTime.TotalRealTime; } if (!enemy.AttackOnce && player.SpecialAnimationDone) { if (enemy == Statics.Level.Boss) { switch (enemy.MoveState) { case Enums.MoveState.Punch: player.MoveState = Enums.MoveState.Fall; player.Health -= enemy.AttackStrength; enemy.hitCount++; break; case Enums.MoveState.FinalCombo2: player.MoveState = Enums.MoveState.Fall; player.Health -= 2 * enemy.AttackStrength; break; } } else { switch (enemy.MoveState) { case Enums.MoveState.FinalCombo1: player.MoveState = Enums.MoveState.Reaction; player.Health -= enemy.AttackStrength; enemy.hitCount++; break; case Enums.MoveState.FinalCombo2: player.MoveState = Enums.MoveState.Fall; player.Health -= 2 * enemy.AttackStrength; break; } } player.SpecialAnimationDone = false; enemy.hurtSound.Play(); enemy.AttackOnce = true; } } } //If no intersection between player rectangle and enemy rectangle frame //Add enemy movement towards player here... else { if (enemy.SpecialAnimationDone) { if (enemy == Statics.Level.Boss) { enemy.movement = 200; } else { enemy.movement = 65f; } enemy.MoveState = Enums.MoveState.Walk; } } }
/// <summary> /// Updates the player's move based on input. /// </summary> public void UpdatePlayerMove(GameTime gameTime, LevelPlayer player) { if (player.Health > 0) { ApplyPhysics(gameTime, player); switch (player.MoveState) { case Enums.MoveState.Run: if (Math.Abs(player.Velocity.X) - 0.02f > 0 && player.IsOnGround) { player.sprite.PlayAnimation(player.runAnimation); } break; case Enums.MoveState.Punch: player.movement = 0; player.sprite.PlayAnimation(player.punchAnimation); if (!soundPlayed) { player.HitSound.Play(); soundPlayed = true; } break; case Enums.MoveState.PunchUp: player.sprite.PlayAnimation(player.punchUpAnimation); player.movement = 0.1f; if (!soundPlayed) { player.HitSound.Play(); soundPlayed = true; } break; case Enums.MoveState.Kick: player.sprite.PlayAnimation(player.kickAnimation); player.movement = 0; if (!soundPlayed) { player.HitSound.Play(); soundPlayed = true; } break; case Enums.MoveState.ComboKick: player.sprite.PlayAnimation(player.comboKickAnimation); player.movement = 0.1f; if (!soundPlayed) { player.HitSound.Play(); soundPlayed = true; } break; case Enums.MoveState.FirePunch1: player.sprite.PlayAnimation(player.firePunch1Animation); player.movement = 0.1f; player.firePunchCount = 1; if (!soundPlayed) { player.firePunchSound.Play(); soundPlayed = true; } break; case Enums.MoveState.FirePunch2: player.sprite.PlayAnimation(player.firePunch2Animation); player.movement = 0.2f; player.firePunchCount = 2; if (!soundPlayed) { player.firePunchSound.Play(); soundPlayed = true; } break; case Enums.MoveState.FirePunch3: player.sprite.PlayAnimation(player.firePunch3Animation); player.movement = 0.2f; player.firePunchCount = 0; player.chainMoves.Clear(); if (!soundPlayed) { player.firePunchSound.Play(); soundPlayed = true; } break; case Enums.MoveState.SpecialCombo: player.sprite.PlayAnimation(player.specialAnimation); if (!soundPlayed) { player.HitSound.Play(); soundPlayed = true; } break; case Enums.MoveState.FinalCombo2: if (player.ComboCount > 0 || player.Health <= 0.2 * player.fullHealth) { player.sprite.PlayAnimation(player.finalCombo2Animation); player.movement = 0.2f; if (!soundPlayed) { player.finalComboSound.Play(); soundPlayed = true; } } break; case Enums.MoveState.Reaction: player.sprite.PlayAnimation(player.reactionAnimation); player.movement = -0.1f; break; case Enums.MoveState.Fall: player.sprite.PlayAnimation(player.fallAnimation); player.movement = -0.4f; break; case Enums.MoveState.Upgrade: player.movement = 0; player.sprite.PlayAnimation(player.upgradeAnimation); break; case Enums.MoveState.Idle: if (player.IsOnGround) { player.movement = 0; player.sprite.PlayAnimation(player.idleAnimation); } break; } // Clear input. if ((player.sprite.FrameIndex == player.sprite.animation.FrameCount - 1) && player.SpecialAnimationDone == false) { soundPlayed = false; player.SpecialAnimationDone = true; } if (player.SpecialAnimationDone) { player.movement = 0.0f; player.MoveState = Enums.MoveState.Idle; if (player.punchHurtCount == 2 || player.kickHurtCount == 2) { if (player.punchHurtCount == 2) { player.MoveState = Enums.MoveState.PunchUp; player.punchHurtCount = 0; } if (player.kickHurtCount == 2) { player.MoveState = Enums.MoveState.ComboKick; player.kickHurtCount = 0; } player.movement = 10f; player.SpecialAnimationDone = false; player.AttackOnce = false; } } player.isJumping = false; } }
/// <summary> /// Called when this gem has been collected by a player and removed from the level. /// </summary> /// <param name="collectedBy"> /// The player who collected this gem. Although currently not used, this parameter would be /// useful for creating special powerup gems. For example, a gem could make the player invincible. /// </param> public void OnCollected(LevelPlayer collectedBy) { hitSound.Play(); }
/// <summary> /// Updates the player's move based on input. /// </summary> public void UpdatePlayerMove(GameTime gameTime, LevelPlayer player) { if (player.Health > 0) { ApplyPhysics(gameTime, player); switch (player.MoveState) { case Enums.MoveState.Run: if (Math.Abs(player.Velocity.X) - 0.02f > 0 && player.IsOnGround) player.sprite.PlayAnimation(player.runAnimation); break; case Enums.MoveState.Punch: player.movement = 0; player.sprite.PlayAnimation(player.punchAnimation); if (!soundPlayed) { player.HitSound.Play(); soundPlayed = true; } break; case Enums.MoveState.PunchUp: player.sprite.PlayAnimation(player.punchUpAnimation); player.movement = 0.1f; if (!soundPlayed) { player.HitSound.Play(); soundPlayed = true; } break; case Enums.MoveState.Kick: player.sprite.PlayAnimation(player.kickAnimation); player.movement = 0; if (!soundPlayed) { player.HitSound.Play(); soundPlayed = true; } break; case Enums.MoveState.ComboKick: player.sprite.PlayAnimation(player.comboKickAnimation); player.movement = 0.1f; if (!soundPlayed) { player.HitSound.Play(); soundPlayed = true; } break; case Enums.MoveState.FirePunch1: player.sprite.PlayAnimation(player.firePunch1Animation); player.movement = 0.1f; player.firePunchCount = 1; if (!soundPlayed) { player.firePunchSound.Play(); soundPlayed = true; } break; case Enums.MoveState.FirePunch2: player.sprite.PlayAnimation(player.firePunch2Animation); player.movement = 0.2f; player.firePunchCount = 2; if (!soundPlayed) { player.firePunchSound.Play(); soundPlayed = true; } break; case Enums.MoveState.FirePunch3: player.sprite.PlayAnimation(player.firePunch3Animation); player.movement = 0.2f; player.firePunchCount = 0; player.chainMoves.Clear(); if (!soundPlayed) { player.firePunchSound.Play(); soundPlayed = true; } break; case Enums.MoveState.SpecialCombo: player.sprite.PlayAnimation(player.specialAnimation); if (!soundPlayed) { player.HitSound.Play(); soundPlayed = true; } break; case Enums.MoveState.FinalCombo2: if (player.ComboCount > 0 || player.Health <= 0.2 * player.fullHealth) { player.sprite.PlayAnimation(player.finalCombo2Animation); player.movement = 0.2f; if (!soundPlayed) { player.finalComboSound.Play(); soundPlayed = true; } } break; case Enums.MoveState.Reaction: player.sprite.PlayAnimation(player.reactionAnimation); player.movement = -0.1f; break; case Enums.MoveState.Fall: player.sprite.PlayAnimation(player.fallAnimation); player.movement = -0.4f ; break; case Enums.MoveState.Upgrade: player.movement = 0; player.sprite.PlayAnimation(player.upgradeAnimation); break; case Enums.MoveState.Idle: if (player.IsOnGround) { player.movement = 0; player.sprite.PlayAnimation(player.idleAnimation); } break; } // Clear input. if ((player.sprite.FrameIndex == player.sprite.animation.FrameCount - 1) && player.SpecialAnimationDone == false) { soundPlayed = false; player.SpecialAnimationDone = true; } if (player.SpecialAnimationDone) { player.movement = 0.0f; player.MoveState = Enums.MoveState.Idle; if (player.punchHurtCount == 2 || player.kickHurtCount == 2) { if (player.punchHurtCount == 2) { player.MoveState = Enums.MoveState.PunchUp; player.punchHurtCount = 0; } if (player.kickHurtCount == 2) { player.MoveState = Enums.MoveState.ComboKick; player.kickHurtCount = 0; } player.movement = 10f; player.SpecialAnimationDone = false; player.AttackOnce = false; } } player.isJumping = false; } }
public FactoryIF getFactory(int level) { if (level.Equals(1)) { return(new LevelOneFactory()); } else if (level.Equals(2)) { return(new LevelTwoFactory()); } else if (level.Equals(3)) { return(new LevelThreeFactory()); } else if (level.Equals(4)) { return(new LevelFourFactory()); } else if (level.Equals(5)) { return(new LevelFiveFactory()); } else { try { LevelPlayer player = LevelPlayer.getInstance(); string dlevel = player.getFile(); String code; String line; //Pass the file path and file name to the StreamReader constructor StreamReader sr = new StreamReader(dlevel); //Read the first line of text line = sr.ReadLine(); code = line; //Continue to read until you reach end of file while (line != null) { //Read the next line line = sr.ReadLine(); code = code + "\n" + line; } //close the file sr.Close(); Microsoft.CSharp.CSharpCodeProvider provider = new Microsoft.CSharp.CSharpCodeProvider(); ICodeCompiler compiler = provider.CreateCompiler(); System.CodeDom.Compiler.CompilerParameters compilerparams = new CompilerParameters(); compilerparams.GenerateExecutable = false; compilerparams.GenerateInMemory = true; compilerparams.ReferencedAssemblies.Add("System.dll"); compilerparams.ReferencedAssemblies.Add("System.Core.dll"); compilerparams.ReferencedAssemblies.Add(typeof(Program).Assembly.Location); CompilerResults results = compiler.CompileAssemblyFromSource(compilerparams, code); Assembly compiled = null; if (results.Errors.HasErrors) { StringBuilder errors = new StringBuilder("Compiler Errors :\r\n"); foreach (CompilerError error in results.Errors) { errors.AppendFormat("Line {0},{1}\t: {2}\n", error.Line, error.Column, error.ErrorText); } throw new Exception(errors.ToString()); } else { compiled = results.CompiledAssembly; } int last = dlevel.LastIndexOf('\\'); last += 1; Type type = compiled.GetType("WordBlaster.AbstractFactory." + dlevel.Substring(last, (dlevel.Count() - last - 4))); FactoryIF dynlvl = (FactoryIF)Activator.CreateInstance(type); return(dynlvl); } catch (Exception e) { Console.WriteLine("Could not load file, starting normally..."); return(new LevelOneFactory()); //if we could not load it in just start normally } } }
public LevelPlayer(LevelPlayer original) { this.initialize(original.source); this.copyFrom(original); }