package TestUtils
// By muzzel - Version 1.4

/** Registers a chat event. */
public function chatEvent(string s, code c)
	if s.startsWith("-debug")
		commands[commandsLen] = s
		commandsLen++
	let trig = CreateTrigger()
		..addAction(c)
	for k = 15 downto 0
		trig.registerPlayerChatEvent(Player(k), s, true)

/** Registers a esc-key event. */
public function escEvent(code c)
	CreateTrigger()
		..registerPlayerEvent(Player(0), EVENT_PLAYER_END_CINEMATIC)
		..addAction(c)

/** Registers game time event. */
public function timeEvent(real time, code c)
	CreateTrigger()
		..registerTimerEvent(time, false)
		..addAction(c)
	
/** Registers a periodic event. */
public function periodicEvent(real time, code c)
	CreateTrigger()
		..registerTimerEvent(time, true)
		..addAction(c)

/** Returns a random unit selected by the specified player. */
public function selectedUnit(player p) returns unit
	group g = CreateGroup()
	SyncSelections()
	GroupEnumUnitsSelected(g, p, null)
	unit u = FirstOfGroup(g)
	g.destr()
	return u

/** Returns a random unit selected by the triggering player. */
public function selectedUnit() returns unit
	return selectedUnit(GetTriggerPlayer())

string array commands
int commandsLen = 0
trigger smartCoordsTrigger
init
	// Debug help:
	chatEvent("-debug", () -> begin
		print("Debug commands:")
		for i = 0 to commandsLen-1
			print(commands[i])
	end)
	// Smart Coordinates:
	smartCoordsTrigger = CreateTrigger()
		..registerPlayerUnitEvent(Player(0), EVENT_PLAYER_UNIT_ISSUED_POINT_ORDER, null)
		..addAction(() -> begin
			if GetIssuedOrderId() == 851971
				print("Coordinates: " + GetOrderPointX().toString() + " / " + GetOrderPointY().toString())
				TriggerSleepAction(0.01)
				IssueImmediateOrder(GetTriggerUnit(), "stop")
	end)..disable()
	chatEvent("-debug smartcoords", () -> begin
		if IsTriggerEnabled(smartCoordsTrigger)
			smartCoordsTrigger.disable()
			print("Testutils: Smartcoords disabled")
		else
			smartCoordsTrigger.enable()
			print("Testutils: Smartcoords enabled")
	end)
	// Clear:
	chatEvent("-clear", () -> begin
		if GetTriggerPlayer() == GetLocalPlayer()
			ClearTextMessages()
	end)