public Enemy(string name, EnemySerializable enemy) : base(name, enemy.pos) { this.health = enemy.health; this.maxHealth = this.health; this.damage = enemy.damage; this.movementSpeed = enemy.movementSpeed; this.maxMovementSpeed = enemy.maxMovementSpeed; this.increaseMovementSpeed = enemy.increaseMovementSpeed; this.shootingPos = enemy.shootingPos; this.size = enemy.size; this.shape = enemy.shape; this.pos = enemy.pos; this.direction = Utils.Directions.LEFT; this.attackSpeed = enemy.attackSpeed; this.timeToShoot = this.attackSpeed; this.maxAttackSpeed = enemy.maxAttackSpeed; this.cooldownReduction = enemy.cooldownReduction; }
static void Main() { Engine.Init(48, 32, "Console Shooter"); Console.WriteLine("Starting Console Shooter ..."); float fpsDisplayTime = 1f; Player player = new Player( name: "player", health: 100f, movementSpeed: 10f, shootSpeed: 0.4f, shootingPos: new Vector2(1, 0), size: new Vector2(3, 2), shape: new string[2] { " ■ ", "███", } ); Engine.AddGameObject(player); Console.WriteLine("Beginning enemies initialization ..."); if (Directory.Exists(Directory.GetCurrentDirectory() + @"\enemies")) { string[] fileList = Directory.GetFiles(Directory.GetCurrentDirectory() + @"\enemies"); if (fileList.Length > 0) { Console.WriteLine("Directory exist and has files in. Reading them ..."); LoadEnemies(); Console.WriteLine("Successfully read enemies from files"); } else { Console.WriteLine("Directory exist but no files in, creating default enemies and loading them"); EnemySerializable enemy = new EnemySerializable( health: 100f, damage: 8f, pos: new Vector2(Renderer.GetWindowWidth() / 2, Rand.GetRandomFloat(10, 15)), shootingPos: new Vector2(1, 1), movementSpeed: 4f, maxMovementSpeed: 8f, increaseMovementSpeed: 0.5f, initialAttackSpeed: 2.5f, maxAttackSpeed: 0.4f, cooldownReduction: 0.4f, size: new Vector2(3, 2), shape: new string[2] { "███", " V ", } ); XML.Serialize(typeof(EnemySerializable), enemy, Directory.GetCurrentDirectory() + @"\enemies\defaultEnemy1.xml"); enemy = new EnemySerializable( health: 250f, damage: 30f, pos: new Vector2(Renderer.GetWindowWidth() / 2, Rand.GetRandomFloat(0, 5)), shootingPos: new Vector2(2, 1), movementSpeed: 2f, maxMovementSpeed: 3f, increaseMovementSpeed: 0.5f, initialAttackSpeed: 1.25f, maxAttackSpeed: 0.8f, cooldownReduction: 0.25f, new Vector2(5, 3), shape: new string[3] { "█████", "█ ■ █", "█ █", } ); XML.Serialize(typeof(EnemySerializable), enemy, Directory.GetCurrentDirectory() + @"\enemies\defaultEnemy2.xml"); LoadEnemies(); } } else { Console.WriteLine("Directory doesn't exist, creating it"); Directory.CreateDirectory(Directory.GetCurrentDirectory() + @"\enemies"); } Console.WriteLine("Startup completed!"); Thread.Sleep(1500); Console.Clear(); do { Engine.MainLoop(); if (!gameOver && !win) { if (player.isDead) { gameOver = true; } } if (enemies == 0 && !win) { win = true; } if (gameOver) { Renderer.Put("Game Over", new Vector2(Renderer.GetWindowWidth() / 2 - 4, Renderer.GetWindowHeight() / 2 - 1), ConsoleColor.Red); } if (win) { Renderer.Put("You won!", new Vector2(Renderer.GetWindowWidth() / 2 - 3, Renderer.GetWindowHeight() / 2 - 2), ConsoleColor.Green); } fpsDisplayTime -= Time.DeltaTime; if (fpsDisplayTime <= 0f) { fpsDisplayTime = 0.5f; Console.Title = "FPS: " + Math.Round(Engine.fps); } } while (!Input.IsKeyPressed(Key.Escape)); }