Radius im Mapeditor einblenden
» Siedler Map Source Forum » Mapping » Radius im Mapeditor einblenden
Seiten: 1
BalistiK
|
#1 13.11.2017 11:11 Beiträge: 70 |
Radius im Mapeditor einblenden
Hallo, erneut eine Frage bezüglich des Editors.
Gibt es eine Funktion, oder irgendeinen Trick, womit ich einen Radius in "Siedlerzentimetern" einblenden kann? Zum Beispiel will ich eine neue KI erstellen, dessen Ursprungspunkt (KI-Mitte) ein Scriptentity mit dem namen "AI2_Pos" ist. Nun gebe ich per MapEditor_SetupAI einen Aktionsradius von 4000 für die KI. Ich weiß jedoch nicht wie groß dieser Radius jetzt tatsächlich ist, von wo bis wo er sich erstreckt und kann ihn auch nicht sehen. Gibt es da irgdenwo einen Trick oder eine Möglichkeit sowas einzublenden? Oder soetwas ähnliches zu erreichen? Damit ich den Radius schon im Mapeditor einsehen kann? Ausprobieren per explore kann unter Umständen viel zu lange für sowas dauern...
Auf eine Antwort freue ich mich sehr.
MFG,
BalistiK
mcb
|
#2 13.11.2017 16:08 Beiträge: 1472 |
Am einfachsten wäre es wohl, die komplette Map aufzudecken und per Debugger Entitys genau auf dem Radius zu platzieren, so kannst du die entsprechenden Gebiete leicht erkennen.
--- FuncInCirclePos mcb v1.1 -- Neue Funktion auf Grundlage von KreisPosition von Noigi. -- Führt eine Funktion in einem Kreis um _pos aus, mit _spacing Abstand zwischen den Punkten. -- Übergeben wird ein erweitertes Positionstable mit zusätzlicher Rotation r. -- -- FuncInCirclePos(GetPosition(id), 1000, 100, function(p) -- Logic.CreateEffect(GGL_Effects.FXChopTree, p.X, p.Y, nil) -- end) function FuncInCirclePos(_pos, _range, _spacing, _func) -- Validate input if type(_pos) == "string" or type(_pos) == "number" then _pos = GetPosition(_pos); end assert( IsValidPosition(_pos), "Benoetigt Position!" ); assert( type(_range) == "number", "Benoetigt Reichweitenangabe!" ); _spacing = _spacing or 100; assert( type(_spacing) == "number", "Benoetigt Abstandsangabe!" ); assert( type(_func) == "function", "Benoetigt Funktion!" ); -- Determine angle step size local perimeter = 2 * _range * math.pi; local n = math.floor(perimeter / _spacing); local angleStep = 360/n; -- Go! local nSin; local nCos; local angle; local x,y,eID; for i = 0,(n-1) do angle = i*angleStep; nSin = math.sin((math.rad(angle))); nCos = math.cos((math.rad(angle))); x = _pos.X - nCos*_range; y = _pos.Y - nSin*_range; _func({X=x,Y=y,r=angle}); end end
berechnet dir die passenden Positionen dazu.
Verwenden kannst du es z.B. so:
function markRange(pos, range) if markRangeIds then for _, id in ipairs(markRangeIds) do DestroyEntity(id) end end markRangeIds = {} FuncInCirclePos(pos, range, 250, function(p) local id = Logic.CreateEntity(Entities.XD_CoordinateEntity, p.X, p.Y, 0, 0) table.insert(markRangeIds, id) end) end
markRange("AI2_Pos", 4000)
Peter-FS
|
#3 16.11.2017 11:15 Beiträge: 1086 |
Radius anzeigen geht einfacher
Hi,
das geht ganz einfach.
Ein Ambient Entity setzen und den entsprechen Radius eingeben, man erhällt einen weißen Kreis.
Achtung: Radius(cm)/100 eingeben -> Radius in m
____________________
Man muss nicht alles wissen, man muss nur wissen wo es steht!
BalistiK
|
#4 16.11.2017 11:20 Beiträge: 70 |
Super, danke an euch beide.
Damit kann ich leichter Editieren
Gruß,
BalistiK
Peter-FS
|
#5 16.11.2017 11:31 Beiträge: 1086 |
Radius
Nachtrag
Habe es gerade noch mal geprüft, Eingabe Radius bei XS_Ambient in m.
__________________________________________________________________
dabei fällt mir auf, wird bei den Area Abfragen der Radius oder der Durchmesser verwendet?
z.B. hier
AreEntitiesInArea(_player, _entityType, _position, _range, _amount)
____________________
Man muss nicht alles wissen, man muss nur wissen wo es steht!
Play4FuN
|
#6 16.11.2017 21:05 Beiträge: 704 |
Betreffend AreEntitiesInArea: es wäre mir komplett neu, wenn da irgendwo der Durchmesser verwendet würde.
____________________
LG Play4FuN
Siedler DEdK Mapping + Scripting Tutorials
Seiten: 1