Erstellen von Maps mit mehreren vertikalen Ebenen
Andere Sprachen: English, Deutsch
*Das Modul ist kostenlos, aber wenn Sie Karten verkaufen, die meine Module verwenden, benötigen Sie eine kommerzielle Lizenz, die auf meinem Patreon erhältlich ist
Wie man es benutzt:
-
Kacheln: Sie können den Höhenbereich einer Kachel über die Overhead-Kachelkonfiguration einstellen. Die Kachel muss Overehead sein und einen anderen Modus als "Keine" für "Bessere Dächer" aktiviert haben (setzen Sie die Okklusion auf "Verblassen" für beste Ergebnisse). Bereich für aktuelle Dächer muss auf unten,unendlich (z.B. 20,unendlich) gesetzt werden
-
Zeichnungen: Um ein Loch zu erstellen (z.B. einen Balkon), erstellen Sie ein POLYGON oder RECHTECK, dann stellen Sie den Bereich für das Loch in der Zeichnungskonfiguration ein und setzen den Ebenenmodus auf Loch. Um eine Treppe zu erstellen, tun Sie dasselbe, aber stellen Sie den Ebenenmodus als Treppe ein, eine Treppe wechselt zwischen der unteren Höhe und der oberen Höhe + 1.
-
Sperren von Treppen: Sie können eine Treppe über die Zeichnungsanzeige sperren (ein kleines Schlosssymbol)
-
Lichter: Sie können den Höhenbereich eines Lichts über die Lichtkonfiguration einstellen, z. B. 5,15
-
Wände: Das Gebäude muss mit Wänden versehen werden, damit Better Roof versteht, wo sich das Gebäude befindet (Sie können die Gebäudevorschau in den Einstellungen des Better Roofs-Moduls aktivieren, um zu überprüfen, ob es richtig berechnet wird)
UI
Sie können die UI der Ebenen nutzen, um sich die Arbeit zu erleichtern, wählen Sie einfach den Ebenen-Layer aus den Schaltflächen auf der linken Seite aus und definieren Sie Ihre Ebenen - mit dem Widget können Sie dann in den Ebenen navigieren, alles, was Sie platzieren (bezogen auf die Ebenen), wenn eine Ebene ausgewählt ist, wird automatisch mit der gewählten Ober- und Unterseite eingerichtet
Aufzug
Ihre Token ändern die Ebenen, indem sie ihre Höhe ändern, Sie können auch Zonen mit Zeichnungen einrichten, um die Höhe automatisch zu ändern
-
Midi-qol: Wenn Sie die Option "Players control owned hidden tokens" in Midi aktiviert haben, erhalten Sie einen libwrapper-Fehler, deaktivieren Sie diese Option, um das Problem zu beheben
Nebelerkundung wird in Levels nicht gespeichert: Aufgrund von Foundry-Limitierungen und Performance-Bedenken unter anderem, wenn Sie die erweiterte Nebel-Option verwenden, wird die Nebel-Erkundung für einen Level nicht gespeichert. Wenn Sie die Option deaktiviert haben, wird bei der Erkundung eines Stockwerks derselbe Bereich in allen anderen Stockwerken aufgedeckt.
Methode canvas.walls.checkCollision zur Prüfung auf eine bestimmte Höhe gepatcht
checkCollision(ray, options, elevation) → {boolean}
Finden Sie heraus, ob ein Token im Bereich eines bestimmten Objekts liegt
/**
* Herausfinden, ob ein Token im Bereich eines bestimmten Objekts liegt
* @param {Object} Token - ein Token
* @param {Object} object - eine Kachel/Zeichnung/Licht/Note
* @returns {Boolean} - true wenn im Bereich, false wenn nicht
**/
_levels.isTokenInRange(token,object)
Ermittelt die Deckenhöhe eines oder mehrerer Token
/**
* Ermittelt den Floor und Ceiling eines oder mehrerer Token.
* @param {Object|Object[]|String|String[]} tokenIds - Ein Token, ein Array von Token, eine Token-ID oder ein Array von Token-IDs
* @returns {Object|Object[]} - gibt ein Objekt zurück, das Token als Token-Objekt und range als Array mit 0 = Floor 1 = Ceiling enthält
**/
_levels.getTokens(tokenIds)
Variablen holen, die die Daten des Flags enthalten
/**
* Holt den Boden und die Decke eines Kachel-, Zeichnungs-, Licht- und Tonobjekts.
* @param {Object} object - Ein Kachel-, Zeichnungs-, Licht- oder Sound-Objekt
* @returns {rangeBottom, rangeTop, isLevel, drawingMode} liefert Variablen, die die Flags-Daten enthalten
**/
_levels.getFlagsForObject(object)
Get ein Array, das { tile : die Bodenkachel, poly : das für die Kachel berechnete Polygon, range : ein Array, wobei der Index 0 das untere Flag und 1 das obere ist} enthält
/**
* Ermittelt alle Ebenen, in denen sich ein Punkt befindet
* @param {Object} point - ein Objekt mit x- und y-Koordinaten {x:x,y:y}
* @returns {Object[]} gibt ein Array von Objekten zurück, die jeweils {tile,range,poly}
* wobei tile das Kachelobjekt ist, range ein Array mit [bottom,top] und poly das für den Raum berechnete Polygon ist
**/
_levels.getFloorsForPoint(point)
Gibt ein Array, bei dem der Index 0 die Unterseite und 1 die Oberseite ist
/**
* Liefert alle Ebenen, in denen sich ein Punkt befindet.
* @param {Integer} elevation - eine ganze Zahl, die die Höhe angibt
* @param {Object[]} floors - ein Array von Objekten, die jeweils {tile,range,poly}
* wobei tile das Kachelobjekt ist, range ein Array mit [bottom,top] und poly das für den Raum berechnete Polygon ist
* @returns {Array|false} gibt false zurück, wenn die Höhe in keiner der angegebenen Etagen enthalten ist, gibt ein Array mit [bottom,top] zurück, wenn eine gefunden wird
**/
_levels.findCurrentFloorForElevation(elevation,floors)
BEISPIEL:
_levels.findCurrentFloorForElevation(10,_levels.getFloorsForPoint({ x : token.center.x , y : token.center.y }))
Gibt zurück, in welchem Stockwerk eines Gebäudes sich eine beliebige Entität (gegeben ein Punkt und eine Höhe) befindet. Gibt False zurück, wenn es sich in keinem befindet
/**
* Führt eine Kollisionsprüfung zwischen 2 TOKEN im 3D-Raum durch
* @param {Object} token1 - ein Punkt im 3d-Raum {x:x,y:y,z:z}, wobei z die Höhe ist
* @param {Object} token2 - ein Punkt im 3D-Raum {x:x,y:y,z:z}, wobei z die Höhe ist
* @param {String} type - "Sicht" oder "Kollision" (Standardwert ist "Sicht")
* @returns {Boolean} gibt true zurück, wenn eine Kollision erkannt wird, flase wenn nicht
**/
_levels.checkCollision(token1, token2, type = "sight")
/**
* Ermittelt die gesamte LOS-Höhe für ein Token
* @param {Object} token - ein Token-Objekt
* @returns {Integer} liefert die Token-Höhe plus die in den Flags gespeicherte LOS-Höhe
**/
_levels.getTokenLOSheight(token)
/**
* Durchführen eines Kollisionstests zwischen 2 Punkten im 3D-Raum
* @param {Object} p0 - ein Punkt im 3d-Raum {x:x,y:y,z:z} wobei z die Höhe ist
* @param {Object} p1 - ein Punkt im 3D-Raum {x:x,y:y,z:z}, wobei z die Höhe ist
* @param {String} type - "Sicht" oder "Kollision" (Standardwert ist "Sicht")
* @returns {Boolean} gibt true zurück, wenn eine Kollision erkannt wird, flase wenn nicht
**/
_levels.testCollision(p0, p1, type = "sight")