elif (inputClass.getData1() == self.SAIL_DOGOTO) :
activePlayer = gc.getPlayer(gc.getGame().getActivePlayer())
transport = activePlayer.getUnit(inputClass.getData2())
index = inputClass.getID()
if (inputClass.getFunctionName() == "DialogSelection") :
if (not transport.isNone()) and transport.getUnitTravelState() != UnitTravelStates.UNIT_TRAVEL_STATE_FROM_EUROPE:
if index == 0: #sail East
CyMessageControl().sendDoCommand(inputClass.getDat a2(), CommandTypes.COMMAND_SAIL_TO_EUROPE, UnitTravelStates.UNIT_TRAVEL_STATE_FROM_EUROPE, self.EUROPE_EAST, false)
if index == 1: #sail West
CyMessageControl().sendDoCommand(inputClass.getDat a2(), CommandTypes.COMMAND_SAIL_TO_EUROPE, UnitTravelStates.UNIT_TRAVEL_STATE_FROM_EUROPE, self.EUROPE_WEST, false)
if index == 2: #sail North
CyMessageControl().sendDoCommand(inputClass.getDat a2(), CommandTypes.COMMAND_SAIL_TO_EUROPE, UnitTravelStates.UNIT_TRAVEL_STATE_FROM_EUROPE, self.EUROPE_NORTH, false)
if index == 3: #sail South
CyMessageControl().sendDoCommand(inputClass.getDat a2(), CommandTypes.COMMAND_SAIL_TO_EUROPE, UnitTravelStates.UNIT_TRAVEL_STATE_FROM_EUROPE, self.EUROPE_SOUTH, false)
if index == 4: #Cancel
self.hideDialogBox(index)
self.hideDialogBox(index)
Enfin, il a fallu programmer la boite de dialogue à proprement parler (tout à la fin):
Spoiler
def dialogBox(self, iUnit, dialogHeader, textMessage, callButton):
screen = self.getScreen()
player = gc.getPlayer(gc.getGame().getActivePlayer())
transport = player.getUnit(iUnit)
Dernière choses. Il me semble que la génération de carte est codé en python (cf. A_New_World.py et Caribbean.py). Donc je pense qu'il serait souhaitable d'y jeter un coup d'œil. D'autant que cela me permettrait sans doute de générer des cases "vent" ! Par contre, ça m'inquiète un peu pour vos modifications de DoNE. Autant mon fichier sur l'écran européen peut facilement être copie dans le répertoire contenant DoNE, autant là je crains que les modifications en C et en python se chevauchent (je pense à la distance entre la terre et les cases Europe qui a été modifiée dans DoNE)
En effet, j'ai changé la distance des terres dans DoaNE (tu as découvert mon secret ). Malheureusement pour nous la génération de cartes se fait en c++ et en python, cependant il me semble que les changements que tu signales sont dans mon domaine de compétence (je pense à l'ajout de cases de types océans etc...).
Pour un un petit exemple en C++ cette fonction permet de générer les cases Europe dans le jeu.
Spoiler
Code:
void CvMapGenerator::addEurope()
{
PROFILE_FUNC();
gDLL->NiTextOut("Adding Europe...");
for (int iEurope = 0; iEurope < GC.getNumEuropeInfos(); ++iEurope)
{
EuropeTypes eEurope = (EuropeTypes) iEurope;
CvEuropeInfo& kEurope = GC.getEuropeInfo(eEurope);
int iWidthPercent = kEurope.getWidthPercent();
gDLL->getPythonIFace()->pythonGetEuropeWidthPercent(eEurope, &iWidthPercent);
//int iMinLandDistance = 6;
int iMinLandDistance = kEurope.getMinLandDistance();
gDLL->getPythonIFace()->pythonGetEuropeMinLandDistance(eEurope, &iMinLandDistance);
//try several times until at least one start europe is found
bool bAnyEuropeFound = false;
for ( ; iMinLandDistance >= 0 && !bAnyEuropeFound; iMinLandDistance--)
{
for (int i = 0; i < GC.getMapINLINE().numPlotsINLINE(); ++i)
{
CvPlot* pPlot = GC.getMapINLINE().plotByIndexINLINE(i);
if (pPlot->isWater() && !pPlot->isEurope())
{
bool bEurope = false;
switch (kEurope.getCardinalDirection())
{
case CARDINALDIRECTION_EAST:
bEurope = (pPlot->getX_INLINE() > (100 - iWidthPercent) * GC.getMapINLINE().getGridWidthINLINE() / 100);
break;
case CARDINALDIRECTION_WEST:
bEurope = (pPlot->getX_INLINE() < iWidthPercent * GC.getMapINLINE().getGridWidthINLINE() / 100);
break;
case CARDINALDIRECTION_NORTH:
bEurope = (pPlot->getY_INLINE() > (100 - iWidthPercent) * GC.getMapINLINE().getGridHeightINLINE() / 100);
break;
case CARDINALDIRECTION_SOUTH:
bEurope = (pPlot->getY_INLINE() < iWidthPercent * GC.getMapINLINE().getGridHeightINLINE() / 100);
break;
default:
FAssertMsg(false, "Invalid direction");
break;
}
for (int i = -iMinLandDistance; i <= iMinLandDistance && bEurope; i++)
{
for (int j = -iMinLandDistance; j <= iMinLandDistance && bEurope; j++)
{
CvPlot* pLoopPlot = ::plotXY(pPlot->getX_INLINE(), pPlot->getY_INLINE(), i, j);
if (pLoopPlot != NULL)
{
if (!pLoopPlot->isWater())
{
bEurope = false;
}
}
}
}
if (bEurope)
{
if (pPlot->getFeatureType() != NO_FEATURE && GC.getFeatureInfo(pPlot->getFeatureType()).isImpassable())
{
pPlot->setFeatureType(NO_FEATURE);
}
if (pPlot->isImpassable())
{
bEurope = false;
}
}
if (bEurope)
{
pPlot->setEurope(eEurope);
bAnyEuropeFound = true;
}
}
}
}
}
}
Voili voilou, si tu as des questions ou si tu souhaites que je fasse un truc en particulier en c++ tu me le dit .
De l'aide ? Oui, je veux bien. Merci !
Pour l'instant je vais voir ce que je peux faire avec les fichiers (je suis encore un novice en python...) et si je n'y arrive pas, je vous fais signe (à Dazio et toi)
Sinon, vous en pensez quoi des océans à deux points de mouvement ?
J'ai trouvé cela comme "parade" au 0.5 qui n'est pas un entier...
Je n'ai pas bien compris ce que tu voulais dire en parlant de
Citation:
En effet, il ne faudrait pas que ce système condamne définitivement l'usage des corsaires !
Quant aux blocs de case vent. Oui, bien sûr.
Mais c'est au générateur de carte de s'en occuper. Il faudra les générer en bloc et non pas seules. Mais du point de vue des fichiers Xml, on s'intéresse à une case ... Ou est-ce que tu voulais dire autre chose ?
Voici quelques aperçus des modifications de l'écran européen:
- un nouvelle boite de dialogue pour choisir les destinations
- on peut y acheter des colons libres, engagés ou criminels
- et même un galion de guerre ...
- les caractéristiques de terrain dont les vents !
- un corsaire qui attaque attaque un navire marchand du roi (merci l'éditeur de mondes!)
- suite au combat le corsaire a capturé une unité !
Je n'ai pas bien compris ce que tu voulais dire en parlant de
Quant aux blocs de case vent. Oui, bien sûr.
Mais c'est au générateur de carte de s'en occuper. Il faudra les générer en bloc et non pas seules. Mais du point de vue des fichiers Xml, on s'intéresse à une case ... Ou est-ce que tu voulais dire autre chose ?
C'est absolument ça !
Quant aux corsaires, il faut absolument que les vents ne soient pas la fin de leur règne par la fuite systématique des marchands.
C'est pourquoi nous avons éloigné les cases europe de 6 cases dans le même temps que nous augmentions les points de déplacement des navires.
L'aspect "vent" peut créer des problèmes. Pour le savoir, il faut tester sur des cartes avec blocs de cases vent associés aux nouveaux points de déplacement.
En fait, j'apprécierai vraiment que les océans soient beaucoup plus larges (sans pour autant diminuer les cases terres) et dans ce cas, les vents associés à de vastes espaces maritimes auraient tout leur intérêt.