private void enterInGameScene() { State = GameState.InGame; IsFinished = false; IsPaused = false; m_InputName = new StringBuilder(""); // frame UI m_PlayGroundNode = UINode.Engine.Instance.CreateNode(new RectInt(Vector2Int.Zero, c_GameWindowSize + Vector2Int.One), null, "Playground-Node"); var playgroundCanvas = m_PlayGroundNode.AddUIComponent <SingleColorCanvas>(); playgroundCanvas.CanvasPixelColor = new PixelColor(ConsoleColor.Black, ConsoleColor.White); var playgroundLayoutNode = UINode.Engine.Instance.CreateNode(new RectInt(Vector2Int.Zero, c_GameWindowSize + Vector2Int.One), m_PlayGroundNode, "PlaygroundLayout-Node"); var layoutBitmap = playgroundLayoutNode.AddUIComponent <Bitmap>(); layoutBitmap.LoadFromFile("./Assets/Layout.txt", Bitmap.DrawType.Sliced); // game world World = new World2D((Mode == GameMode.SinglePlayer)? 1 : 2, new RectInt(Vector2Int.One, c_GameWindowSize)); // register player dead event AliveCounter = new HashSet <int>(); foreach (var character in World.Characters) { int id = character.Id; AliveCounter.Add(id); character.OnDie += () => handleOnPlayerDie(id); } // game UI RectInt gameUISize = new RectInt(new Vector2Int(0, c_GameWindowSize.Y + 1), new Vector2Int(c_GameWindowSize.X + 1, 5)); var uiNode = UINode.Engine.Instance.CreateNode(gameUISize, null, "Game UI"); var canvas = uiNode.AddUIComponent <SingleColorCanvas>(); canvas.CanvasPixelColor = new PixelColor(ConsoleColor.DarkGray, ConsoleColor.White); RectInt panelBounds = new RectInt(new Vector2Int(0, 0), new Vector2Int(c_GameWindowSize.X + 1, 5)); var layoutNode = UINode.Engine.Instance.CreateNode(panelBounds, uiNode, "Game UI"); var layout = layoutNode.AddUIComponent <Bitmap>(); layout.LoadFromFile("./Assets/Layout-Empty.txt", Bitmap.DrawType.Sliced); // register character hp , create hp ui m_HpTexts = new List <TextBox>(); m_HpBarTexts = new List <TextBox>(); for (int i = 0; i < World.Characters.Count; i++) { var character = World.Characters[i]; character.OnHealthChanged += (int health) => handleOnCharacterHpChanged(character.Id, health); var textNode = UINode.Engine.Instance.CreateNode(new RectInt(3, 1 + i * 2, 10, 1), uiNode, "Game UI"); var text = textNode.AddUIComponent <TextBox>(); text.text = string.Format("P{0} HP: {1, 2}/{2, 2}", i + 1, 10, Character.c_MaxHealth); text.horizontalAlignment = TextBox.HorizontalAlignment.Left; text.verticalAlignment = TextBox.VerticalAlignment.Middle; m_HpTexts.Add(text); var hpBarCanvasNode = UINode.Engine.Instance.CreateNode(new RectInt(18, 1 + i * 2, 20, 1), uiNode, "Game UI"); var hpBarCanvas = hpBarCanvasNode.AddUIComponent <SingleColorCanvas>(); hpBarCanvas.CanvasPixelColor = new PixelColor(ConsoleColor.DarkGreen, ConsoleColor.DarkGreen); var hpBarBackNode = UINode.Engine.Instance.CreateNode(new RectInt(0, 0, 20, 1), hpBarCanvasNode, "Game UI - Text"); text = hpBarBackNode.AddUIComponent <TextBox>(); text.text = new string(" "); var hpBarInsideCanvasNode = UINode.Engine.Instance.CreateNode(new RectInt(18, 1 + i * 2, 20, 1), uiNode, "Game UI - Bar"); var hpBarInsideCanvas = hpBarInsideCanvasNode.AddUIComponent <SingleColorCanvas>(); hpBarInsideCanvas.CanvasPixelColor = new PixelColor(ConsoleColor.Yellow, ConsoleColor.Yellow); var actualInsideTextNode = UINode.Engine.Instance.CreateNode(new RectInt(0, 0, 20, 1), hpBarInsideCanvasNode, "Game UI - Bar -Text"); text = actualInsideTextNode.AddUIComponent <TextBox>(); text.text = new string(" "); m_HpBarTexts.Add(text); } // add level ui var lvlUINode = UINode.Engine.Instance.CreateNode(new RectInt(39, 1, 10, 3), uiNode); m_LevelText = lvlUINode.AddUIComponent <TextBox>(); m_LevelText.text = "LEVEL\n000"; m_LevelText.horizontalAlignment = TextBox.HorizontalAlignment.Center; m_LevelText.verticalAlignment = TextBox.VerticalAlignment.Middle; World.OnTotalLevelChanged += handleOnTotalLevelChanged; // create Hint UI var hintNode = UINode.Engine.Instance.CreateNode(new RectInt(0, World.TowerTopNode.Bounds.Size.Y + 7, World.TowerTopNode.Bounds.Size.X, 1), null, "Hint-CanvasNode"); canvas = hintNode.AddUIComponent <SingleColorCanvas>(); canvas.CanvasPixelColor = new PixelColor(ConsoleColor.Black, ConsoleColor.DarkGray); var hintTextNode = UINode.Engine.Instance.CreateNode(new RectInt(0, 0, World.TowerTopNode.Bounds.Size.X, 1), hintNode, "Hint-TextBoxNode"); var hintTextBox = hintTextNode.AddUIComponent <TextBox>(); hintTextBox.text = "F1: turn on/off optimized mode in game\nF2: pause/resume game"; hintTextBox.verticalAlignment = TextBox.VerticalAlignment.Middle; hintTextBox.horizontalAlignment = TextBox.HorizontalAlignment.Center; // create GAME OVER UI var gameOverNode = UINode.Engine.Instance.CreateNode(new RectInt(0, World.TowerTopNode.Bounds.Size.Y / 2, World.TowerTopNode.Bounds.Size.X + 1, 5), null, "GO-CanvasNode"); m_GameOverCanvas = gameOverNode.AddUIComponent <SingleColorCanvas>(); m_GameOverCanvas.CanvasPixelColor = new PixelColor(ConsoleColor.DarkRed, ConsoleColor.Yellow); var goUnlitBoardNode = UINode.Engine.Instance.CreateNode(new RectInt(0, 0, World.TowerTopNode.Bounds.Size.X + 1, 5), gameOverNode, "GO-UnlitNode"); var goUnlitBox = goUnlitBoardNode.AddUIComponent <UnlitBox>(); goUnlitBox.UnlitCharacter = ' '; var goTextNode = UINode.Engine.Instance.CreateNode(new RectInt(0, 0, World.TowerTopNode.Bounds.Size.X + 1, 5), gameOverNode, "GO-TextBoxNode"); m_GameOverText = goTextNode.AddUIComponent <TextBox>(); m_GameOverText.text = "GAME OVER\n\n\npress enter to confirm"; m_GameOverText.verticalAlignment = TextBox.VerticalAlignment.Top; m_GameOverText.horizontalAlignment = TextBox.HorizontalAlignment.Center; m_InputFieldCanvasNode = UINode.Engine.Instance.CreateNode(new RectInt(0, 2, World.TowerTopNode.Bounds.Size.X + 1, 1), gameOverNode, "InputCanvasNode"); canvas = m_InputFieldCanvasNode.AddUIComponent <SingleColorCanvas>(); canvas.CanvasPixelColor = new PixelColor(ConsoleColor.Red, ConsoleColor.Yellow); var inputUnlitBoxNode = UINode.Engine.Instance.CreateNode(new RectInt(13, 0, 24, 1), m_InputFieldCanvasNode, "InputNode"); inputUnlitBoxNode.AddUIComponent <UnlitBox>().UnlitCharacter = ' '; var inputTextNode = UINode.Engine.Instance.CreateNode(new RectInt(0, 0, World.TowerTopNode.Bounds.Size.X + 1, 1), inputUnlitBoxNode, "InputNode"); m_InputText = inputTextNode.AddUIComponent <TextBox>(); m_InputText.text = "PLEASE INPUT YOUR NAME"; m_InputText.verticalAlignment = TextBox.VerticalAlignment.Middle; m_InputText.horizontalAlignment = TextBox.HorizontalAlignment.Center; gameOverNode.IsActive = false; m_InputFieldCanvasNode.IsActive = false; // Setup bg settings World.BackgroundImageNode.IsActive = !m_OptimizedMode; }