コード例 #1
0
        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);
        }
コード例 #2
0
        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);
        }
コード例 #3
0
        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);
        }
コード例 #4
0
        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);
        }