Group – Mappedia

Group

Aus Mappedia
(Weitergeleitet von Einheitengruppe)
Wechseln zu: Navigation, Suche


Variablentyp: group
extends agent
Funktionen mit group als Rückgabewert
Funktionen mit group als Parameter

Group (Einheitengruppe) ist ein Variablentyp, der den Typ Handle erweitert.

In einer Einheitengruppe können beliebig viele Einheiten unsortiert gespeichert werden.

API

Folgende, auf Einheitengruppen bezogene native Funktionen sind in der common.j-Datei deklariert:

//============================================================================
// Group API
//
native CreateGroup                          takes nothing returns group
native DestroyGroup                         takes group whichGroup returns nothing
native GroupAddUnit                         takes group whichGroup, unit whichUnit returns nothing
native GroupRemoveUnit                      takes group whichGroup, unit whichUnit returns nothing
native GroupClear                           takes group whichGroup returns nothing
native GroupEnumUnitsOfType                 takes group whichGroup, string unitname, boolexpr filter returns nothing
native GroupEnumUnitsOfPlayer               takes group whichGroup, player whichPlayer, boolexpr filter returns nothing
native GroupEnumUnitsOfTypeCounted          takes group whichGroup, string unitname, boolexpr filter, integer countLimit returns nothing
native GroupEnumUnitsInRect                 takes group whichGroup, rect r, boolexpr filter returns nothing
native GroupEnumUnitsInRectCounted          takes group whichGroup, rect r, boolexpr filter, integer countLimit returns nothing
native GroupEnumUnitsInRange                takes group whichGroup, real x, real y, real radius, boolexpr filter returns nothing
native GroupEnumUnitsInRangeOfLoc           takes group whichGroup, location whichLocation, real radius, boolexpr filter returns nothing
native GroupEnumUnitsInRangeCounted         takes group whichGroup, real x, real y, real radius, boolexpr filter, integer countLimit returns nothing
native GroupEnumUnitsInRangeOfLocCounted    takes group whichGroup, location whichLocation, real radius, boolexpr filter, integer countLimit returns nothing
native GroupEnumUnitsSelected               takes group whichGroup, player whichPlayer, boolexpr filter returns nothing

native GroupImmediateOrder                  takes group whichGroup, string order returns boolean
native GroupImmediateOrderById              takes group whichGroup, integer order returns boolean
native GroupPointOrder                      takes group whichGroup, string order, real x, real y returns boolean
native GroupPointOrderLoc                   takes group whichGroup, string order, location whichLocation returns boolean
native GroupPointOrderById                  takes group whichGroup, integer order, real x, real y returns boolean
native GroupPointOrderByIdLoc               takes group whichGroup, integer order, location whichLocation returns boolean
native GroupTargetOrder                     takes group whichGroup, string order, widget targetWidget returns boolean
native GroupTargetOrderById                 takes group whichGroup, integer order, widget targetWidget returns boolean

// This will be difficult to support with potentially disjoint, cell-based regions
// as it would involve enumerating all the cells that are covered by a particularregion
// a better implementation would be a trigger that adds relevant units as they enter
// and removes them if they leave...
native ForGroup                 takes group whichGroup, code callback returns nothing
native FirstOfGroup             takes group whichGroup returns unit


Verwendung

Eine Einheitengruppe kann mit der Funktion CreateGroup erzeugt werden. Sie ist zu Beginn leer. Da es sich um einen von agent abgeleiteten Datentyp handelt, muss eine Gruppe nach ihrer Erzeugung wieder gelöscht werden, insofern kein Speicherleck entstehen soll. Dies geschieht mit Hilfe der Funktion DestroyGroup. Mit den Funktionen GroupAddUnit, GroupRemoveUnit und GroupClear kann eine Einheit zu einer Einheitengruppe hinzugefügt, aus ihr entfernt oder eine Einheitengruppe geleert werden:

local group myGroup = CreateGroup()
call GroupAddUnit(myGroup, gg_unit_n020_0012) // Einheit gehört zur Einheitengruppe
call GroupRemoveUnit(myGroup, gg_unit_n020_0012) // Einheit wird aus Einheitengruppe entfernt
call GroupClear(myGroup) // Einheitengruppe ganz leeren
call DestroyGroup(myGroup) // Einheitengruppe ganz zerstören
set myGroup = null

Mit Funktionen wie GroupEnumUnitsOfTypeCounted kann eine Einheitengruppe mit Einheiten unter bestimmten Voraussetzungen gefüllt werden. Als Filter kann dabei eine parameterlose Funktion mit dem Rückgabetyp boolean übergeben werden, innerhalb derer man ebenfalls per GetEnumUnit auf die jeweilige Einheit Zugriff hat. Liefert die Filterfunktion true zurück, so wird die Einheit zur Gruppe hinzugefügt, ansonsten nicht:

function myFilter takes nothing returns boolean
	return IsUnitType(GetEnumUnit(), UNIT_TYPE_HERO)
endfunction

function test takes group myGroup returns nothing
	call GroupEnumUnitsOfPlayer(myGroup, Player(0), Filter(function myFilter)) // nehme sämtliche Einheiten von Spieler 1 und rufe für jede davon die Funktion "myFilter" auf, liefert diese "true" zurück bzw. ist die Einheit ein Held, wird sie zur Einheitengruppe hinzugefügt
endfunction

Mit der Funktion FirstOfGroup kann immer nur auf die erste Einheit einer Einheitengruppe zugegriffen werden. Daher wird für Funktionen, die die ganze Grouppe betreffen meistens entweder eine Funktion wie ForGroup mit einer zusätzlichen Durchlaufsfunktion, innerhalb derer dann mit GetEnumUnit auf die jeweilige Einheit des Durchlaufs zugegriffen werden kann, oder eine der gruppenbezogenen Funktionen wie etwa GroupImmediateOrder, die keine zusätzliche Durchlaufsfunktion benötigt, verwendet:

function callback takes nothing returns nothing
	call ShowUnit(GetEnumUnit(), false) // verberge Einheit
endfunction

function test takes group myGroup returns nothing
	call ForGroup(myGroup, function callback) // rufe Funktion "callback" für jede Einheit in der Einheitengruppe auf

	call GroupImmediateOrder(myGroup, "stop") // gesamte Einheitengruppe hält an
endfunction

Siehe auch

Meine Werkzeuge
Namensräume
Varianten
Aktionen
Navigation
Warcraft-Mapping
Werkzeuge