# Maus

`

    FUNCTION MausTaste_L()
    	{
    	// Dieser Block wird abgearbeitet wenn die linke Maustaste gedrückt wird
    	}

    on_mouse_left = MausTaste_L;

`

Mit dem Funktionspointer ON_ANYKEY werden alle Tasten der Tastatur, Maus und des Joysticks, einer Funktion zugewiesen.

Eine weitere Möglichkeit, einer Taste eine Funktion zuzuweisen, besteht mit dem Befehl

KEY_SET (scancode, function);

Dieser Befehl weist der Taste mit dem Scancode die angegbebe Funktion zu.

Soll überprüft werden, ob z.Z. eine Taste gedrückt ist, so kann das Flag KEY_ANY hierzu abgefragt werden.
Der Scancode der zuletzt gedrückten Taste steht in der Variablen KEY_LASTPRESSED

Die Funktion KEY_PRESSED (Scancode); liefert einen Flag zurück, das je nach dem ob die Taste mit dem angegebenen Scancode gedrückt wurde, auf "on" oder "off" steht.

Sollen die Fuktionsaufrufe unterbunden werden, so setzt man das Flag ENABLE_MOUSE auf "off".

## Mauszeiger

Wird der Level als Fenster gestartet, so kann das Aussehen des Mauszeigers mit der Variablen MOUSE_POINTER eigestellt werden.

MOUSE_POINTER = 0; | //kein Mauszeiger
MOUSE_POINTER = 1; | //Mauszeiger als Hand
MOUSE_POINTER = 2; | //Mauszeiger als Standard Pfeil
MOUSE_POINTER = 3; | //Mauszeiger als Fadenkreuz
MOUSE_POINTER = 4; | //Mauszeiger als Sanduhr

Wird der Level als Vollbild gestartet, so wird kein Mauszeiger angezeigt. Wenn ein Mauszeiger benötigt wird, so muss zuerst der MOUSE_MAP Pointer auf eine BMAP zeigen. Mit der MOUSE_MODE Variablen wird der Mauszeiger sichtbar gemacht. Die Variable kann auf folgende Werte gesetzt werden:

MOUSE_MODE = 0; | //kein Mauszeiger
MOUSE_MODE = 1; | //Mauszeiger sichtbar, mouse_force-Variable aktiv
MOUSE_MODE = 2; | //Mauszeiger sichtbar, mouse_force-Variable deaktivirt

Befindet sich der HotSpot nicht an der oberen linken Ecke der BMAP Grafik, so kann der HotSpot mit den Variablen MOUSE_SPOT.X und MOUSE_SPOT.Y auf die entsprechende Position gesetzt werden. ``

    bmap mauszeiger = <maus.bmp>;

    function Maus_an()
    	{
    	mouse_map = mauszeiger;
    	if (mouse_mode == 0)
    		{mouse_mode = 2;}
    	else
    		{mouse_mode = 0;}
    	while(mouse_mode == 2)
    		{
    		mouse_pos.x = pointer.x;
    		mouse_pos.y = pointer.y;
    		wait(1);
    		}
    	}

    on_mouse_right = Maus_an;

In diesem Beispiel wird bei Drücken der rechten Maustaste, die Funktion aufgerufen. Durch die IF Abfrage wird der MOUSE_MODE auf 2 gesetzt wenn er auf 0 steht. Steht er aber auf 2, so wird er auf 0 gesetzt. Die WHILE schleife wird auch nur solange abgearbeitet, wie MOUSE_MODE auf 2 steht.

## Mausbewegung

Die Mauszeigergrafik bewegt sich nicht automatisch durch eine Mausbewegung. Die Grafik muss per Programm auf die aktuellen Koordinaten gesetzt werden. Die Koordinaten der Mauszeigergrafik werden in dem Array MOUSE_POS geschreiben. Die aktuellen Bildschirmkoordinaten stehen im Array POINTER und können von dort gelesen werden.

Um wieviel Pixel sich die Maus seit dem letzten Frame bewegt hat, steht im Vector MICKEY

Horizontale_Bewegung = MICKEY.X;
Vertikale_Bewegung = MICKEY.Y;
Mausrad_Bewegung = MICKEY.Z;

Im Array MOUSE_FORCE steht die Geschwindigkeit, mit der sich die Maus gerade vertikal und horizontal bewegt.

Horizontale_Geschwindigkeit = MOUSE_FORCE.X;
Vertikale_Geschwindigkeit = MOUSE_FORCE.Y;

Das Flag MOUSE_MOVING gibt an ob sich die Maus in dem letzten Zeitinterval von MOUSE_TIME bewegt hat.

In die Variable MOUSE_TIME legt man die Zeit in Ticks fest.

In die Variable MOUSE_CALM legt man die Maximale Bewegung in Pixel fest, bevor das Flag MOUSE_MOVING gesetzt wird.

## Mausauswahl

Mit dem Mauszeiger können Objekte (Entity) ausgewählt werden oder bei diesen einen Event auslösen. Hierzu ist es notwendig, eine Reichweite des Mauszeigers anzugeben. Dies geschieht über die Variable MOUSE_RANGE.

Der Pointer MOUSE_ENT zeigt auf das Objekt, welches gerade vom Mauszeiger berührt wird.