Пример #1
0
        private static Enemy ParseEnemyTemplate(ResourcePool res, EnemyInstanceJ instanceInfo)
        {
            EnemyTemplateJ enemyTemplate;

            if (TemplateCache.ContainsKey(instanceInfo.Path))
            {
                enemyTemplate = TemplateCache[instanceInfo.Path];
            }
            else
            {
                enemyTemplate = JsonConvert.DeserializeObject <EnemyTemplateJ>(File.ReadAllText(instanceInfo.Path));
            }
            var texture = res.GetTexture(enemyTemplate.Texture);
            var func    = GetLambda(enemyTemplate.Func);

            Enemy enemy = new Enemy(
                sprite: new Sprite(texture,
                                   X: instanceInfo.X,
                                   Y: -enemyTemplate.H,
                                   W: enemyTemplate.W,
                                   H: enemyTemplate.H,
                                   color: new Color(enemyTemplate.Color.R / 255f, enemyTemplate.Color.G / 255f, enemyTemplate.Color.B / 255f)),
                healthBarTexture: res.GetTexture("pixel"),
                health: enemyTemplate.Health,
                value: enemyTemplate.Value,
                path: new Path(enemyTemplate.Speed, instanceInfo.Angle, func),
                delay: instanceInfo.Delay
                );

            return(enemy);
        }
Пример #2
0
        public static Level ParseLevel(string path, ResourcePool res)
        {
            var levelTemplate = JsonConvert.DeserializeObject <LevelJ>(File.ReadAllText(path));

            float translateX = 1 / (100f / Globals.SCREEN_WIDTH);
            float translateY = 1 / (100f / Globals.SCREEN_HEIGHT);

            // Add all enemies to the list
            var enemies = new List <Enemy>();

            if (levelTemplate.Enemies != null)
            {
                levelTemplate.Enemies.ForEach(enemyT => {
                    var func = GetLambda(enemyT.Path.Func);
                    enemies.Add(new Enemy(
                                    sprite: new Sprite(res.GetTexture(enemyT.Texture),
                                                       X: enemyT.Rectangle.X * translateX - enemyT.Rectangle.X / 2,
                                                       Y: enemyT.Rectangle.Y * translateY - enemyT.Rectangle.Y / 2,
                                                       W: enemyT.Rectangle.W,
                                                       H: enemyT.Rectangle.H,
                                                       color: new Color(enemyT.Color.R / 255f, enemyT.Color.G / 255f, enemyT.Color.B / 255f)),
                                    healthBarTexture: res.GetTexture("pixel"),
                                    health: enemyT.Health,
                                    value: enemyT.Value,
                                    path: new Path(enemyT.Path.Speed, enemyT.Path.Angle, func),
                                    delay: enemyT.Delay));
                });
            }

            if (levelTemplate.Templates != null)
            {
                levelTemplate.Templates.ForEach(enemyT => {
                    var tmp = ParseEnemyTemplate(res, enemyT);
                    tmp.X  *= translateX;
                    enemies.Add(tmp);
                });
            }

            // create player
            var player = new Player(
                res,
                levelTemplate.Player.Rectangle.X * translateX - levelTemplate.Player.Rectangle.W / 2,
                levelTemplate.Player.Rectangle.Y * translateY - levelTemplate.Player.Rectangle.H / 2,
                levelTemplate.Player.Rectangle.W,
                levelTemplate.Player.Rectangle.H,
                new Color(levelTemplate.Player.Color.R / 255f, levelTemplate.Player.Color.G / 255f, levelTemplate.Player.Color.B / 255f)
                );

            return(new Level(enemies, player, res.GetFont(levelTemplate.UiFont), res));
        }
Пример #3
0
        public Player(ResourcePool res, float X, float Y, float W, float H, Color color, int health = 1)
        {
            sprite = new SpriteSheet(res.GetTexture("VoidShipSpriteSheet"), X, Y, W, H, color);
            sprite.AutoTile(512, 512);
            move            = new Vector2();
            direction       = Direction.Center;
            this.health     = health;
            this.shootSound = res.GetSound("Shoot");
            gun             = new Gun(
                ammo: 14, fireRate: 0.35f, reloadTime: 2f,
                template: new Bullet(
                    new Sprite(res.GetTexture("BulletSpriteSheet"), sprite.X + sprite.Width / 2 - 10, sprite.Y, 20, 34, new Rectangle(466, 254, 10, 17), Color.White),
                    1, new Path(500, 90, x => 0)));

            ammoBar = new Bar(res.GetTexture("pixel"), 10, Globals.SCREEN_HEIGHT - 20, 100, 10, gun.MagazineSize, gun.MagazineSize, Color.Yellow);
        }
Пример #4
0
        protected void LateInit()
        {
            levelSelect = new Menu();
            res.AddView("levelSelect", levelSelect);
            mainMenu = new Menu();
            res.AddView("mainMenu", mainMenu);

            var tempPos = new Vector2(Globals.SCREEN_WIDTH / 6, 280);

            Directory.EnumerateFiles("Levels").ToList().ForEach(element =>
            {
                res.AddView(element, Parser.ParseLevel(element, res));
                levelSelect.AddInteractive(new Button(
                                               System.IO.Path.GetFileNameWithoutExtension(element),
                                               res.GetFont("Forced"),
                                               tempPos,
                                               Color.White,
                                               Color.Yellow,
                                               ViewEvent.ChangeView(res.GetView(element))));
                if (tempPos.Y < Globals.SCREEN_HEIGHT - 100)
                {
                    tempPos.Y += 100;
                }
                else
                {
                    tempPos.Y += 280; tempPos.X += Globals.SCREEN_WIDTH / 6;
                }
            });


            levelSelect.AddStatic(new Text("Select Level", res.GetFont("Earth Orbiter"), new Vector2(Globals.SCREEN_WIDTH / 2, 100), Color.Yellow, Align.Center));
            levelSelect.BackEvent = ViewEvent.ChangeView(res.GetView("mainMenu"));

            mainMenu.AddStatic(new Text(
                                   "Void Warrior",
                                   res.GetFont("Earth Orbiter"),
                                   new Vector2(Globals.SCREEN_WIDTH / 2, 100),
                                   Color.Yellow,
                                   Align.Center));
            mainMenu.AddInteractive(new Button(
                                        "Start",
                                        res.GetFont("Guardians"),
                                        new Vector2(Globals.SCREEN_WIDTH / 2, 400),
                                        Color.White, Color.Yellow,
                                        ViewEvent.ChangeView(levelSelect),
                                        Align.Center));
            mainMenu.AddInteractive(new Button(
                                        "Quit",
                                        res.GetFont("Guardians"),
                                        new Vector2(Globals.SCREEN_WIDTH / 2, 500),
                                        Color.White, Color.Yellow,
                                        ViewEvent.Back,
                                        Align.Center));

            currentView = mainMenu;



            //controllerStatus = new Text(Input.GamepadConnected.ToString(), res.GetFont("Guardians"), 0, 0, Color.White);
            parallax = new Parallax(res.GetTexture("BackgroundBack"), res.GetTexture("BackgroundFront"));
        }