Inscrit le: 25 Fév 2014 Messages: 1175 Sujets: 167 Spécialité en worldedit: La simplicité
Posté le: 11/11/15 13:16 Sujet du message: Déplacement de côtes
Bonjour à tous, existerai-il un moyen de faire en sorte qu'un bateau ne puisse se déplacer que près des côtes ou sur les terrains terre-eau ? Il faudrait en plus que d'autres bateaux puissent s'éloigner des côtes ...
A part créer des régions partout, je ne vois vraiment pas ...
Inscrit le: 16 Oct 2015 Messages: 219 Sujets: 17 Spécialité en worldedit: Soigner les petits détails
Posté le: 11/11/15 20:15 Sujet du message:
Salut!
Je viens de tester une idée, et elle fonctionne très bien.
J'ai changé le type de mouvement d'un bateau de 'naval' à 'volant'. Ensuite, j'ai entouré l'eau peu profonde de 'bloqueur de chemin air'. Ainsi, une unité navale se déplacera sans problème sur l'eau, et une unité 'volante' ne pourra aller que sur les eaux peu profondes.
Si ta carte utilise aussi des unités volantes, peut-être peux-tu désactiver leurs collisions?
C'est un peu du bricolage, mais au moins ça fonctionne sans que ce soit trop compliqué.
//============================================================================
// Terrain API
//
native GetTerrainCliffLevel takes real x, real y returns integer
native SetWaterBaseColor takes integer red, integer green, integer blue, integer alpha returns nothing
native SetWaterDeforms takes boolean val returns nothing
native GetTerrainType takes real x, real y returns integer
native GetTerrainVariance takes real x, real y returns integer
native SetTerrainType takes real x, real y, integer terrainType, integer variation, integer area, integer shape returns nothing
native IsTerrainPathable takes real x, real y, pathingtype t returns boolean
native SetTerrainPathable takes real x, real y, pathingtype t, boolean flag returns nothing
Tu n'as pas nécessairement besoin d'utiliser le Jass, tu peux par exemple utiliser si l'éditeur de terrain ne le permet pas, un éditeur de terrain personnalisé.
Pour terrain type le GUI nous renseigne ce que c'est:
Gui:
Trigger:
Environment - Change terrain type at (Center of (Playable map area)) to Lordaeron Summer - Dirt using variation -1 in an area of size 1 and shape Circle
Le terrain type désigne le tileset à utiliser.
SetTerrainPathable permet de changer le type de chemin d'une cellule aux coordonnées spécifiées, par exemple PATHING_TYPE_WALKABILITY sert à indiquer si une unité peut marcher dessus. Ce qui est intéressant c'est qu'il s'agit d'un flag, c'est à dire qu'une cellule peut avoir plusieurs pathingtype différents de définis.
Il te faut donc choisir un type de chemin non utilisé dans ta carte (exemple amphibious), l'employer pour tes embarcations et définir le flag tout autour des côtes.
Par déclencheur tu peux le faire avec IsTerrainPathable et calculer la distance à la terre ferme ou la hauteur des fonds marins.
EDIT: J'ai fait un déclencheur de teste avec une unité amphibienne
Gui:
Trigger:
Actions
Set mapWidth = (Width of (Entire map)) Set mapHeight = (Height of (Entire map)) Set widthCellCount = (Integer((mapWidth / Largeur cellule))) Set heigthCellCount = (Integer((mapHeight / Largeur cellule))) Set mapOrigin = (Point((Min X of (Entire map)), (Min Y of (Entire map))))
For each (Integer xIndex) from 0 to widthCellCount, do (Actions)
Boucle - Actions
For each (Integer yIndex) from 0 to heigthCellCount, do (Actions)
Boucle - Actions
Set cellLocation = (mapOrigin offset by (((Real(xIndex)) x Largeur cellule), ((Real(yIndex)) x Largeur cellule)))
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
Si - Conditions
(Terrain pathing at cellLocation of type En marchant is off) Egal à FALSE (Terrain pathing at cellLocation of type Flottant is off) Egal à FALSE
Alors - Actions
Effet spécial - Create a special effect at cellLocation using DoodadsRuinsWaterSeaweed0Seaweed00.mdl Environnement - Set terrain pathing at cellLocation of type Chemin amphibie to On
Sinon - Actions
Effet spécial - Create a special effect at cellLocation using DoodadsBarrensPlantsBarrens_TreeDoodadBarrens_TreeDoodad9.mdl Environnement - Set terrain pathing at cellLocation of type Chemin amphibie to Off
Cela empêche bien l'unité d'aller dans l'eau profonde, par contre l'unité peut marcher sur terre alors que la terre a bien le flag amphibious retiré. J'en conclus que le type amphibien d'une unité lui permet de marcher sur les terrains avec le flag amphibious et walkable, le nom porte à confusion.
Tu peux rechercher avec un autre flag de chemin et trouver un qui convient, le tout est de savoir quel type de mouvement permet d'aller sur quel type de terrain. _________________
Le terrain d'une carte est stocké sur une grille composé de cellules allouée au chargement de la carte à partir des données chargées des fichiers.
Une cellule contient plusieurs données dont un flag de chemin qui nous intéresse.
Il alloue également une grille supérieure de collisions pour les doodads qui a une plus grande précision que les cellules.
Lorsqu'une unité se déplace le gestionnaire de collisions va tester les différentes couches de collision, si il en rencontre une qu'il ne peut pas traverser alors l'unité ne pourra pas la traverser:
- Vérifie les données des cellules (terrain pathing type).
- Vérifie la couche de collision des doodads.
- Vérifie la collision avec les autres objets (unités).
Ma solution c'est juste de changer la valeur de la variable de chaque cellule, cela boucle seulement sur toutes les cellules à l'initialisation, cela devrait prendre moins de 1ms.
La solution Zaitan place pleins de doodads sans réel modèle 3D qui vont modifier la couche de collision des doodads, je ne suis pas sûr de comment ils sont gérés, mais cela ne devrait normalement pas trop gêner l'exécution. Le défaut c'est que tu dois placer manuellement en faisant attention à ne pas faire de trou, et si tu modifie le terrain tu devra modifier les bloqueurs.
Il y a également la solution de modifier les fichiers de chemin qui sont chargées avec la carte (et donc générés à la sauvegarde de la carte). _________________
Vous ne pouvez pas poster de nouveaux sujets dans ce forum Vous ne pouvez pas répondre aux sujets dans ce forum Vous ne pouvez pas éditer vos messages dans ce forum Vous ne pouvez pas supprimer vos messages dans ce forum Vous ne pouvez pas voter dans les sondages de ce forum