using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using Otter; namespace _1869_Remake.ToolKlassen { public class TextBox : Entity { // Textbox liefert Text eingabe // Anzeigetext. public Text Text = new Text("", Assets.FONT_AMIGA4EVER2, 10); // Hat die Textbox den Fokus der Applikation? public bool HasFocus; // Die Breite und Höhe des Rechtecks wird als Referenz für den Text genommen public int entetyWidth = 0; public int entetyHeight = 0; // Maximale Characteranzahl public int CharacterLimit; // Text der in den Anzeigetext geschoben wird public string InputString = ""; public TextBox(float x, float y, int width, int height, int limit, bool FadeIn) : base(x, y) { this.entetyWidth = width; this.entetyHeight = height; CharacterLimit = limit; // Schriftfarbe Rot wie auf dem Titelbildschirm (eventuell zu Grau wie im Original) Text.Color = new Otter.Color("a01010"); //Schriftposition im Hintergrund (Y Offset damit nicht press am oberen Rand) Text.Y = Text.Y + 2; if (FadeIn) { Text.Alpha = 0f; Tween(Text, new { Alpha = 1f }, 90f, 0f).Ease(Ease.BackInOut); } // Hinzufügen der Grafiken zur Entity (damit Dargestellt wird muss Entität zur Szene hinzugefügt werden). AddGraphic(this.Text); } public override void Render() { base.Render(); //Draw.Rectangle(this.X, this.Y, entetyWidth, entetyHeight, null, Color.Red, 2f); } public override void Update() { base.Update(); Text.X = (entetyWidth / 2) - (5 * InputString.Length); if (Text.String.IsNotEmpty()) Text.String = Text.String.ToUpper(); if (InputString.IsNotEmpty()) InputString = InputString.ToUpper(); // Wenn die Textbox Fokus hat: Eingabetext wird um gedrückte Taste ergänzt (Keystring würde endloswachsen wenn nicht gecleared!) if (HasFocus) { InputString = InputString + Input.KeyString; if (InputString.IsNotEmpty()) InputString = InputString.ToUpper(); Input.ClearKeystring(); // Wenn Zeichenlimit erreicht => kein weiteres hinzufügen if (InputString.Length > CharacterLimit) { //nur die Zeichen unter dem Limit bleiben InputString = InputString.Substring(0, CharacterLimit); // Tastenlog wird um alle Zeichen nach dem Limit erweitert if (InputString.IsNotEmpty()) InputString = InputString.ToUpper(); Input.KeyString = InputString; } // wenn Zeichenlimit nicht erreicht ist => Anzeige des Cursors if (InputString.Length < CharacterLimit) { //Hinzufügen des Cursors wie im Original Text.String = InputString + "-"; Text.String = Text.String.ToUpper(); } else { // Wenn das Limit genau erreicht ist dann nur den Text anzeigen ohne Cursor Text.String = InputString; if (Text.String.IsNotEmpty()) Text.String = Text.String.ToUpper(); } // Wenn der Fokus da ist, wird bei Backspace gelöscht if (Input.KeyPressed(Key.Back) && InputString.Length > 0) { InputString = InputString.Substring(0, InputString.Length - 1); if (InputString.IsNotEmpty()) InputString = InputString.ToUpper(); Input.ClearKeystring(); } } else { // Wenn Textbox keinen Fokus hat dann nur den Eingabetext anzeigen Text.String = InputString; if (Text.String.IsNotEmpty()) Text.String = Text.String.ToUpper(); } // bei Linker Maustaste => check ob auf oder nicht auf Textbox geklickt wurde if (Input.MouseButtonPressed(MouseButton.Left)) { if (Util.InRect(Scene.MouseX, Scene.MouseY, X, Y, entetyWidth, entetyHeight)) { if (!HasFocus) { // Wenn geklickt wurde und kein Fokus dann Fokus setzen Focus(); } } else { if (HasFocus) { // Wenn nicht geklickt und Fokus vorhanden dann Fokus wegnehmen Unfocus(); } } } } public String getInput() { Unfocus(); return InputString; } public void Focus() { // Fokus wird aktiviert HasFocus = true; Input.ClearKeystring(); } public void Unfocus() { //Fokus wird deaktiviert. HasFocus = false; // string wird getrimmt (falls escape charactere wie\n beim Button druck mit gelesen wurden) InputString = InputString.Trim(); if (InputString.IsNotEmpty()) InputString = InputString.ToUpper(); } } }