[[http://www.siedler-games.de|{{:sg-link.jpg|}}]]
====== IstPunkt ======
Da mir jetzt mal wieder das Spiel abgeschmiert ist, weil ein ungültiger Punkt vorlag habe ich diese kleine Krücke geschrieben. \\
Dies ist nur für die Zeit des Maperstellens gedacht. Danach entfernen.
Mit IstPunkt(MeinPunkt)
wird der Punkt geprüft und zwar:
* Ist das überhaubt ein Table
* Gibt es die Werte X und Y
* Sind die Werte größer oder gleich Null FIXME (das ist eigentlich das selbe wie: "Liegen die Werte innerhalb der Karte")
FIXME In meinen Beiträgen versuche ich das so zu schreiben, daß es **alle** verstehen können. Versuch mal {{utilmaps:legendenleereversuchskarte.rar|hier}} hinter zu steigen. \\
Ich kann das auch anders.
* Liegen die Werte innerhalb der Karte
function IsPosition(_punkt)
assert(type(_punkt) == "table", "Der Punkt ist kein Table")
assert(not (_punkt.X == nil) ,"Punkt.X ist nicht gültig ==> nil")
assert(not (_punkt.Y == nil) ,"Punkt.Y ist nicht gültig ==> nil")
assert((_punkt.X >= 0) and (_punkt.Y >= 0), "Mindestens ein Punkt ist negativ \n X = ".._punkt.X.." \n Y = ".._punkt.Y)
local xWorld,yWorld =Logic.WorldGetSize()
assert((_punkt.X <= xWorld) and (_punkt.Y <= yWorld),"Mindestens ein Punkt liegt außerhalb der Karte \n X = ".._punkt.X.." \n Y = ".._punkt.Y)
end
**Freschheit**, wir sind Deutsche. Schreibe Deine [[utilfunctions:isposition|Beiträge]] von mir aus in chinesisch. Da fummel ich auch nicht in der Weise rum.
Robert: Das ist ein Wiki, da kann jeder so viel schreiben wie er will.
Viele programmieren nunmal lieber in Englisch und das ist ja wohl auch völlig normal. Deine komischen deutschen Konventionen sind da manchmal sogar noch schwerer zu verstehen als Englische. Die spieltinterne Funktion zur Ermittlung von Positionen ist GetPosition(). Will man jetzt den Vorschlag von Chromix umsetzen, dann würde es "IstPunkt(GetPosition("hjhfg"))" heißen. Meinst du nicht, dass das viel verwirrender ist als "IsPosition(GetPosition("jkgg"))? Deine Liebe zum Verständnis hin oder her, aber manchmal gehst du einfach zu weit.
\\ Gegen **IsPosition** hätte ich absolut nicht auszusetzen gehabt. Das **muß** jeder verstehen und wäre erlich gesagt besser. Aber Chromix, du warst das ja oben, (kein anderer kann ältere Seiten löschen) hat man einen Fehler, so muß man nicht auch noch schauen, daß man die Fehleranzeige versteht. Eigendlich bin ich ja flexibel, das war aber eine Provokation.
Außerdem ist das, was Du vorgeschlagen hast, in meinen Augen schlecht. Kann man nachher nur mit Aufwand entfernen. Da ist das von Nevermind wesendlich besser.
===== Funktion in Englisch =====
(Fast) die selbe Funktion, nur in Englisch. Wer es lieber so mag...
function IsPosition(_position)
assert(type(_position) == "table", "IsPosition: Position must be a table")
assert(type(_position.X) == "number", "IsPosition: Invalid position X: must be a number (" .. type(_position.X) .. " given)")
assert(type(_position.Y) == "number", "IsPosition: Invalid position Y: must be a number (" .. type(_position.Y) .. " given)")
local x, y = Logic.WorldGetSize()
assert(_position.X <= x and _position.X >= 0, "IsPosition: Invalid position X (" .. position.X .. "): position is outside of the map")
assert(_position.Y <= y and _position.Y >= 0, "IsPosition: Invalid position Y (" .. position.Y .. "): position is outside of the map")
return _position
end
Zum Debuggen einfach eine Wrapper Funktion um GetPosition() schreiben und die Codezeilen dann nach dem Testen wieder entfernen:
GetPositionOrig = GetPosition
function GetPosition(_name)
return IsPosition(GetPositionOrig(_name))
end