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); }
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)); }
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); }
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")); }