private static Attack CreateAttack(Dictionary <string, object> attackProperties) { Attack attack = null; string attackName = (string)attackProperties["attackName"]; Projectile projectile = ProjectileFactory.CreateProjectile((Dictionary <string, object>)attackProperties["projectile"]); MovementPattern movement = MovementPatternFactory.CreateMovementPattern((Dictionary <string, object>)attackProperties["movementPattern"]); Timer cooldownToAttack = EntityGroupBuilder.CreateTimer((float)attackProperties["cooldownToAttack"]); cooldownToAttack.Stop(); cooldownToAttack.AutoReset = true; Timer cooldownToCreateProjectile = EntityGroupBuilder.CreateTimer((float)attackProperties["cooldownToCreateProjectile"]); cooldownToCreateProjectile.Stop(); cooldownToCreateProjectile.AutoReset = true; switch (attackName) { case "basicLinear": attack = new BasicLinear(projectile, movement, cooldownToAttack, cooldownToCreateProjectile); break; case "circularHoming": attack = new CircularHoming(projectile, (Circular)movement, cooldownToAttack, cooldownToCreateProjectile); break; case "circularTriHoming": attack = new CircularTriHoming(projectile, (Circular)movement, cooldownToAttack, cooldownToCreateProjectile); break; case "circle": int numberOfProjectiles = Convert.ToInt32((float)attackProperties["numberOfProjectiles"]); float degreesToStart = (float)attackProperties["degreesToStart"]; float degreesToEnd = (float)attackProperties["degreesToEnd"]; attack = new Circle(projectile, movement, cooldownToAttack, cooldownToCreateProjectile, numberOfProjectiles, degreesToStart, degreesToEnd); break; case "arrow": int widthOfArrow = Convert.ToInt32((float)attackProperties["widthOfArrow"]); attack = new Arrow(projectile, movement, cooldownToAttack, cooldownToCreateProjectile, widthOfArrow); break; default: throw new Exception("Invalid Entity"); } return(attack); }
public static PowerUp CreatePowerUp(Dictionary <string, object> powerUpProperties) { string textureName = (string)powerUpProperties["textureName"]; Texture2D texture = TextureFactory.GetTexture(textureName); string colorName = (string)powerUpProperties["color"]; Color color = System.Drawing.Color.FromName(colorName).ToXNA(); MovementPattern movement = MovementPatternFactory.CreateMovementPattern((Dictionary <string, object>)powerUpProperties["movementPattern"]); float dropPercent = (float)powerUpProperties["dropPercent"]; PowerUp powerUp = powerUpProperties["powerUpType"] switch { "damageUp" => new DamageUp(texture, color, movement, dropPercent), "extraLife" => new ExtraLife(texture, color, movement, dropPercent), _ => throw new Exception("Invalid PowerUp Type"), }; return(powerUp); }
public static Projectile CreateProjectile(Dictionary <string, object> projectileProperties) { Projectile projectile = null; string textureName = (string)projectileProperties["textureName"]; Texture2D texture = TextureFactory.GetTexture(textureName); string colorName = (string)projectileProperties["color"]; Color color = System.Drawing.Color.FromName(colorName).ToXNA(); MovementPattern movement = MovementPatternFactory.CreateMovementPattern((Dictionary <string, object>)projectileProperties["movementPattern"]); int damage = Convert.ToInt32((float)projectileProperties["damage"]); switch (projectileProperties["projectileType"]) { case "bullet": projectile = new Bullet(texture, color, movement, damage); break; case "bouncingBullet": projectile = new BouncingBullet(texture, color, movement, damage); break; case "bounceBullet": int numberOfTimesToBounce = (int)projectileProperties["bounceTimes"]; projectile = new BounceBullet(texture, color, movement, damage, numberOfTimesToBounce); break; case "pushBullet": projectile = new PushBullet(texture, color, movement, damage); break; default: throw new Exception("Invalid Projectile Type"); } return(projectile); }
public static Entity CreateEntity(Dictionary <string, object> entityProperties) { Entity entity = null; string textureName = (string)entityProperties["textureName"]; Texture2D texture = TextureFactory.GetTexture(textureName); string colorName = (string)entityProperties["color"]; Color color = System.Drawing.Color.FromName(colorName).ToXNA(); Dictionary <string, object> movementPatternProperties = null; MovementPattern movement = null; if (entityProperties.ContainsKey("movementPattern")) { movementPatternProperties = (Dictionary <string, object>)entityProperties["movementPattern"]; movement = MovementPatternFactory.CreateMovementPattern(movementPatternProperties); } string enemyType = (string)entityProperties["entityType"]; string entityClassification = (string)entityProperties["entityType"] != "player" ? "enemy" : "player"; int hp = Convert.ToInt32((float)entityProperties["hp"]); List <Attack> attacks = null; if (entityProperties["attacks"] is List <object> ) { attacks = AttackFactory.CreateAttacks((List <object>)entityProperties["attacks"]); } else if (entityProperties["attacks"] is Dictionary <string, object> ) { attacks = AttackFactory.CreateAttacks((Dictionary <string, object>)entityProperties["attacks"]); } switch (entityClassification) { case "player": entity = new Player(texture, color, movement, hp, attacks); entity.SpawnPosition = new Vector2((float)movementPatternProperties["spawnXPosition"], (float)movementPatternProperties["spawnYPosition"]); break; case "enemy": PowerUp powerUp = PowerUpFactory.CreatePowerUp((Dictionary <string, object>)entityProperties["powerUp"]); switch (enemyType) { case "simpleGrunt": entity = new SimpleGrunt(texture, color, movement, powerUp, hp, attacks); break; case "complexGrunt": entity = new ComplexGrunt(texture, color, movement, powerUp, hp, attacks); break; case "midBoss": entity = new MidBoss(texture, color, movement, powerUp, hp, attacks); break; case "finalBoss": List <Attack> phase2Attacks = null; if (entityProperties["phase2Attacks"] is List <Dictionary <string, object> > ) { phase2Attacks = AttackFactory.CreateAttacks((List <object>)entityProperties["phase2Attacks"]); } else if (entityProperties["phase2Attacks"] is Dictionary <string, object> ) { phase2Attacks = AttackFactory.CreateAttacks((Dictionary <string, object>)entityProperties["phase2Attacks"]); } entity = new FinalBoss(texture, color, movement, powerUp, hp, attacks, phase2Attacks); break; } break; default: throw new Exception("Invalid Entity"); } if (entity.Movement != null) { entity.Movement.Parent = entity; } return(entity); }