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