Compare commits

...

23 Commits

Author SHA1 Message Date
Manuel Vögele 56f506bad2 Release v1.13.4 2023-03-14 16:27:36 +01:00
Manuel Vögele e1d54ed55d Use "cn" as language code for Simplified Chinese, as is done by foundry 2023-03-14 16:24:16 +01:00
eunaumtenhoid 504c242e86 Translated using Weblate (Portuguese (Brazil))
Currently translated at 100.0% (59 of 59 strings)

Translation: Drag Ruler/main
Translate-URL: https://weblate.foundryvtt-hub.com/projects/drag-ruler/main/pt_BR/
2023-03-14 16:22:01 +01:00
eunaumtenhoid a48c199863 Added translation using Weblate (Portuguese (Brazil)) 2023-03-14 16:22:01 +01:00
Manuel Vögele b7ace776d5 Release v1.13.3 2023-02-21 10:02:05 +01:00
bnp800 cf98287afd Translated using Weblate (Chinese (Simplified))
Currently translated at 100.0% (59 of 59 strings)

Translation: Drag Ruler/main
Translate-URL: https://weblate.foundryvtt-hub.com/projects/drag-ruler/main/zh_Hans/
2023-02-21 09:58:43 +01:00
bnp800 7a3b547741 Added translation using Weblate (Chinese (Simplified)) 2023-02-21 09:58:43 +01:00
Raul Castaño 5329a4056c Translated using Weblate (Spanish)
Currently translated at 100.0% (59 of 59 strings)

Translation: Drag Ruler/main
Translate-URL: https://weblate.foundryvtt-hub.com/projects/drag-ruler/main/es/
2022-11-18 14:17:56 +01:00
Manuel Vögele a65ff4ddb4 Release v1.13.2 2022-10-15 18:40:48 +02:00
Manuel Vögele c2aa47985b Take into account that the hex size support module may not be installed (fixes #241) 2022-10-15 18:39:44 +02:00
Manuel Vögele 4b5fea0763 Release v1.13.1 2022-10-15 17:54:15 +02:00
Manuel Vögele 26c3475db6 Repair regressions of a9c15d77 where square token highlighting would break 2022-10-15 16:48:07 +02:00
Manuel Vögele 2cf97e2804 Add comments about re-used code in routinglib 2022-10-15 16:37:47 +02:00
Manuel Vögele 7dcb8b5c71 Remove hex-size-support from readme, as it's no longer needed for hex support 2022-10-15 16:01:32 +02:00
Manuel Vögele a9c15d779b v10 compat: Make Drag Ruler play nice with Foundry v10's hex grid and the new hex-size-support module 2022-10-15 16:00:38 +02:00
Manuel Vögele 01b9941c16 Export getRangesFromSpeedProvider 2022-10-15 10:33:32 +02:00
vincent 7bd5ad3dad Translated using Weblate (French)
Currently translated at 100.0% (59 of 59 strings)

Translation: Drag Ruler/main
Translate-URL: https://weblate.foundryvtt-hub.com/projects/drag-ruler/main/fr/
2022-10-14 23:56:03 +02:00
Manuel Vögele 6b4965f507 Translated using Weblate (German)
Currently translated at 100.0% (59 of 59 strings)

Translation: Drag Ruler/main
Translate-URL: https://weblate.foundryvtt-hub.com/projects/drag-ruler/main/de/
2022-10-14 23:56:03 +02:00
Manuel Vögele e57829936e Translated using Weblate (English)
Currently translated at 100.0% (59 of 59 strings)

Translation: Drag Ruler/main
Translate-URL: https://weblate.foundryvtt-hub.com/projects/drag-ruler/main/en/
2022-10-14 23:56:03 +02:00
Manuel Vögele 1713380900 Make pathfinding demonstration loop 2022-10-14 22:21:24 +02:00
Manuel Vögele 0896265f87 Transmit the cost options to ETL properly (fixes #238) 2022-10-14 22:21:20 +02:00
Manuel Vögele 8a91c8843d v10 compat: Get rid of several deprecation warnings (fixes #237) 2022-10-14 11:17:27 +02:00
rectulo 4787ae5e12 Update fr.json (#234) 2022-10-14 09:19:25 +02:00
17 changed files with 522 additions and 211 deletions
+28
View File
@@ -1,3 +1,31 @@
## 1.13.4
### Translations
- New translation: Portuguese (Brazil) (thanks eunaumtenhoid!)
- Foundry should now be able to detect the Simplified Chenese translation properly
## 1.13.3
### Translations
- New translation: Chinese (Simplified) (thanks bnp800!)
## 1.13.2
### Bugfixes
- Fixed a bug that prevented pathfinding on hex to work when the hex size support module is not installed
## 1.13.1
### Bugfixes
- Fixed a bug that caused large hex tokens to not snap correctly
- Fixed a bug that prevented Drag Ruler from working on hex grids at all if the Hex Size Support module is enabled
- Fixed a bug that prevented Enhanced Terrain Layer from determining dragged moving token
- Fixed several deprecation warnings
### Translations
- Updated the english text for several UI items
- Updated the german translation
- Updated the french translation (thanks rectulo!)
## 1.13.0
### Breaking changes
- Drag Ruler's pathfinder has been extracted into a dedicated library module. If you'd like to continue to use Drag Ruler's pathfinding feature, please install [routinglib](https://foundryvtt.com/packages/routinglib) alongside Drag Ruler.
+2 -2
View File
@@ -9,7 +9,7 @@ This module shows a ruler when you drag a token or measurement template to infor
## Supports Tokens of all sizes
Terrain ruler has excellent support for tokens of all sizes. The Ruler will always originate from the token's center and will always highlight all the squares that tokens move over. If the [Hex Token Size Support](https://foundryvtt.com/packages/hex-size-support) is installed this is also true for large tokens on hex scenes.
Terrain ruler has excellent support for tokens of all sizes. The Ruler will always originate from the token's center and will always highlight all the squares that tokens move over.
![Drag Ruler being used with a large token on a square grid](https://raw.githubusercontent.com/manuelVo/foundryvtt-drag-ruler/709774b25f7dd818a90591165f74b3e6dbc788cc/media/large_token_square.webp)
![Drag Ruler being used with a large token on a hex grid](https://raw.githubusercontent.com/manuelVo/foundryvtt-drag-ruler/709774b25f7dd818a90591165f74b3e6dbc788cc/media/large_token_hex.webp)
@@ -39,7 +39,7 @@ When routinglib is installed, Drag Ruler can automatically place waypoints to wa
Pathfinding is restricted to GM users by default, since the pathfinding algorithm can create ways that lead through unexplored fog of war. If you want to allow your players to use Drag Ruler's pathfinding functionality, you need to enable the associated setting in Drag Ruler's module settings.
![Demonstration of pathfinding](https://raw.githubusercontent.com/manuelVo/foundryvtt-drag-ruler/15cda2cdbe50d6c32ac75544edf43368560ab1bc/media/pathfinding.webp)
![Demonstration of pathfinding](https://raw.githubusercontent.com/manuelVo/foundryvtt-drag-ruler/a5de9bbf0a54a5bafaa53c786bed4379dc244253/media/pathfinding.webp)
## Game systems with Drag Ruler integration
+23 -15
View File
@@ -4,7 +4,7 @@
"ok": "OK",
"terrain-ruler": {
"title": "Wie man schwieriges Gelände mit Drag Ruler misst",
"text": "Du hast das {moduleName} Modul installiert. Drag Ruler kann schwieriges Gelände, das mit diesem Modul platziert wurde in seinen Messungen berücksichtigen. Hierzu greift Drag Ruler auf die Funktionalität von Terrain Ruler zurück. Wenn Terrain Ruler installiert und aktiviert ist wird Drag Ruler automatisch anfangen schwieriges Gelände in den Messungen zu berücksichtigen.",
"text": "Du hast das {moduleName} Modul installiert. Drag Ruler kann schwieriges Gelände, das mit diesem Modul platziert wurde in seinen Messungen berücksichtigen. Hierzu greift Drag Ruler auf die Funktionalität von Terrain Ruler zurück. Wenn Terrain Ruler installiert und aktiviert ist, wird Drag Ruler automatisch anfangen schwieriges Gelände in den Messungen zu berücksichtigen.",
"neverShowAgain": "Zeige dies nie wieder an"
},
"socketlib": {
@@ -21,7 +21,7 @@
},
"speedAttribute": {
"name": "Geschwindigkeitsattribut",
"hint": "Das Attribut, das die Gehgeschwindigkeit einer Spielfigur definiert. Diese Attribut wird während der Färbung des hervorgehobenen Pfads verwendet."
"hint": "Das Attribut, das die Gehgeschwindigkeit einer Spielfigur definiert. Dieses Attribut wird während der Färbung des hervorgehobenen Pfads verwendet."
}
},
"speeds": {
@@ -35,33 +35,33 @@
"deleteWaypoint": "Wegpunkt löschen",
"disableSnap": {
"name": "Raster deaktivieren",
"hint": "Während diese Taste gedrückt ist wird das Raster temporär deaktiviert"
"hint": "Während diese Taste gedrückt ist, wird das Raster temporär deaktiviert."
},
"moveWithoutAnimation": {
"name": "Token animation deaktivieren",
"name": "Tokenanimation deaktivieren",
"hint": "Wenn diese Taste gedrückt wird, während ein Token fallen gelassen wird, bewegt es sich ohne Animation zum Zielort."
},
"togglePathfinding": {
"name": "Wegfindung umschalten",
"hint": "Wenn diese Taste gedrückt gehalten wird, während ein Token gezogen wird, wird die Wegfindung vorübergehend aktiviert/deaktiviert"
"hint": "Wenn diese Taste gedrückt gehalten wird, während ein Token gezogen wird, wird die Wegfindung vorübergehend aktiviert/deaktiviert."
}
},
"settings": {
"allowPathfinding": {
"name": "Wegfindung für Spieler erlauben",
"hint": "Erlaubt es Spielern die Wegfindungs zu benutzen. Bitte beachte, dass die Wegfindung Wege durch unerkundeten Nebel des Kriegs und Ätherische Wände berechnen kann. Dies kann deinen Spielern Geheimnisse lüften, von denen sie noch nicht erfahren sollten."
"hint": "Erlaubt es Spielern die Wegfindung zu benutzen. Bitte beachte, dass die Wegfindung Wege durch unerkundeten Nebel des Kriegs und ätherische Wände berechnen kann. Dies kann deinen Spielern Geheimnisse lüften, von denen sie noch nicht erfahren sollten."
},
"alwaysShowSpeedForPCs": {
"name": "Geschwindigkeit von Spielercharakteren für jeden anzeigen",
"hint": "Wenn diese Einstellung aktiviert ist wird die Färbung der hervorgehobenen Felder bei Spielercharakteren allen Spielern angezeigt, selbst wenn diese keinen Zugriff auf den Charakterbogen haben."
"hint": "Wenn diese Einstellung aktiviert ist, wird die Färbung der hervorgehobenen Felder bei Spielercharakteren allen Spielern angezeigt, selbst wenn diese keinen Zugriff auf den Charakterbogen haben."
},
"autoStartMeasurement": {
"name": "Automatisch mit Messen beginnen",
"hint": "Wenn diese Option aktiviert ist beginnt Drag Ruler mit dem Messen sobald das Token bewegt wird. Wenn die Option deaktiviert ist bleibt Drag Ruler deaktiviert bis der Knopf zum platzieren eines Wegpunkts betätigt wird."
"hint": "Wenn diese Option aktiviert ist beginnt Drag Ruler mit dem Messen, sobald das Token bewegt wird. Wenn die Option deaktiviert ist, bleibt Drag Ruler deaktiviert bis der Knopf zum Platzieren eines Wegpunkts betätigt wird."
},
"enableMovementHistory": {
"name": "Bewegungsverlauf während des Kampfes aktivieren",
"hint": "Wenn diesen Option aktiviert ist merkt sich Drag Ruler die Bewegungen, die während einer Runde eines Kampfes gemacht wurden und zeigt diese an, wenn das Token weiterbewegt wird."
"hint": "Wenn diese Option aktiviert ist, merkt sich Drag Ruler die Bewegungen, die während einer Runde eines Kampfes gemacht wurden und zeigt diese an, wenn das Token weiterbewegt wird."
},
"rightClickAction": {
"name": "Aktion bei Rechtsklick",
@@ -74,7 +74,7 @@
},
"showGMRulerToPlayers": {
"name": "Lineal des Spielleiters bei Spielern anzeigen",
"hint": "Wenn diese Option deaktiviert ist wird das Lineal des Spielleiters bei den anderen Spielern nicht angezeigt."
"hint": "Wenn diese Option deaktiviert ist, wird das Lineal des Spielleiters bei den anderen Spielern nicht angezeigt."
},
"speedProviderSettings": {
"name": "Einstellungen zur Spielsystemintegration",
@@ -87,20 +87,20 @@
},
"activeProvider": {
"name": "Verwendete Spielsystemintegration",
"hint": "Die unten angezeigten Einstellungen hängen von der verwendeten Spielsystemintegration ab. Wenn der Spielleiter eine andere Spielsystemintegration auswählt können sich die zur Verfügung stehenden Einstellungen ändern."
"hint": "Die unten angezeigten Einstellungen hängen von der verwendeten Spielsystemintegration ab. Wenn der Spielleiter eine andere Spielsystemintegration auswählt, können sich die zur Verfügung stehenden Einstellungen ändern."
},
"noSettings": "Diese Spielsystemintegration hat keine Einstellmöglichkeiten",
"noSettings": "Diese Spielsystemintegration hat keine Einstellmöglichkeiten.",
"color": {
"name": "Farbe für {colorName}",
"hint": "Die Farbe mit der Felder in {colorName} Reichweite hervorgehoben werden",
"hint": "Die Farbe mit der Felder in {colorName} Reichweite hervorgehoben werden.",
"unreachable": {
"name": "unerreichbar",
"hint": "Die Farbe für Felder, die von der bewegten Spielfigur nicht erreicht werden können"
"hint": "Die Farbe für Felder, die von der bewegten Spielfigur nicht erreicht werden können."
}
},
"speedProvider": {
"name": "Verwendete Spielsystemintegration",
"hint": "Wähle aus, welche Spielsystemintegration für die farbliche Hervorhebung der Felder zuständig sein soll. Drag Ruler stellt eine generische Spielsystemintegration zur Verfügung, die grundlegende Funktionalität bietet und bei korrekter konfiguration mit allen Spielsystemen funktionieren sollte. Weitere Spielsystemintegrationen können durch Module und Spielsysteme angeboten werden. Eine andere Spielsystemintegration als die generische auszuwählen kann eine bessere Inegration in das verwendete Spielsystem bieten. Die Optionen unterhalb sind davon abhängig, welche Spielsystemintegration hier ausgewählt wurde.",
"hint": "Wähle aus, welche Spielsystemintegration für die farbliche Hervorhebung der Felder zuständig sein soll. Drag Ruler stellt eine generische Spielsystemintegration zur Verfügung, die grundlegende Funktionalität bietet und bei korrekter Konfiguration mit allen Spielsystemen funktionieren sollte. Weitere Spielsystemintegrationen können durch Module und Spielsysteme angeboten werden. Eine andere Spielsystemintegration als die generische auszuwählen kann eine bessere Integration in das verwendete Spielsystem bieten. Die Optionen unterhalb sind davon abhängig, welche Spielsystemintegration hier ausgewählt wurde.",
"choices": {
"module": "Modul {name}",
"native": "Generisch",
@@ -111,6 +111,14 @@
"useGridlessraster": {
"name": "Geschwindigkeitsraster aktivieren",
"hint": "Lässt Spielfiguren auf gitterlosen Szenen an deren Geschwindigkeitsgrenzen einrasten."
},
"autoPathfinding": {
"name": "Wegfindung grundsätzlich aktivieren",
"hint": "Wenn diese Option aktiviert ist, wird beim Ziehen eines Tokens automatisch die Wegfindung verwendet."
},
"useGridlessRaster": {
"name": "Geschwindigkeitsbasiertes Raster verwenden",
"hint": "Dies lässt Spielfiguren auf gitterlosen Szenen an ihren Geschwindigkeitsgrenzen einrasten."
}
}
}
+14 -14
View File
@@ -4,7 +4,7 @@
"ok": "OK",
"terrain-ruler": {
"title": "How to measure difficult terrain with Drag Ruler",
"text": "You have the {moduleName} module enabled. Drag Ruler is able to measure difficult terrain that was placed down using that module. To make this possible Drag Ruler utilizes the Terrain Ruler module. If Terrain Ruler is installed and activated Drag Ruler will automatically start to respect difficult terrain in it's measurements.",
"text": "You have the {moduleName} module enabled. Drag Ruler is able to measure difficult terrain that was placed down using that module. To make this possible Drag Ruler utilizes the Terrain Ruler module. If Terrain Ruler is installed and activated Drag Ruler will automatically start to respect difficult terrain in its measurements.",
"neverShowAgain": "Never show this again"
},
"socketlib": {
@@ -12,7 +12,7 @@
"text": "Drag Ruler requires the socketlib module to work properly. Please activate the socketlib module in this world."
}
},
"resetMovementHistory": "Reset Movement History",
"resetMovementHistory": "Reset movement history",
"genericSpeedProvider": {
"settings": {
"dashMultiplier": {
@@ -35,15 +35,15 @@
"deleteWaypoint": "Delete waypoint",
"disableSnap": {
"name": "Disable snapping",
"hint": "Snapping will be temporarily disabled while this key is being held down"
"hint": "Snapping will be temporarily disabled while this key is being held down."
},
"moveWithoutAnimation": {
"name": "Disable token animation",
"hint": "When being held while dropping a token, the token will move to the target location without animating"
"hint": "When being held while dropping a token, the token will move to the target location without animating."
},
"togglePathfinding": {
"name": "Toggle pathfinding",
"hint": "When being held while dragging a token, the pathfinding functionality will be temporarily enabled/disabled"
"hint": "When being held while dragging a token, the pathfinding functionality will be temporarily enabled/disabled."
}
},
"settings": {
@@ -53,7 +53,7 @@
},
"alwaysShowSpeedForPCs": {
"name": "Show PC speed to everyone",
"hint": "If enabled the coloring based on actor speed for player characters will shown to everyone, even if they don't have observer permission for the character sheet."
"hint": "If enabled, the coloring based on actor speed for player characters will be shown to everyone, even if they don't have observer permission for the character sheet."
},
"autoStartMeasurement": {
"name": "Automatically start measuring",
@@ -61,15 +61,15 @@
},
"autoPathfinding": {
"name": "Pathfinding by default",
"hint": "If enabled, dragging a token will automatically use a pathfinding ruler"
"hint": "If enabled, dragging a token will automatically use a pathfinding ruler."
},
"enableMovementHistory": {
"name": "Enable movement history during combat",
"hint": "If enabled, Drag Ruler will remember the path a token took during it's turn in combat and will display it when you pick the token back up."
"hint": "If enabled, Drag Ruler will remember the path a token took during its turn in combat and will display it when you pick the token back up."
},
"rightClickAction": {
"name": "Right click action",
"hint": "What action shall be performed when right clicking while dragging a token?",
"hint": "What action shall be performed when right-clicking while dragging a token?",
"choices": {
"create": "Create waypoint",
"delete": "Delete waypoint",
@@ -78,7 +78,7 @@
},
"showGMRulerToPlayers": {
"name": "Show GM ruler to players",
"hint": "If disabled the ruler of GMs will not be shown for non-GM players"
"hint": "If disabled the ruler of GMs will not be shown for non-GM players."
},
"speedProviderSettings": {
"name": "Speed Provider Settings",
@@ -90,21 +90,21 @@
"speedProviderSettings": "Speed Provider specific settings"
},
"activeProvider": {
"name": "Currently active Speed Provider",
"name": "Active Speed Provider",
"hint": "The settings show below depend on the active speed provider. If the GM selects a different speed provider the available settings may change."
},
"noSettings": "This speed provider doesn't offer any configuration options.",
"color": {
"name": "Color for {colorName}",
"hint": "The color that will be used to color squares that are within {colorName} range",
"hint": "The color that will be used to color squares that are within {colorName} range.",
"unreachable": {
"name": "unreachable",
"hint": "The color for spaces that aren't reachable by the dragged token"
"hint": "The color for spaces that aren't reachable by the dragged token."
}
},
"speedProvider": {
"name": "Speed Settings Provider",
"hint": "Select who provides speed information for tokens duing coloring. Drag Ruler offers a generic speed provider that provides basic functionality and should work for all game systems if configured correctly. More speed providers can be made available via game systems and installed modules. Selecting a different speed provider than the generic speed provider may offer a better integration into the rules of the game system you're using. The options below are dependent upon the speed provider selected here.",
"hint": "Select who provides speed information for tokens during coloring. Drag Ruler offers a generic speed provider that provides basic functionality and should work for all game systems if configured correctly. More speed providers can be made available via game systems and installed modules. Selecting a different speed provider than the generic speed provider may offer a better integration into the rules of the game system you're using. The options below are dependent upon the speed provider selected here.",
"choices": {
"module": "Module {name}",
"native": "Generic",
+23 -23
View File
@@ -8,24 +8,24 @@
"ok": "OK",
"terrain-ruler": {
"title": "Cómo medir a través de terreno difícil con Drag Ruler",
"text": "You have the {moduleName} module enabled. Drag Ruler is able to measure difficult terrain that was placed down using that module. To make this possible Drag Ruler utilizes the Terrain Ruler module. If Terrain Ruler is installed and activated Drag Ruler will automatically start to respect difficult terrain in it's measurements.",
"text": "Tienes habilitado el módulo {moduleName}. Drag Ruler puede medir terrenos difíciles que se colocaron usando ese módulo. Para hacer esto posible, Drag Ruler utiliza el módulo Terrain Ruler. Si Terrain Ruler está instalado y activado, Drag Ruler automáticamente comenzará a respetar terrenos difíciles en sus medidas.",
"neverShowAgain": "No volver a mostrar"
},
"socketlib": {
"title": "El módulo Socketlib no está instalado",
"text": "Drag Ruler necesita para su funcionamiento correcto que instale socketlib. Por favor, active socketlib en este mundo"
"text": "Drag Ruler necesita para su funcionamiento correcto que instale socketlib. Por favor, active socketlib en este mundo."
}
},
"resetMovementHistory": "Reiniciar historial de movimiento",
"resetMovementHistory": "Reiniciar el historial de movimiento",
"genericSpeedProvider": {
"settings": {
"dashMultiplier": {
"name": "Multiplicador por correr",
"hint": "Se puede usar para aplicar a los iconos una velocidad secundaria que use un color distinto en la medición de la ruta a seguir. Establece el valor a 0 para deshabilitar esta velocidad secundaria"
"hint": "Se puede usar para aplicar a los iconos una velocidad secundaria que use un color distinto en la medición de la ruta a seguir. Establece el valor a 0 para deshabilitar esta velocidad secundaria."
},
"speedAttribute": {
"name": "Attributo de velocidad",
"hint": "El atributo que define la velocidad de movimiento andando del icono. Se usa para los códigos de colores al medir la ruta a seguir"
"hint": "El atributo que define la velocidad de movimiento andando del icono. Se usa para los códigos de colores al medir la ruta a seguir."
}
},
"speeds": {
@@ -39,41 +39,41 @@
"deleteWaypoint": "Borrar punto de ruta",
"disableSnap": {
"name": "Deshabilitar ajuste",
"hint": "El ajuste a la rejilla se deshabilitará temporalmente mientras se presione esta tecla"
"hint": "El ajuste a la rejilla se deshabilitará temporalmente mientras se presione esta tecla."
},
"moveWithoutAnimation": {
"name": "Deshabilitar animación de icono",
"hint": "Si al soltar un icono se presiona esta tecla, se deshabilitará la animación del icono al moverse al destino"
"hint": "Si al soltar un icono se presiona esta tecla, se deshabilitará la animación del icono al moverse al destino."
},
"togglePathfinding": {
"name": "Conmutar búsqueda de camino",
"hint": "Cuando se presione al arrastrar un icono, la funcionalidad de búsqueda de camino será temporalmente habilitada/deshabilitada"
"hint": "Cuando se presione al arrastrar un icono, la funcionalidad de búsqueda de camino será temporalmente habilitada/deshabilitada."
}
},
"settings": {
"allowPathfinding": {
"name": "Permitir búsqueda de camino a los jugadores",
"hint": "Permite a los jugadores usar en este mundo la funcionalidad de búsqueda de camino. Tenga cuidado porque la ruta puede transcurrir por lugares con niebla de guerra o muros invisibles, lo que podrá revelar algunos secretos a los jugadores antes de tiempo"
"hint": "Permite a los jugadores usar en este mundo la funcionalidad de búsqueda de camino. Tenga cuidado porque la ruta puede transcurrir por lugares con niebla de guerra o muros invisibles, lo que podrá revelar algunos secretos a los jugadores antes de tiempo."
},
"alwaysShowSpeedForPCs": {
"name": "Mostrar velocidad de los PJs a todo el mundo",
"hint": "Si se habilita, se mostrará a todo el mundo los códigos de colores de las rutas de los PJs, incluso si no tienen permisos de observador para ese personaje"
"hint": "Si se habilita, se mostrará a todo el mundo los códigos de colores de las rutas de los PJs, incluso si no tienen permisos de observador para ese personaje."
},
"autoStartMeasurement": {
"name": "Comenzar a medir automáticamente",
"hint": "Si se habilita, Drag Ruler comenzará a medir en cuanto se comience a arrastrar un icono. Si se deshabilita, Drag Ruler permanecerá inactivo y comenzará a medir únicamente cuando se presione el botón configurado para añadir un nuevo punto de ruta"
"hint": "Si se habilita, Drag Ruler comenzará a medir en cuanto se comience a arrastrar un icono. Si se deshabilita, Drag Ruler permanecerá inactivo y comenzará a medir únicamente cuando se presione el botón configurado para añadir un nuevo punto de ruta."
},
"autoPathfinding": {
"name": "Búsqueda de camino por defecto",
"hint": "Si se habilita, al arrastrar un icono se usará automáticamente la regla de búsqueda de camino"
"hint": "Si se habilita, al arrastrar un icono se usará automáticamente la regla de búsqueda de camino."
},
"enableMovementHistory": {
"name": "Habilitar historial de movimiento durante el combate",
"hint": "Si se habilita, Drag Ruler recordará la ruta que ha seguido un icono en su turno y la mostrará al seleccionarlo de nuevo"
"hint": "Si se habilita, Drag Ruler recordará la ruta que ha seguido un icono en su turno de combate y la mostrará al seleccionarlo de nuevo."
},
"rightClickAction": {
"name": "Acción del botón derecho",
"hint": "Qué acción se llevará a cabo cuando se haga clic derecho mientras se arrastra un icono",
"hint": "¿Qué acción se realizará al hacer clic derecho mientras se arrastra un icono?",
"choices": {
"create": "Crear punto de ruta",
"delete": "Borrar punto de ruta",
@@ -82,11 +82,11 @@
},
"showGMRulerToPlayers": {
"name": "Mostrar regla del GM a los jugadores",
"hint": "Si se deshabilita, no se mostrará la regla de medición de los GMs al resto de usuarios"
"hint": "Si se deshabilita, no se mostrará la regla de medición de los GMs al resto de usuarios no-GMs."
},
"speedProviderSettings": {
"name": "Proveedor de configuración de velocidad",
"hint": "El proveedor de ajustes de velocidad contiene todos los ajustes específicos de cada sistema",
"hint": "El Proveedor de Ajustes de Velocidad contiene todos los ajustes específicos de cada sistema de juego.",
"button": "Proveedor de configuración de velocidad",
"windowTitle": "Proveedor de configuración de velocidad",
"headers": {
@@ -94,21 +94,21 @@
"speedProviderSettings": "Configuraciones específicas del proveedor de velocidad"
},
"activeProvider": {
"name": "Proveedor de velocidad actualmente activo",
"hint": "La configuración que se muestra más abajo depende del proveedor de velocidad activo. Si el GM selecciona un proveedor distinto, los ajustes disponibles puede que cambien"
"name": "Proveedor de Velocidad Activo",
"hint": "La configuración que se muestra más abajo depende del proveedor de velocidad activo. Si el GM selecciona un proveedor distinto, los ajustes disponibles puede que cambien."
},
"noSettings": "Este proveedor de velocidad no dispone de ninguna opción de configuración",
"noSettings": "Este proveedor de velocidad no dispone de ninguna opción de configuración.",
"color": {
"name": "Color para {colorName}",
"hint": "Color que se usará para establecer el tono de las cuadrículas que se encuentran dentro del rango {colorName}",
"hint": "Color que se usará para establecer el tono de las cuadrículas que se encuentran dentro del rango {colorName}.",
"unreachable": {
"name": "inalcanzable",
"hint": "Color que se usará para las cuadrículas más allá de la distancia máxima de movimiento del icono"
"hint": "Color que se usará para las cuadrículas más allá de la distancia máxima de movimiento del icono."
}
},
"speedProvider": {
"name": "Proveedor de configuración de velocidad",
"hint": "Seleccione quien suministra la información de la velocidad de los iconos a la hora de colorear la ruta a seguir. Drag Ruler incluye un proveedor genérico que ofrece una funcionalidad básica y que probablemente funcione para casi todos los sistemas si se usa de forma correcta. Se pueden añadir otros proveedores de velocidad al instalar sistemas o módulos. Seleccionar un proveedor distinto al genérico asegurará una mejor integración con las reglas del sistema que está usando. Las opciones siguientes dependerán del proveedor que seleccione",
"hint": "Seleccione quien suministra la información de la velocidad de los iconos a la hora de colorear la ruta a seguir. Drag Ruler incluye un proveedor genérico que ofrece una funcionalidad básica y que probablemente funcione para casi todos los sistemas si se usa de forma correcta. Se pueden añadir otros proveedores de velocidad al instalar sistemas o módulos. Seleccionar un proveedor distinto al genérico asegurará una mejor integración con las reglas del sistema que está usando. Las opciones siguientes dependerán del proveedor que seleccione.",
"choices": {
"module": "Módulo {name}",
"native": "Genérico",
@@ -118,7 +118,7 @@
},
"useGridlessRaster": {
"name": "Usar ajuste a la velocidad",
"hint": "Cuando no se use rejilla en la escena, este ajuste hace que los iconos se ajusten a sus rangos de velocidad. Se puede deshabilitar temporalmente pulsando la tecla Mayús mientras se arrastra"
"hint": "Cuando no se use rejilla en la escena, este ajuste hace que los iconos se ajusten a sus rangos de velocidad."
}
}
}
+52 -16
View File
@@ -4,31 +4,53 @@
"ok": "OK",
"terrain-ruler": {
"title": "Comment mesurer un terrain difficile avec Drag Ruler",
"text": "Vous avez le module {moduleName} activé. Drag Ruler est capable de mesurer un terrain difficile qui a été placé à l'aide de ce module. Pour rendre cela possible, Drag Ruler utilise le module Terrain Ruler. Si Terrain Ruler est installé et activé Drag Ruler commencera automatiquement à respecter le terrain difficile dans ses mesures.",
"text": "Vous avez le module {moduleName} activé. Drag Ruler est capable de mesurer un terrain difficile qui a été placé à l'aide de ce module. Pour rendre cela possible, Drag Ruler utilise le module Terrain Ruler. Si Terrain Ruler est installé et activé, Drag Ruler commencera automatiquement à respecter le terrain difficile lors de ses mesures.",
"neverShowAgain": "Ne plus jamais afficher cela"
},
"socketlib": {
"title": "Module Socketlib manquant",
"text": "Drag Ruler nécessite que le module socketlib fonctionne correctement. Veuillez activer le module socketlib dans ce monde."
"text": "Drag Ruler nécessite que le module socketlib fonctionne correctement. Veuillez activer le module socketlib dans ce monde."
}
},
"resetMovementHistory": "Réinitialiser l'historique des mouvements",
"genericSpeedProvider": {
"settings": {
"dashMultiplier": {
"name": "Multiplicateur de courses",
"name": "Multiplicateur de course",
"hint": "Cela peut être utilisé pour donner aux jetons une vitesse secondaire pendant la coloration du chemin mesuré. Réglez-le sur 0 pour désactiver la vitesse secondaire."
},
"speedAttribute": {
"name": "Attribut de vitesse",
"hint": "L'attribut qui définit la vitesse de marche d'un jeton. Il est utilisé lors de la coloration du chemin mesuré." }
"name": "Attribut de vitesse",
"hint": "L'attribut qui définit la vitesse de marche d'un jeton. Il est utilisé lors de la coloration du chemin mesuré."
}
},
"speeds": {
"walk": "marche",
"dash": "course"
}
},
"keybindings": {
"cancelDrag": "Effacer glisser",
"createWaypoint": "Créer un point de passage",
"deleteWaypoint": "Effacer un point de passage",
"disableSnap": {
"name": "Désactiver l'interruption",
"hint": "L'interruption sera temporairement désactivée tant que cette clé est maintenue enfoncée."
},
"moveWithoutAnimation": {
"name": "Désactiver l'animation du jeton",
"hint": "Lorsqu'elle est maintenue lorsque vous déposer un jeton, le jeton se déplacera vers le lieu ciblé sans s'animer."
},
"togglePathfinding": {
"name": "Activer la recherche de l'itinéraire",
"hint": "Lorsqu'elle est maintenue en glissant un jeton, la fonction de recherche de l'itinéraire sera temporairement activée/désactivée."
}
},
"settings": {
"allowPathfinding": {
"name": "Autoriser la recherche de l'itinéraire pour les joueurs",
"hint": "Permet aux joueurs d'utiliser la fonction de recherche de l'itinéraire de Drag Ruler dans ce monde. Soyez conscient que la recherche de l'itinéraire peut conduire à travers le brouillard de guerre inexploré et les murs éthérés, ce qui pourrait révéler des secrets à vos joueurs avant l'heure."
},
"alwaysShowSpeedForPCs": {
"name": "Afficher la vitesse du PJ à tout le monde",
"hint": "Si activé, la coloration basée sur la vitesse de l'acteur pour les personnages joueurs sera montrée à tout le monde, même s'ils n'ont pas la permission d'observateur pour la feuille de personnage."
@@ -37,13 +59,26 @@
"name": "Démarrer automatiquement la mesure",
"hint": "Si activé, Drag Ruler commencera à mesurer dès que le jeton est glissé. S'il est désactivé, Drag Ruler restera inactif et ne commencera à mesurer qu'une fois que le bouton pour ajouter un waypoint est enfoncé."
},
"autoPathfinding": {
"name": "Recherche d'itinéraire par défaut",
"hint": "Si activé, glisser un jeton utilisera automatiquement une recherche de l'itinéraire."
},
"enableMovementHistory": {
"name": "Activer l'historique des mouvements pendant le combat",
"hint": "Si activé, Drag Ruler se souviendra du chemin emprunté par un jeton pendant son tour de combat et l'affichera lorsque vous récupérerez le jeton."
},
"rightClickAction": {
"name": "action de Clic droit",
"hint": "Quelle sera l'action accomplie lorsque vous ferez un clic droit en glissant un jeton ?",
"choices": {
"create": "Créer un point de passage",
"delete": "Effacer un point de passage",
"cancel": "Annuler le glisser"
}
},
"showGMRulerToPlayers": {
"name": "Afficher la règle MJ aux joueurs",
"hint": "Si désactivé, la règle des MJ ne sera pas affichée pour les joueurs non-MJ"
"hint": "Si désactivé, la règle des MJ ne sera pas affichée pour les joueurs non MJ."
},
"speedProviderSettings": {
"name": "Paramètres du système de vitesse",
@@ -51,35 +86,36 @@
"button": "Paramètres du système de vitesse",
"windowTitle": "Paramètres du système de vitesse",
"headers": {
"speedProvider": "système de vitesse",
"speedProvider": "Système de vitesse",
"speedProviderSettings": "Paramètres spécifiques au système de vitesse"
},
"activeProvider": {
"name": "système de vitesse actuellement actif",
"name": "Système de vitesse actuellement actif",
"hint": "Les paramètres indiqués ci-dessous dépendent du système de vitesse actif. Si le MJ sélectionne un système de vitesse différent, les paramètres disponibles peuvent changer."
},
"noSettings": "Ce système de vitesse n'offre aucune option de configuration.",
"color": {
"name": "Couleur pour {colorName}",
"hint": "La couleur qui sera utilisée pour colorier les carrés qui sont dans la plage {colorName}",
"hint": "La couleur qui sera utilisée pour colorier les carrés qui sont dans la portée {colorName}.",
"unreachable": {
"name": "injoignable",
"hint": "La couleur des espaces qui ne sont pas accessibles par le jeton déplacé"
"name": "inaccessible",
"hint": "La couleur des cases qui ne sont pas accessibles pour le jeton déplacé."
}
},
"speedProvider": {
"name": "système de paramètres de vitesse",
"indice": "Sélectionnez qui fournit les informations de vitesse pour les jetons lors de la coloration. Drag Ruler offre un système de vitesse générique qui fournit des fonctionnalités de base et devrait fonctionner pour tous les systèmes de jeu s'il est correctement configuré. Plus de systèmes de vitesse peuvent être mis à disposition via les systèmes de jeu et les modules installés . La sélection d'un autre système de vitesse que le système de vitesse générique peut offrir une meilleure intégration dans les règles du système de jeu que vous utilisez. Les options ci-dessous dépendent du système de vitesse sélectionné ici.",
"name": "Système de paramètres de vitesse",
"indice": "Sélectionnez qui fournit les informations de vitesse pour les jetons lors de la coloration. Drag Ruler offre un système de vitesse générique qui fournit des fonctionnalités de base et devrait fonctionner pour tous les systèmes de jeu s'il est correctement configuré. Plus de systèmes de vitesse peuvent être mis à disposition via les systèmes de jeu et les modules installés. La sélection d'un autre système de vitesse que le système de vitesse générique peut offrir une meilleure intégration dans les règles du système de jeu que vous utilisez. Les options ci-dessous dépendent du système de vitesse sélectionné ici.",
"choices": {
"module": "Module {name}",
"native": "Générique",
"system": "Systéme {name}"
}
},
"hint": "Choisissez qui fournit les informations de vitesse pour les jetons lors de la coloration. Drag Ruler propose un fournisseur de vitesse générique qui offre une fonctionnalité de base qui devrait fonctionner pour tous les systèmes de jeu s'il est correctement configuré. D'autres fournisseurs de vitesse peuvent être mis à disposition par les systèmes de jeu et les modules installés. Le choix d'un fournisseur de vitesse différent du fournisseur de vitesse générique peut offrir une meilleure intégration des règles du système de jeu que vous utilisez. Les options ci-dessous dépendent du fournisseur de vitesse sélectionné ici."
}
},
"useGridlessRaster": {
"name": "Use speed based snapping",
"hint": "On Gridless scenes, this makes tokens snap to the token's speed ranges. This can be temporarily disabled by pressing Shift during drag."
"name": "Utilise l'interruption basée sur la vitesse",
"hint": "Sur des scènes sans grilles, cela permet aux jetons de s'interrompre à la portée de leur vitesse. Cela peut être temporairement désactivé en pressant Shift en faisant glisser."
}
}
}
+121
View File
@@ -0,0 +1,121 @@
{
"drag-ruler": {
"dependencies": {
"ok": "Ok",
"terrain-ruler": {
"neverShowAgain": "Nunca mostre isso de novo",
"title": "Como medir terrenos difíceis com o Drag Ruler",
"text": "Você tem o módulo {moduleName} habilitado. Drag Ruler é capaz de medir terreno difícil que foi colocado para baixo usando esse módulo. Para tornar isto possível, Drag Ruler utiliza o módulo Terrain Ruler. Se o Terrain Ruler for instalado e ativado, o Drag Ruler começará automaticamente a respeitar o terreno difícil em suas medições."
},
"socketlib": {
"title": "Módulo Socketlib ausente",
"text": "Drag Ruler requer que o módulo socketlib funcione corretamente. Por favor, ative o módulo socketlib neste mundo."
}
},
"resetMovementHistory": "Redefinir histórico de movimento",
"genericSpeedProvider": {
"settings": {
"dashMultiplier": {
"name": "Traço Multiplicador",
"hint": "Isso pode ser usado para dar aos tokens uma velocidade secundária durante a coloração do caminho medido. Defina-o como 0 para desativar a velocidade secundária."
},
"speedAttribute": {
"name": "Atributo de velocidade",
"hint": "O atributo que define a velocidade de caminhada de um token. Isso é usado durante a coloração do caminho medido."
}
},
"speeds": {
"walk": "andar",
"dash": "traço"
}
},
"keybindings": {
"cancelDrag": "Cancelar o arrasto",
"disableSnap": {
"name": "Desativar encaixe",
"hint": "O encaixe será desativado temporariamente enquanto esta tecla estiver pressionada."
},
"createWaypoint": "Criar parada",
"deleteWaypoint": "Apagar parada",
"togglePathfinding": {
"name": "Alternar localização de caminhos",
"hint": "Ao ser segurado enquanto arrasta um token, a funcionalidade de localização de caminhos será temporariamente habilitada/desabilitada."
},
"moveWithoutAnimation": {
"name": "Desativar animação de token",
"hint": "Ao ser segurado ao soltar um token, o token se moverá para o local de destino sem animação."
}
},
"settings": {
"allowPathfinding": {
"name": "Permitir localização de caminhos para jogadores",
"hint": "Permite que os jogadores usem a funcionalidade de localização de caminhos do Drag Ruler neste mundo. Esteja ciente de que a localização de caminhos pode passar por uma névoa de guerra inexplorada e paredes etéreas, que podem revelar segredos para seus jogadores antes do tempo."
},
"alwaysShowSpeedForPCs": {
"name": "Mostre a velocidade do PJ para todos",
"hint": "Se ativado, a coloração baseada na velocidade do ator para os personagens dos jogadores será mostrada a todos, mesmo que eles não tenham permissão de observador para a ficha de personagem."
},
"autoStartMeasurement": {
"name": "Iniciar a medição automaticamente",
"hint": "Se ativado, Drag Ruler começará a medir assim que o token estiver sendo arrastado. Se desativado, o Drag Ruler permanecerá inativo e só começará a medir quando o botão para adicionar uma parada for pressionado."
},
"autoPathfinding": {
"hint": "Se ativado, arrastar um token usará automaticamente uma régua de localização de caminho.",
"name": "localização de caminho por padrão"
},
"enableMovementHistory": {
"name": "Habilitar histórico de movimento durante o combate",
"hint": "Se ativado, o Drag Ruler lembrará o caminho que um token percorreu durante seu turno em combate e o exibirá quando você pegar o token de volta."
},
"rightClickAction": {
"name": "Ação do botão direito",
"hint": "Que ação deve ser executada ao clicar com o botão direito do mouse enquanto arrasta um token?",
"choices": {
"create": "Criar parada",
"delete": "Apagar parada",
"cancel": "Cancelar arrasto"
}
},
"showGMRulerToPlayers": {
"name": "Mostrar régua do GM aos jogadores",
"hint": "Se desativado, o governante dos GMs não será exibido para jogadores não-GM."
},
"speedProviderSettings": {
"name": "Configurações do provedor de velocidade",
"button": "Configurações do provedor de velocidade",
"windowTitle": "Configurações do provedor de velocidade",
"headers": {
"speedProvider": "Provedor de velocidade",
"speedProviderSettings": "Configurações específicas do provedor de velocidade"
},
"activeProvider": {
"name": "Provedor de velocidade ativo",
"hint": "As configurações mostradas abaixo dependem do provedor de velocidade ativo. Se o GM selecionar um provedor de velocidade diferente, as configurações disponíveis podem mudar."
},
"noSettings": "Este provedor de velocidade não oferece nenhuma opção de configuração.",
"color": {
"name": "Cor para {colorName}",
"hint": "A cor que será usada para colorir os quadrados que estão dentro do intervalo {colorName}.",
"unreachable": {
"name": "inacessível",
"hint": "A cor dos espaços que não podem ser acessados pelo token arrastado."
}
},
"speedProvider": {
"name": "Provedor de configurações de velocidade",
"hint": "Selecione quem fornece informações de velocidade para tokens durante a coloração. Drag Ruler oferece um provedor de velocidade genérico que fornece funcionalidade básica e deve funcionar para todos os sistemas de jogo se configurado corretamente. Mais provedores de velocidade podem ser disponibilizados por meio de sistemas de jogos e módulos instalados. Selecionar um provedor de velocidade diferente do provedor de velocidade genérico pode oferecer uma melhor integração com as regras do sistema de jogo que você está usando. As opções abaixo dependem do provedor de velocidade selecionado aqui.",
"choices": {
"module": "Módulo {name}",
"native": "Genérico",
"system": "Sistema {name}"
}
},
"hint": "As configurações do provedor de velocidade contêm todas as configurações específicas do sistema de jogo."
},
"useGridlessRaster": {
"name": "Use o ajuste baseado em velocidade",
"hint": "Em cenas Gridless, isso faz com que os tokens se encaixem nas faixas de velocidade do token."
}
}
}
}
+121
View File
@@ -0,0 +1,121 @@
{
"drag-ruler": {
"dependencies": {
"ok": "OK",
"terrain-ruler": {
"title": "Drag Ruler 如何测量困难地形",
"text": "你已启用 {moduleName}。Drag Ruler 可以使用此模组测量放置的困难地形。为此,Drag Ruler 将使用 Terrain Ruler 模组。如果已经安装并启用了 Terrain RulerDrag Ruler 将自动开始在测量中反映困难地形的结果。",
"neverShowAgain": "不再显示此条"
},
"socketlib": {
"title": "Socketlib 模组未安装/启用",
"text": "Drag Ruler 依赖于 socketlib 模组以正常运行。请在该世界中激活 socketlib 模组。"
}
},
"resetMovementHistory": "重置移动历史",
"settings": {
"alwaysShowSpeedForPCs": {
"name": "向所有人展示 PC 的速度",
"hint": "启用后,基于 PC 速度的着色将会展示给所有人,即使并未对该角色有观察权限。"
},
"speedProviderSettings": {
"speedProvider": {
"choices": {
"native": "通用",
"system": "系统 {name}",
"module": "模组 {name}"
},
"name": "速度设置提供方",
"hint": "选择指示物移动着色时,速度信息的提供方。Drag Ruler 自带通用的速度提供方,提供基础功能并且在配置正确时,应对所有游戏系统都有效。游戏系统和安装的模组可能会提供可用的新速度提供方。选择其他速度提供方替换通用速度提供方可能会与正在使用的游戏系统的规则整合得更好。下列的选项依赖于此处选择的速度提供方。"
},
"name": "速度提供方设置",
"hint": "速度提供方设置内包含了所有游戏系统相关的设置。",
"button": "速度提供方设置",
"windowTitle": "速度提供方设置",
"headers": {
"speedProvider": "速度提供",
"speedProviderSettings": "速度提供方特定设置"
},
"activeProvider": {
"name": "激活的速度提供方",
"hint": "下方显示的此设置依赖于一个激活的速度提供方。如果 GM 选择了其他的速度提供方,可用的设置项可能会改变。"
},
"noSettings": "此速度提供方并不提供任何配置项。",
"color": {
"name": "颜色 {colorName}",
"hint": "将在 {colorName} 范围内的色彩格子内使用的颜色。",
"unreachable": {
"name": "不可抵达",
"hint": "拖拽指示物时显示的不可抵达的格子的颜色。"
}
}
},
"useGridlessRaster": {
"name": "使用基于速度的吸附",
"hint": "在无网格场景中,这使得指示物吸附至其速度范围。"
},
"allowPathfinding": {
"name": "允许玩家寻路",
"hint": "允许玩家在此世界中使用Drag Ruler的寻路功能。注意寻路可能经过未探索的战争迷雾和虚体墙,这可能提前向玩家暴露秘密。"
},
"autoStartMeasurement": {
"name": "自动测量",
"hint": "如果启用此选项,在你拖动棋子时标尺会自动显示,如果禁用,拖动棋子时将不会启用标尺,仅在按下显示路径按钮时显示。"
},
"autoPathfinding": {
"name": "默认寻路",
"hint": "若启用,拖动指示物会自动使用寻路标尺。"
},
"enableMovementHistory": {
"name": "在战斗时启用移动历史",
"hint": "启用后,Drag Ruler 将会记住指示物在战斗中其回合内行经的路径,并且会在拉起指示物时显示。"
},
"rightClickAction": {
"name": "右键点击动作",
"hint": "拖动指示物时点击右键应该执行什么动作?",
"choices": {
"create": "创建路径点",
"delete": "删除路径点",
"cancel": "取消拖动"
}
},
"showGMRulerToPlayers": {
"name": "向玩家展示 GM 尺子",
"hint": "禁用后,GM 的测量尺将不会向非 GM 玩家展示。"
}
},
"genericSpeedProvider": {
"settings": {
"dashMultiplier": {
"name": "疾跑倍数",
"hint": "此项可以赋予测量路径着色的指示物第二速度显示。将此项设置为 0 以禁用第二速度。"
},
"speedAttribute": {
"name": "速度字段",
"hint": "该字段定义了指示物的步行速度,用于测量路径的着色。"
}
},
"speeds": {
"walk": "步行",
"dash": "疾跑"
}
},
"keybindings": {
"cancelDrag": "取消拖动",
"createWaypoint": "创建路径点",
"deleteWaypoint": "删除路径点",
"disableSnap": {
"name": "禁用吸附",
"hint": "按下此键时吸附会被暂时禁用。"
},
"moveWithoutAnimation": {
"name": "禁用指示物动画",
"hint": "放置指示物时按住,则指示物将直接移动至目标地点。"
},
"togglePathfinding": {
"name": "寻路开关",
"hint": "拖动指示物时按住,寻路功能便会暂时启用/禁用。"
}
}
}
}
+12 -2
View File
@@ -2,7 +2,7 @@
"id": "drag-ruler",
"title": "Drag Ruler",
"description": "When dragging a token displays a ruler showing how far you've moved that token.",
"version": "1.13.0",
"version": "1.13.4",
"compatibility": {
"minimum": "10",
"verified": "10"
@@ -57,6 +57,16 @@
"lang": "zh-tw",
"name": "正體中文",
"path": "lang/zh-tw.json"
},
{
"lang": "cn",
"name": "中文(简体)",
"path": "lang/zh_Hans.json"
},
{
"lang": "pt-BR",
"name": "Português (Brasil)",
"path": "lang/pt_BR.json"
}
],
"relationships": {
@@ -70,7 +80,7 @@
},
"socket": true,
"url": "https://github.com/manuelVo/foundryvtt-drag-ruler",
"download": "https://github.com/manuelVo/foundryvtt-drag-ruler/archive/v1.13.0.zip",
"download": "https://github.com/manuelVo/foundryvtt-drag-ruler/archive/v1.13.4.zip",
"manifest": "https://raw.githubusercontent.com/manuelVo/foundryvtt-drag-ruler/master/module.json",
"readme": "https://github.com/manuelVo/foundryvtt-drag-ruler/blob/master/README.md",
"changelog": "https://github.com/manuelVo/foundryvtt-drag-ruler/blob/master/CHANGELOG.md",
+1 -1
View File
@@ -150,7 +150,7 @@ export function buildCostFunction(token, shape) {
return (x, y, costOptions = {}) => {
costOptions.token = token;
const area = getAreaFromPositionAndShape({x, y}, shape);
const costs = area.map(space => canvas.terrain.cost({x: space.x, y: space.y, costOptions}));
const costs = area.map(space => canvas.terrain.cost({x: space.x, y: space.y}, costOptions));
return costs.reduce((max, current) => Math.max(max, current));
};
}
-5
View File
@@ -2,11 +2,6 @@ import {buildCostFunction} from "./api.js";
import {settingsKey} from "./settings.js";
import {highlightTokenShape} from "./util.js";
export function getHexSizeSupportTokenGridCenter(token) {
const tokenCenterOffset = CONFIG.hexSizeSupport.getCenterOffset(token);
return {x: token.x + tokenCenterOffset.x, y: token.y + tokenCenterOffset.y};
}
export function highlightMeasurementTerrainRuler(
ray,
startDistance,
+5 -5
View File
@@ -10,7 +10,7 @@
*/
export function findVertexSnapPoint(x, y, altOrientationFlag) {
const grid = canvas.grid.grid;
if (grid.columns) {
if (grid.columnar) {
return findSnapPointCols(x, y, grid.h, grid.w, altOrientationFlag);
} else {
return findSnapPointRows(x, y, grid.h, grid.w, altOrientationFlag);
@@ -59,11 +59,11 @@ function findSnapPointCols(x, y, h, w, alt) {
yOffset = -0.5;
}
let xOffset1 = 0.25;
let xOffset2 = 1.0;
let xOffset1 = 0.75;
let xOffset2 = 0.0;
if (alt) {
xOffset1 = 0.75;
xOffset2 = 0.0;
xOffset1 = 0.25;
xOffset2 = 1.0;
}
let row1 = calculateSnapPointsCols(x, y, h, w, xOffset1, 0.5 + yOffset);
+4 -11
View File
@@ -8,7 +8,7 @@ import {
registerModule,
registerSystem,
} from "./api.js";
import {checkDependencies, getHexSizeSupportTokenGridCenter} from "./compatibility.js";
import {checkDependencies} from "./compatibility.js";
import {moveEntities, onMouseMove} from "./foundry_imports.js";
import {disableSnap, registerKeybindings} from "./keybindings.js";
import {libWrapper} from "./libwrapper_shim.js";
@@ -18,7 +18,7 @@ import {extendRuler} from "./ruler.js";
import {registerSettings, RightClickAction, settingsKey} from "./settings.js";
import {recalculate} from "./socket.js";
import {SpeedProvider} from "./speed_provider.js";
import {setSnapParameterOnOptions} from "./util.js";
import {getEntityCenter, setSnapParameterOnOptions} from "./util.js";
CONFIG.debug.dragRuler = false;
export let debugGraphics = undefined;
@@ -39,6 +39,7 @@ Hooks.once("init", () => {
extendRuler();
window.dragRuler = {
getRangesFromSpeedProvider,
getColorForDistanceAndToken,
getMovedDistanceFromToken,
registerModule,
@@ -135,15 +136,7 @@ function onEntityLeftDragStart(wrapped, event) {
const isToken = this instanceof Token;
const ruler = canvas.controls.ruler;
ruler.draggedEntity = this;
let entityCenter;
if (
isToken &&
canvas.grid.isHex &&
game.modules.get("hex-size-support")?.active &&
CONFIG.hexSizeSupport.getAltSnappingFlag(this)
)
entityCenter = getHexSizeSupportTokenGridCenter(this);
else entityCenter = this.center;
const entityCenter = getEntityCenter(this);
ruler.rulerOffset = {
x: entityCenter.x - event.data.origin.x,
y: entityCenter.y - event.data.origin.y,
+8 -8
View File
@@ -4,13 +4,13 @@ import {getTokenShape, isClose, zip} from "./util.js";
function initTrackingFlag(combatant) {
const initialFlag = {passedWaypoints: [], trackedRound: 0};
let dragRulerFlag = combatant.data.flags.dragRuler;
let dragRulerFlag = combatant.flags.dragRuler;
if (dragRulerFlag) {
if (isNaN(dragRulerFlag.trackedRound)) {
mergeObject(dragRulerFlag, initialFlag);
}
} else {
combatant.data.flags.dragRuler = initialFlag;
combatant.flags.dragRuler = initialFlag;
}
}
@@ -40,14 +40,14 @@ function calculateUpdate(combat, token, rays) {
if (!combatant) return;
// Check if we have entered a new round. If so, remove the currently stored path
if (combat.data.round > combatant.data.flags.dragRuler.trackedRound) {
combatant.data.flags.dragRuler.passedWaypoints = [];
combatant.data.flags.dragRuler.trackedRound = combat.data.round;
if (combat.round > combatant.flags.dragRuler.trackedRound) {
combatant.flags.dragRuler.passedWaypoints = [];
combatant.flags.dragRuler.trackedRound = combat.round;
}
// Add the passed waypoints to the combatant
const terrainRulerAvailable = game.modules.get("terrain-ruler")?.active;
const dragRulerFlags = combatant.data.flags.dragRuler;
const dragRulerFlags = combatant.flags.dragRuler;
const waypoints = dragRulerFlags.passedWaypoints;
for (const ray of rays) {
// Ignore rays that have the same start and end coordinates
@@ -88,13 +88,13 @@ export async function removeLastHistoryEntryIfAt(token, x, y) {
const combat = game.combat;
const combatant = combat.getCombatantByToken(token.id);
await updateCombatantDragRulerFlags(combat, [
{_id: combatant.id, dragRulerFlags: combatant.data.flags.dragRuler},
{_id: combatant.id, dragRulerFlags: combatant.flags.dragRuler},
]);
}
export async function resetMovementHistory(combat, combatantId) {
const combatant = combat.combatants.get(combatantId);
const dragRulerFlags = combatant.data.flags.dragRuler;
const dragRulerFlags = combatant.flags.dragRuler;
if (!dragRulerFlags) return;
dragRulerFlags.passedWaypoints = null;
dragRulerFlags.trackedRound = null;
+4 -15
View File
@@ -3,11 +3,7 @@ import {
getColorForDistanceAndToken,
getRangesFromSpeedProvider,
} from "./api.js";
import {
getHexSizeSupportTokenGridCenter,
highlightMeasurementTerrainRuler,
measureDistances,
} from "./compatibility.js";
import {highlightMeasurementTerrainRuler, measureDistances} from "./compatibility.js";
import {getGridPositionFromPixelsObj, getPixelsFromGridPositionObj} from "./foundry_fixes.js";
import {cancelScheduledMeasurement, highlightMeasurementNative} from "./foundry_imports.js";
import {disableSnap} from "./keybindings.js";
@@ -17,6 +13,7 @@ import {
applyTokenSizeOffset,
getSnapPointForEntity,
getSnapPointForTokenObj,
getEntityCenter,
getTokenShape,
isPathfindingEnabled,
} from "./util.js";
@@ -460,7 +457,7 @@ export function extendRuler() {
// If this is a pc and alwaysShowSpeedForPCs is enabled we show the color anyway
if (
!(
this.draggedEntity.actor.data.type === "character" &&
this.draggedEntity.actor.type === "character" &&
game.settings.get(settingsKey, "alwaysShowSpeedForPCs")
)
)
@@ -482,15 +479,7 @@ export function extendRuler() {
const ruler = canvas.controls.ruler;
ruler.clear();
ruler._state = Ruler.STATES.STARTING;
let entityCenter;
if (
isToken &&
canvas.grid.isHex &&
game.modules.get("hex-size-support")?.active &&
CONFIG.hexSizeSupport.getAltSnappingFlag(entity)
)
entityCenter = getHexSizeSupportTokenGridCenter(entity);
else entityCenter = entity.center;
const entityCenter = getEntityCenter(this.draggedEntity);
if (isToken && game.settings.get(settingsKey, "enableMovementHistory"))
ruler.dragRulerAddWaypointHistory(getMovementHistory(entity));
ruler.dragRulerAddWaypoint(entityCenter, {snap: false});
+2 -2
View File
@@ -176,9 +176,9 @@ class SpeedProviderSettings extends FormApplication {
} else {
let name;
if (type === "module") {
name = game.modules.get(id).data.title;
name = game.modules.get(id).title;
} else {
name = game.system.data.title;
name = game.system.title;
}
provider.selectTitle = game.i18n.format(
`drag-ruler.settings.speedProviderSettings.speedProvider.choices.${type}`,
+102 -92
View File
@@ -27,83 +27,101 @@ export function sum(arr) {
return arr.reduce((a, b) => a + b, 0);
}
export function buildSnapPointTokenData(token) {
const tokenData = {
width: token.document.width,
height: token.document.height,
};
if (isModuleActive("hex-size-support")) {
tokenData.hexSizeSupport = {};
tokenData.hexSizeSupport.altSnappingFlag = CONFIG.hexSizeSupport.getAltSnappingFlag(token);
tokenData.hexSizeSupport.altOrientationFlag =
CONFIG.hexSizeSupport.getAltOrientationFlag(token);
tokenData.hexSizeSupport.borderSize = token.document.getFlag("hex-size-support", "borderSize");
// A copy of this function lives in the routinglib module
export function getHexTokenSize(token) {
const size = token.document.width;
if (token.document.height !== size) {
return 1;
}
return tokenData;
return size;
}
export function getSnapPointForToken(x, y, token) {
return getSnapPointForTokenData(x, y, buildSnapPointTokenData(token));
export function getEntityCenter(token) {
if (token instanceof Token && canvas.grid.isHex) {
const center = token.center;
const size = getHexTokenSize(token);
if (size % 2 === 0) {
let offset;
if (canvas.grid.grid.columnar) {
offset = canvas.grid.grid.w - canvas.grid.grid.h;
} else {
offset = canvas.grid.grid.h - canvas.grid.grid.w;
}
if (getAltOrientationFlagForToken(token, size)) {
offset *= -1;
}
if (canvas.grid.grid.columnar) {
center.x -= offset;
return center;
} else {
center.y -= offset;
return center;
}
}
}
return token.center;
}
export function getSnapPointForTokenDataObj(pos, tokenData) {
return getSnapPointForTokenData(pos.x, pos.y, tokenData);
// A copy of this function lives in the routinglib module
export function getAltOrientationFlagForToken(token, size) {
const hexSizeSupport = game.modules.get("hex-size-support")?.api;
if (hexSizeSupport) {
return hexSizeSupport.isAltOrientation(token);
}
// In native foundry, tokens of size 2 are oriented like the "alt orientation" from hex-size-support
// Tokens of size 4 are oriented like alt orientation wasn't set
return size === 2;
}
// A copy of this function lives in the librouting module
function getSnapPointForTokenData(x, y, tokenData) {
export function getSnapPointForToken(x, y, token) {
if (canvas.grid.type === CONST.GRID_TYPES.GRIDLESS) {
return new PIXI.Point(x, y);
return {x, y};
}
if (canvas.grid.isHex) {
if (tokenData.hexSizeSupport?.altSnappingFlag) {
if (tokenData.hexSizeSupport.borderSize % 2 === 0) {
const snapPoint = findVertexSnapPoint(x, y, tokenData.hexSizeSupport.altOrientationFlag);
return new PIXI.Point(snapPoint.x, snapPoint.y);
} else {
return new PIXI.Point(...canvas.grid.getCenter(x, y));
}
} else {
return new PIXI.Point(...canvas.grid.getCenter(x, y));
const size = getHexTokenSize(token);
if (size % 2 === 0) {
return findVertexSnapPoint(x, y, getAltOrientationFlagForToken(token, size));
}
const [snapX, snapY] = canvas.grid.getCenter(x, y);
return {x: snapX, y: snapY};
}
const [topLeftX, topLeftY] = canvas.grid.getTopLeft(x, y);
let cellX, cellY;
if (tokenData.width % 2 === 0) cellX = x - canvas.grid.h / 2;
if (token.document.width % 2 === 0) cellX = x - canvas.grid.h / 2;
else cellX = x;
if (tokenData.height % 2 === 0) cellY = y - canvas.grid.h / 2;
if (token.document.height % 2 === 0) cellY = y - canvas.grid.h / 2;
else cellY = y;
const [centerX, centerY] = canvas.grid.getCenter(cellX, cellY);
let snapX, snapY;
// Tiny tokens can snap to the cells corners
if (tokenData.width <= 0.5) {
if (token.document.width <= 0.5) {
const offsetX = x - topLeftX;
const subGridWidth = Math.floor(canvas.grid.w / 2);
const subGridPosX = Math.floor(offsetX / subGridWidth);
snapX = topLeftX + (subGridPosX + 0.5) * subGridWidth;
}
// Tokens with odd multipliers (1x1, 3x3, ...) and tokens smaller than 1x1 but bigger than 0.5x0.5 snap to the center of the grid cell
else if (Math.round(tokenData.width) % 2 === 1 || tokenData.width < 1) {
else if (Math.round(token.document.width) % 2 === 1 || token.document.width < 1) {
snapX = centerX;
}
// All remaining tokens (those with even or fractional multipliers on square grids) snap to the intersection points of the grid
else {
snapX = centerX + canvas.grid.w / 2;
}
if (tokenData.height <= 0.5) {
if (token.document.height <= 0.5) {
const offsetY = y - topLeftY;
const subGridHeight = Math.floor(canvas.grid.h / 2);
const subGridPosY = Math.floor(offsetY / subGridHeight);
snapY = topLeftY + (subGridPosY + 0.5) * subGridHeight;
} else if (Math.round(tokenData.height) % 2 === 1 || tokenData.height < 1) {
} else if (Math.round(token.document.height) % 2 === 1 || token.document.height < 1) {
snapY = centerY;
} else {
snapY = centerY + canvas.grid.h / 2;
}
return new PIXI.Point(snapX, snapY);
return {x: snapX, y: snapY};
}
export function getSnapPointForTokenObj(pos, token) {
@@ -141,7 +159,7 @@ export function getAreaFromPositionAndShape(position, shape) {
let shiftedRow;
if (canvas.grid.grid.options.even) shiftedRow = 1;
else shiftedRow = 0;
if (canvas.grid.grid.options.columns) {
if (canvas.grid.grid.columnar) {
if (space.x % 2 !== 0 && position.x % 2 !== shiftedRow) {
y += 1;
}
@@ -155,67 +173,61 @@ export function getAreaFromPositionAndShape(position, shape) {
});
}
// A copy of this function lives in the routinglib module
export function getTokenShape(token) {
return getTokenShapeForTokenData(buildSnapPointTokenData(token), token.scene);
}
export function getTokenShapeForTokenData(tokenData, scene = canvas.scene) {
let scene = canvas.scene;
if (scene.grid.type === CONST.GRID_TYPES.GRIDLESS) {
return [{x: 0, y: 0}];
} else if (scene.grid.type === CONST.GRID_TYPES.SQUARE) {
const topOffset = -Math.floor(tokenData.height / 2);
const leftOffset = -Math.floor(tokenData.width / 2);
const topOffset = -Math.floor(token.document.height / 2);
const leftOffset = -Math.floor(token.document.width / 2);
const shape = [];
for (let y = 0; y < tokenData.height; y++) {
for (let x = 0; x < tokenData.width; x++) {
for (let y = 0; y < token.document.height; y++) {
for (let x = 0; x < token.document.width; x++) {
shape.push({x: x + leftOffset, y: y + topOffset});
}
}
return shape;
} else {
// Hex grids
if (game.modules.get("hex-size-support")?.active && tokenData.hexSizeSupport.altSnappingFlag) {
const borderSize = tokenData.hexSizeSupport.borderSize;
let shape = [{x: 0, y: 0}];
if (borderSize >= 2)
shape = shape.concat([
{x: 0, y: -1},
{x: -1, y: -1},
]);
if (borderSize >= 3)
shape = shape.concat([
{x: 0, y: 1},
{x: -1, y: 1},
{x: -1, y: 0},
{x: 1, y: 0},
]);
if (borderSize >= 4)
shape = shape.concat([
{x: -2, y: -1},
{x: 1, y: -1},
{x: -1, y: -2},
{x: 0, y: -2},
{x: 1, y: -2},
]);
const size = getHexTokenSize(token);
let shape = [{x: 0, y: 0}];
if (size >= 2)
shape = shape.concat([
{x: 0, y: -1},
{x: -1, y: -1},
]);
if (size >= 3)
shape = shape.concat([
{x: 0, y: 1},
{x: -1, y: 1},
{x: -1, y: 0},
{x: 1, y: 0},
]);
if (size >= 4)
shape = shape.concat([
{x: -2, y: -1},
{x: 1, y: -1},
{x: -1, y: -2},
{x: 0, y: -2},
{x: 1, y: -2},
]);
if (Boolean(tokenData.hexSizeSupport.altOrientationFlag) !== canvas.grid.grid.options.columns)
shape.forEach(space => (space.y *= -1));
if (canvas.grid.grid.options.columns)
shape = shape.map(space => {
return {x: space.y, y: space.x};
});
return shape;
} else {
return [{x: 0, y: 0}];
if (getAltOrientationFlagForToken(token, size)) {
shape.forEach(space => (space.y *= -1));
}
if (canvas.grid.grid.columnar)
shape = shape.map(space => {
return {x: space.y, y: space.x};
});
return shape;
}
}
export function getTokenSize(token) {
let w, h;
const hexSizeSupportBorderSize = token.document.flags["hex-size-support"]?.borderSize;
if (hexSizeSupportBorderSize > 0) {
w = h = hexSizeSupportBorderSize;
if (canvas.grid.isHex) {
w = h = getHexTokenSize(token);
} else {
w = token.document.width;
h = token.document.height;
@@ -233,18 +245,16 @@ export function applyTokenSizeOffset(waypoints, token) {
const tokenSize = getTokenSize(token);
const waypointOffset = {x: 0, y: 0};
if (canvas.grid.isHex) {
if (game.modules.get("hex-size-support")?.active) {
const isAltOrientation = CONFIG.hexSizeSupport.getAltOrientationFlag(token);
if (canvas.grid.grid.options.columns) {
if (tokenSize.w % 2 === 0) {
waypointOffset.x = canvas.grid.w / 2;
if (!isAltOrientation) waypointOffset.x *= -1;
}
} else {
if (tokenSize.h % 2 === 0) {
waypointOffset.y = canvas.grid.h / 2;
if (isAltOrientation) waypointOffset.y *= -1;
}
const isAltOrientation = getAltOrientationFlagForToken(token, getHexTokenSize(token));
if (canvas.grid.grid.columnar) {
if (tokenSize.w % 2 === 0) {
waypointOffset.x = canvas.grid.w / 2;
if (isAltOrientation) waypointOffset.x *= -1;
}
} else {
if (tokenSize.h % 2 === 0) {
waypointOffset.y = canvas.grid.h / 2;
if (isAltOrientation) waypointOffset.y *= -1;
}
}
// If hex size support isn't active leave the waypoints like they are