Ich will jetzt eigentlich nur noch was an den Texturen ändern. Den Rest sehe ich jetzt als fertig an, d.h. theoretisch könntest du ab jetzt eine Integration beginnen oder es zumindest unter die Lupe nehmen.
Am EventManager habe ich auch etwas geändert, aber die bearbeiteten Abschnitte sollten sich nicht überschneiden. Wichtig für dich ist bestimmt auch noch der Umstand, dass ich den ScriptData-Wert von Feldern jetzt für ein ganzes „Python-Dict" verwende (verwenden muss!).
Das muss man im Hinterkopf haben, wenn man in CvEventManager solche Daten nutzt.
Beispielsweise steht da jetzt zum Auslesen des Szenarionamens:
Code:
sScenarioName = CvUtil.getScriptData(CyMap().plot(0, 0), ["S","t"])
Im Prinzip ist die Zeile fast selbsterklärend, aber falls nicht ist hier die (längliche) Erläuterung zur Funktionsweise:
pPlot.getScriptData() kann nun Strings (ursprüngliche Variante) wie
FirstPunicWar oder Strings von Python-Dicts, wie beispielsweise
{"S": "FirstPunicWar", "xyz": "anderer Wert" } enthalten.
Den Key "S" habe ich einfach man den Szenario-Namen zugeordnet (Liste der Zuordnungen in CvUtil.py ).
Damit man als Programmierer immer nur einen Fall/Rückgabe-Typ betrachten muss, gibt es in CvUtil die Funktion
getScriptData(...).
Übergibt man als Argument nur pPlot, so wird immer ein Dict zurück geliefert. War nur ein String enthalten, so weiß die Methode natürlich nicht welches der passende Schlüssel ist. Daher landen diese Werte immer beim „Standard-Schüssel“ "t".
Beispielsweise könnnte CvUtil.getScriptData(pPlot) die Rückgabe {"t": "FirstPunicWar"} liefern.
Um nun noch das Problem zu beheben, dass sich die gewünschten Daten (im Falle des Szenario-Namens) im Schüssel "S" oder "t" befinden könnten, besitzt getScriptData noch eine andere Form. Man kann auch die gewünschten Schüssel übergeben.
=> Die Zeile im Code-Bereich prüft also erst den "S"- und dann den "t"-Key, um den Szenarionamen zu bestimmen.
• Ich habe auch schon alle getScriptData()-Aufrufe im Code abgeändert, sofern die mit Plots zusammen hingen. Das System könnte man bei Bedarf aber auch auf die anderen Objekte mit ScriptData-Feldern (Units, Player‽) erweitern.
• Die einbuchstabigen Schüssel (hier "S" und "t") sind nat. etwas kryptisch. Ich habe mich nur dafür entschieden, um den Inhalt des Feldes möglichst kurz zu halten.