You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

189 lines
5.9 KiB
C#

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