flexibles Moddingsystem. Wie ist es am besten ?



  • Ich lasse eine Datei mit allen Standartgebäuden laden.
    die sieht ungf so aus:

    Building start
    set Typ = "Wirtschaft";
    set Name = "Bohrturm";
    set Upgragable = "true";
    set CostsMetall = "10";
    set ProduktionOil = "2";
    set UpgradePercentageOil = "50";
    set Time = "5";
    set TimePercentage = "50";
    Building end

    Je nach typ lasse ich einer Listbox den Namen des Gebäudes schreiben.
    Die Informationen muss ich immer wieder aufrufen.

    Mir sind dazu folgende Möglichkeiten eingefallen, die ich auch behersche:

    Klasse mit einem Haufen arrays
    Klasse mit einem Haufen Vectoren oder Deques
    Alles im Falle in Datei lesen.

    erstes und letzteres finde ich aus folgenden Gründen schlecht:

    1. Arrays sind begrenzt oder unnötig groß... Könnten theoretisch ∞ Gebäude sein
    2. Zeitlich lesen ist zu Zeitaufwändig und belastet die Festplatte zu sehr

    Würdet ihr auch Typ 2 nehmen oder was komplett anderes tun ?



  • Hallo

    Lies alles einmal zur Laufzeit aus der Datei in einen passenden Container, sei es nun ein dynamisches C-Array oder ein std::vector (ich würde zweiteres empfehlen). Beides ist weder begrenzt (außer durch den verfügbaren Arbeitsspeicher) noch unnötig groß, wenn du es richtig machst.

    bis bald
    akari



  • Wenn du viele Gebäude hast und danach dann dynamisch suchen willst (z.B. nach Typ), dann könntest du auch eine std::map<Key, Building> verwenden (Key dann entsprechend der Datentyp, z.B. std::string).

    P.S. schönes neues Wort: Upgragable -)



  • Ich bin jetzt schon weiter und hab einfach ein paar vektoren benutzt:

    class AlleGebäude
    {
    	public:
    	std::vector <std::string> BName;
    	std::vector <std::string> BTyp;
    	std::vector <std::string> BUpgradable;
    	std::vector <std::string> BCostsMetall;
    	std::vector <std::string> BCostsOil;
    	std::vector <std::string> BCostsPlutonium;
    	std::vector <std::string> BProduktionMetall;
    	std::vector <std::string> BProduktionOil;
    	std::vector <std::string> BProduktionPlutonium;
    	std::vector <std::string> BUpgradePercentageMetall;
    	std::vector <std::string> BUpgradePercentageOil;
    	std::vector <std::string> BUpgradePercentagePlutonium;
    	std::vector <std::string> BDamage;
    	std::vector <std::string> BDefense;
    	std::vector <std::string> BRunCostsMetall;
    	std::vector <std::string> BRunCostsOil;
    	std::vector <std::string> BRunCostsPlutonium;
    	std::vector <std::string> BScript;
    	std::vector <std::string> BTime;
    	std::vector <std::string> BTimePercentage;
    	public:
    	void PushArgument(String Element, String Value);
    };
    

    Bisher erfüllt das voll und ganz was ich brauche und die benutzung funktioniert hervorragend, ich hatte bisher keine Probleme.


Anmelden zum Antworten