12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118 |
- #include "Reader.h"
- #include "Spiel.h"
- #include <Datei.h>
- struct SpielerTeamStruktur
- {
- int spielerAnzahl;
- int teamAnzahl;
- Array< int > spielerFarbe;
- Array< int > teamFarbe;
- RCArray< Text > teamName;
- Array< int > teamSize;
- };
- // Konstruktor
- MapReader::MapReader(int karteId, const char* tmpPfad)
- : ReferenceCounter()
- {
- this->karteId = karteId;
- pfad = new Text(tmpPfad);
- }
- // Destruktor
- MapReader::~MapReader()
- {
- if (pfad)
- pfad->release();
- }
- Array<int>* MapReader::getSpielerFarben()
- {
- Text* pf = new Text(pfad->getText());
- pf->append("data.sts");
- Datei* datei = new Datei();
- datei->setDatei(pf);
- if (!datei->existiert() || datei->istOrdner())
- {
- datei->release();
- return 0;
- }
- int spielerAnzahl;
- int teamAnzahl;
- datei->open(Datei::Style::lesen);
- datei->lese((char*)&spielerAnzahl, 4);
- datei->lese((char*)&teamAnzahl, 4);
- Array< int >* result = new Array< int >();
- for (int i = 0; i < spielerAnzahl; i++)
- {
- int f = 0;
- datei->lese((char*)&f, 4);
- result->add(f);
- }
- datei->close();
- datei->release();
- return result;
- }
- Array<int>* MapReader::getTeamFarben()
- {
- Text* pf = new Text(pfad->getText());
- pf->append("data.sts");
- Datei* datei = new Datei();
- datei->setDatei(pf);
- if (!datei->existiert() || datei->istOrdner())
- {
- datei->release();
- return 0;
- }
- int spielerAnzahl;
- int teamAnzahl;
- datei->open(Datei::Style::lesen);
- datei->lese((char*)&spielerAnzahl, 4);
- datei->lese((char*)&teamAnzahl, 4);
- for (int i = 0; i < spielerAnzahl; i++)
- {
- int f = 0;
- datei->lese((char*)&f, 4);
- }
- Array< int >* result = new Array< int >();
- for (int i = 0; i < teamAnzahl; i++)
- {
- int f = 0;
- datei->lese((char*)&f, 4);
- result->add(f);
- }
- datei->close();
- datei->release();
- return result;
- }
- Aktion* MapReader::readAktion(StreamReader& dat)
- {
- int id;
- dat.lese((char*)&id, 4);
- char pAnz = 0;
- dat.lese(&pAnz, 1);
- RCArray< Aktion >* params = new RCArray< Aktion >();
- for (int i = 0; i < pAnz; i++)
- params->add(readAktion(dat));
- switch (id)
- {
- case BARIERE_BEWEGUNG:
- return new BariereBewegung(params);
- case BARIERE_SET_EINGESCHALTET:
- return new BariereSetEingeschaltet(params);
- case GAME_OBJEKT_SET_POSITION:
- return new GameObjektSetPosition(params);
- case GAME_OBJEKT_SET_SIZE:
- return new GameObjektSetSize(params);
- case BARIERE_SET_TEAM:
- return new BariereSetTeam(params);
- case BARIERE_ZUFALL:
- params->release();
- return new BariereZufall();
- case BARIERE_ZULETZT_AUSGESCHALTET:
- params->release();
- return new BariereZuletztAusgeschaltet();
- case BARIERE_ZULETZT_BEWEGT:
- params->release();
- return new BariereZuletztBewegt();
- case BARIERE_ZULETZT_EINGESCHALTET:
- params->release();
- return new BariereZuletztEingeschaltet();
- case BASE_SET_TEAM:
- return new BaseSetTeam(params);
- case BASE_START_TEAM_CHANGE:
- return new BaseStartTeamChange(params);
- case BASE_ZUFALL:
- params->release();
- return new BaseZufall();
- case BASE_ZULETZT_BESITZER_GEWECHSELT:
- params->release();
- return new BaseZuletztBesitzerGewechselt();
- case BOOLEAN_AUS_TEXT:
- return new BooleanAusText(params);
- case BOOLEAN_BARIERE_BEWEGT_SICH:
- return new BooleanBariereBewegtSich(params);
- case BOOLEAN_BARIERE_IST_AKTIV:
- return new BooleanBariereIstAktiv(params);
- case BOOLEAN_BARIERE_IST_SCHALTEND:
- return new BooleanBariereIstSchaltend(params);
- case BOOLEAN_BASE_IST_NEUTRAL:
- return new BooleanBaseIstNeutral(params);
- case BOOLEAN_RECHNUNG:
- {
- char op;
- dat.lese(&op, 1);
- return new BooleanRechnung(params, (Operator)op);
- }
- case BOOLEAN_SCHALTER_IST_AKTIV:
- return new BooleanSchalterIstAktiv(params);
- case BOOLEAN_SPIELER_AM_LEBEN:
- return new BooleanSpielerAmLeben(params);
- case BOOLEAN_SPIELER_HAT_GEGENSTAND:
- return new BooleanSpielerHatGegenstand(params);
- case BOOLEAN_SPIELER_IST_VERWUNDBAR:
- return new BooleanSpielerIstVerwundbar(params);
- case BOOLEAN_SPIELER_KANN_ITEM_BENUTZEN:
- return new BooleanSpielerKannItemBenutzen(params);
- case BOOLEAN_SPIEL_PAUSIERT:
- params->release();
- return new BooleanSpielPausiert();
- case BOOLEAN_TIMER_IS_RUNNING:
- return new BooleanTimerIsRunning(params);
- case BOOLEAN_TIMER_IST_SICHTBAR:
- return new BooleanTimerIstSichtbar(params);
- case BOOLEAN_TRIGGER_IST_AKTIV:
- return new BooleanTriggerIstAktiv(params);
- case BOOLEAN_TUNNEL_IST_AKTIV:
- return new BooleanTunnelIstAktiv(params);
- case BOOLEAN_UMLENKUNG_HAT_ABK:
- return new BooleanUmlenkungHatAbk(params);
- case BOOLEAN_UMLENKUNG_IST_DREHEND:
- return new BooleanUmlenkungIstDrehend(params);
- case BOOLEAN_ZUFALL:
- params->release();
- return new BooleanZufall();
- case DISPLAY_TEXT:
- return new DisplayText(params);
- case DROP_DO_DROP:
- return new DropDoDrop(params);
- case DROP_SET_AREA:
- return new DropSetArea(params);
- case DROP_SET_MAX_TIME:
- return new DropSetMaxTime(params);
- case DROP_SET_TIME:
- return new DropSetTime(params);
- case DROP_ZUFALL:
- params->release();
- return new DropZufall();
- case DROP_ZULETZT_GEDROPT:
- params->release();
- return new DropZuletztGedropt();
- case GESCHOSS_NEU:
- return new GeschossNeu(params);
- case GESCHOSS_SET_PLAYER:
- return new GeschossSetPlayer(params);
- case GESCHOSS_SET_RICHTUNG:
- return new GeschossSetRichtung(params);
- case GESCHOSS_SET_SPEED:
- return new GeschossSetSpeed(params);
- case GESCHOSS_SET_TYPE:
- return new GeschossSetType(params);
- case GESCHOSS_ZUFALL:
- params->release();
- return new GeschossZufall();
- case GESCHOSS_ZULETZT_ABGEFEUERT:
- params->release();
- return new GeschossZuletztAbgefeuert();
- case GESCHOSS_ZULETZT_BARIERE_GETROFFEN:
- params->release();
- return new GeschossZuletztBarjereGetroffen();
- case GESCHOSS_ZULETZT_GESCHOSS_GETROFFEN:
- params->release();
- return new GeschossZuletztGeschossGetroffen();
- case GESCHOSS_ZULETZT_TUNNEL_BENUTZT:
- params->release();
- return new GeschossZuletztTunnelBenutzt();
- case GESCHOSS_ZULETZT_UMGELENKT:
- params->release();
- return new GeschossZuletztUmgelenkt();
- case INTEGER_AUS_TEXT:
- return new IntegerAusText(params);
- case FLOAT_GAME_OBJEKT_BREITE:
- return new FloatGameObjektBreite(params);
- case FLOAT_GAME_OBJEKT_HEIGHT:
- return new FloatGameObjektHeight(params);
- case INTEGER_BARIERE_SCHALTUNGEN:
- return new IntegerBariereSchaltungen(params);
- case INTEGER_BARIERE_VERSCHIEBUNGEN:
- return new IntegerBariereVerschiebungen(params);
- case INTEGER_DROP_MAX_ZEIT:
- return new IntegerDropMaxZeit(params);
- case FLOAT_DROP_ZEIT:
- return new FloatDropZeit(params);
- case INTEGER_MAX_X_VON_DROP:
- return new IntegerMaxXVonDrop(params);
- case INTEGER_MAX_Y_VON_DROP:
- return new IntegerMaxYVonDrop(params);
- case INTEGER_MIN_X_VON_DROP:
- return new IntegerMinXVonDrop(params);
- case INTEGER_MIN_Y_VON_DROP:
- return new IntegerMinYVonDrop(params);
- case INTEGER_RECHNEN:
- {
- char op;
- dat.lese(&op, 1);
- return new IntegerRechnen(params, (Operator)op);
- }
- case INTEGER_SCHALTER_AKTIVIERUNGEN:
- return new IntegerSchalterAktivierungen(params);
- case FLOAT_SPIELER_ABKLINGZEITVERRINGERUNG:
- return new FloatSpielerAbklingzeitVerringerung(params);
- case FLOAT_SPIELER_ARMOR:
- return new FloatSpielerArmor(params);
- case FLOAT_SPIELER_ERFAHRUNG:
- return new FloatSpielerErfahrung(params);
- case FLOAT_SPIELER_ERLITTENER_SCHADEN:
- return new FloatSpielerErlittenerSchaden(params);
- case FLOAT_SPIELER_GEHEILTES_LEBEN:
- return new FloatSpielerGeheiltesLeben(params);
- case INTEGER_SPIELER_GESCHOSSEN:
- return new IntegerSpielerGeschossen(params);
- case FLOAT_SPIELER_GESCHOSS_TEMPO:
- return new FloatSpielerGeschossTempo(params);
- case INTEGER_SPIELER_GETROFFEN:
- return new IntegerSpielerGetroffen(params);
- case INTEGER_SPIELER_ITEMS_AUFGEHOBEN:
- return new IntegerSpielerItemsAufgehoben(params);
- case INTEGER_SPIELER_ANZAHL_ITEMS_IN_INVENTAR:
- return new IntegerSpielerItemsInInventar(params);
- case INTEGER_SPIELER_ANZAHL_ITEMS_VON_TYP:
- return new IntegerSpielerItemsTypeInInventar(params);
- case INTEGER_SPIELER_ITEMS_VERWENDET:
- return new IntegerSpielerItemsVerwendet(params);
- case INTEGER_SPIELER_KILLS:
- return new IntegerSpielerKills(params);
- case FLOAT_SPIELER_LEBEN:
- return new FloatSpielerLeben(params);
- case FLOAT_SPIELER_LEBENSRAUB:
- return new FloatSpielerLebensraub(params);
- case FLOAT_SPIELER_LEBENSREGENERATION:
- return new FloatSpielerLebensregeneration(params);
- case INTEGER_SPIELER_LEVEL:
- return new IntegerSpielerLevel(params);
- case INTEGER_SPIELER_MAX_ERFAHRUNG:
- return new IntegerSpielerMaxErfahrung(params);
- case INTEGER_SPIELER_MAX_LEBEN:
- return new IntegerSpielerMaxLeben(params);
- case FLOAT_SPIELER_SCHADEN:
- return new FloatSpielerSchaden(params);
- case FLOAT_SPIELER_SCHADEN_BONUS:
- return new FloatSpielerSchadenBonus(params);
- case INTEGER_SPIELER_SCHALTER_AKTIVIERT:
- return new IntegerSpielerSchalterAktiviert(params);
- case FLOAT_SPIELER_TEMPO:
- return new FloatSpielerTempo(params);
- case INTEGER_SPIELER_TODE:
- return new IntegerSpielerTode(params);
- case INTEGER_SPIELER_TREFFER:
- return new IntegerSpielerTreffer(params);
- case INTEGER_SPIELER_TUNNEL_BENUTZT:
- return new IntegerSpielerTunnelBenutzt(params);
- case INTEGER_TEAM_KILLS:
- return new IntegerTeamKills(params);
- case INTEGER_TEAM_PUNKTE:
- return new IntegerTeamPunkte(params);
- case INTEGER_TEAM_SPIELERANZAHL:
- return new IntegerTeamSpieleranzahl(params);
- case INTEGER_TEAM_TODE:
- return new IntegerTeamTode(params);
- case FLOAT_TEAM_WIEDERBELEBUNGSZEIT:
- return new FloatTeamWiederbelegungszeit(params);
- case FLOAT_TIMER_AKTUELLE_ZEIT:
- return new FloatTimerAktuelleZeit(params);
- case INTEGER_TIMER_MAX_ZEIT:
- return new IntegerTimerMaxZeit(params);
- case INTEGER_TRIGGER_RUNNS:
- return new IntegerTriggerRunns(params);
- case INTEGER_TUNNEL_BENUTZUNGEN:
- return new IntegerTunnelBenutzungen(params);
- case INTEGER_UMLENKUNG_BENUTZUNGEN:
- return new IntegerUmlenkungBenutzungen(params);
- case FLOAT_X_VON_GAME_OBJEKT:
- return new FloatXVonGameObjekt(params);
- case FLOAT_Y_VON_GAME_OBJEKT:
- return new FloatYVonGameObjekt(params);
- case INTEGER_X_VON_TUNNEL_ZIEL:
- return new IntegerXVonTunnelZiel(params);
- case INTEGER_Y_VON_TUNNEL_ZIEL:
- return new IntegerYVonTunnelZiel(params);
- case INTEGER_ZUFALL:
- return new IntegerZufall(params);
- case ITEM_SPIELER_INVENTAR:
- return new ItemSpielerInventar(params);
- case ITEM_ZULETZT_AUFGEHOBEN:
- params->release();
- return new ItemZuletztAufgehoben();
- case ITEM_ZULETZT_AKTIVIERT:
- params->release();
- return new ItemZuletztAktiviert();
- case ITEM_ZULETZT_GEDROPT:
- params->release();
- return new ItemZuletztGedropt();
- case ITEM_ZUFALL:
- params->release();
- return new ItemZufall();
- case KONSTANT_BOOLEAN:
- {
- params->release();
- bool b;
- dat.lese((char*)&b, 1);
- return new KonstantBoolean(b);
- }
- case KONSTANT_FLOAT:
- {
- params->release();
- float f;
- dat.lese((char*)&f, 4);
- return new KonstantFloat(f);
- }
- case KONSTANT_INTEGER:
- {
- params->release();
- int i;
- dat.lese((char*)&i, 4);
- return new KonstantInteger(i);
- }
- case KONSTANT_GEGENSTAND_TYP:
- {
- params->release();
- int i;
- dat.lese((char*)&i, 4);
- return new KonstantGegenstandTyp((GegenstandTyp)i);
- }
- case KONSTANT_TASTE:
- {
- params->release();
- unsigned char i;
- dat.lese((char*)&i, 1);
- return new KonstantTaste(i);
- }
- case KONSTANT_NICHTS:
- params->release();
- return new KonstantNichts();
- case KONSTANT_STRING:
- {
- params->release();
- char len;
- dat.lese(&len, 1);
- char* txt = new char[(__int64)len + 1];
- dat.lese(txt, len);
- txt[(int)len] = 0;
- Aktion* ret = new KonstantString(txt);
- delete[] txt;
- return ret;
- }
- case KONSTANT_VARIABLE:
- {
- params->release();
- char len;
- dat.lese(&len, 1);
- char* txt = new char[(__int64)len + 1];
- dat.lese(txt, len);
- txt[(int)len] = 0;
- Aktion* ret = new KonstantVariable(txt);
- delete[] txt;
- return ret;
- }
- case RICHTUNG_VON_GESCHOSS:
- return new RichtungVonGeschoss(params);
- case RICHTUNG_VON_UMLENKUNG:
- return new RichtungVonUmlenkung(params);
- case RICHTUNG_ZUFALL:
- params->release();
- return new RichtungZufall();
- case SCHALTER_AKTIVIEREN:
- return new SchalterAktivieren(params);
- case SCHALTER_SET_ERLAUBT:
- return new SchalterSetErlaubt(params);
- case SCHALTER_ZUFALL:
- params->release();
- return new SchalterZufall();
- case SCHALTER_ZULETZT_AKTIVIERT:
- params->release();
- return new SchalterZuletztAktiviert();
- case SET_VARIABLE:
- {
- char len;
- dat.lese(&len, 1);
- char* txt = new char[(__int64)len + 1];
- dat.lese(txt, len);
- txt[(int)len] = 0;
- Aktion* ret = new SetVariable(txt, params);
- delete[] txt;
- return ret;
- }
- case SPIEL_ENDE:
- return new SpielEnde(params);
- case SPIELER_GIVE_ITEM:
- return new SpielerGiveItem(params);
- case SPIELER_NACHRICHT:
- return new SpielerNachricht(params);
- case SPIELER_REMOVE_ITEM:
- return new SpielerRemoveItem(params);
- case SPIELER_SET_ABKLINGZEITVERRINGERUNG:
- return new SpielerSetAbklingzeitverringerung(params);
- case SPIELER_SET_ARMOR:
- return new SpielerSetArmor(params);
- case SPIELER_SET_ERFAHRUNG:
- return new SpielerSetErfahrung(params);
- case SPIELER_SET_LEBEN:
- return new SpielerSetLeben(params);
- case SPIELER_SET_LEBENSRAUB:
- return new SpielerSetLebensraub(params);
- case SPIELER_SET_LEBENSREGENERATION:
- return new SpielerSetLebensraub(params);
- case SPIELER_SET_LEVEL:
- return new SpielerSetLevel(params);
- case SPIELER_SET_MAX_ERFAHRUNG:
- return new SpielerSetMaxErfahrung(params);
- case SPIELER_SET_SCHADEN_BONUS:
- return new SpielerSetSchadenBonus(params);
- case SPIELER_SET_TEMPO:
- return new SpielerSetTempo(params);
- case SPIELER_SET_GESCHOSS_TEMPO:
- return new SpielerSetWaffenTempo(params);
- case SPIELER_ZUFALL:
- params->release();
- return new SpielerZufall();
- case SPIELER_ZUFALL_AUS_TEAM:
- return new SpielerZufallAusTeam(params);
- case SPIELER_ZULETZT_ERFAHRUNG_BEKOMMEN:
- return new SpielerZuletztErfahrungBekommen();
- case SPIELER_ZULETZT_GEGENSTAND_AKTIVIERT:
- params->release();
- return new SpielerZuletztGegenstandAktiviert();
- case SPIELER_ZULETZT_GEGENSTAND_AUFGEHOBEN:
- params->release();
- return new SpielerZuletztGegenstandAufgehoben();
- case SPIELER_ZULETZT_GEHEILT:
- params->release();
- return new SpielerZuletztGeheilt();
- case SPIELER_ZULETZT_GESCHOSSEN:
- params->release();
- return new SpielerZuletztGeschossGeschossen();
- case SPIELER_ZULETZT_GESTORBEN:
- params->release();
- return new SpielerZuletztGestorben();
- case SPIELER_ZULETZT_LEVEL_UP:
- params->release();
- return new SpielerZuletztLevelUp();
- case SPIELER_ZULETZT_SCHADEN_GEMACHT:
- params->release();
- return new SpielerZuletztSchadenGemacht();
- case SPIELER_ZULETZT_SCHADEN_GENOMMEN:
- params->release();
- return new SpielerZuletztSchadenGenommen();
- case SPIELER_ZULETZT_SCHALTER_AKTIVIERT:
- params->release();
- return new SpielerZuletztSchalterAktiviert();
- case SPIELER_ZULETZT_TUNNEL_BENUTZT:
- params->release();
- return new SpielerZuletztTunnelBenutzt();
- case SPIELER_ZULETZT_WIEDERBELEBT:
- params->release();
- return new SpielerZuletztWiederbelebent();
- case SPIEL_PAUSE:
- return new SpielPause(params);
- case TEAM_SET_PUNKTE:
- return new TeamSetPunkte(params);
- case TEAM_VON_BARIERE:
- return new TeamVonBariere(params);
- case TEAM_VON_SPIELER:
- return new TeamVonSpieler(params);
- case TEAM_ZUFALL:
- params->release();
- return new TeamZufall();
- case TEXT_AUS_BOOLEAN:
- return new TextAusBoolean(params);
- case TEXT_AUS_RICHTUNG:
- return new TextAusRichtung(params);
- case TEXT_AUS_INTEGER:
- return new TextAusInteger(params);
- case TEXT_CONCAT:
- return new TextConcat(params);
- case TEXT_ITEM_NAME:
- return new TextItemName(params);
- case TEXT_SPIELER_NAME:
- return new TextSpielerName(params);
- case TEXT_TEIL_VON_TEXT:
- return new TextTeilVonText(params);
- case TEXT_TRIGGER_NAME:
- return new TextTriggerName(params);
- case TIMER_SET_PAUSE:
- return new TimerSetPause(params);
- case TIMER_SET_SICHTBAR:
- return new TimerSetSichtbar(params);
- case TIMER_SET_ZEIT:
- return new TimerSetZeit(params);
- case TIMER_START:
- return new TimerStart(params);
- case TIMER_ZUFALL:
- params->release();
- return new TimerZufall();
- case TIMER_ZULETZT_ABGELAUFEN:
- params->release();
- return new TimerZuletztAbgelaufen();
- case TIMER_ZULETZT_FOTOGRAFIERT:
- params->release();
- return new TimerZuletztFortgesetzt();
- case TIMER_ZULETZT_GESTARTET:
- params->release();
- return new TimerZuletztGestartet();
- case TIMER_ZULETZT_PAUSIERT:
- params->release();
- return new TimerZuletztPausiert();
- case TRIGGER_AKTION:
- return new TriggerAktion(params);
- case TRIGGER_LAST_RUNNED:
- params->release();
- return new TriggerLastRunned();
- case TRIGGER_RUN_START:
- return new TriggerRunStart(params);
- case TRIGGER_SET_ENABLED:
- return new TriggerSetEnabled(params);
- case TRIGGER_ZUFALL:
- params->release();
- return new TriggerZufall();
- case TUNNEL_SET_ERLAUBT:
- return new TunnelSetErlaubt(params);
- case TUNNEL_SET_ZIEL_POSITION:
- return new TunnelSetZielPosition(params);
- case TUNNEL_ZUFALL:
- params->release();
- return new TunnelZufall();
- case TUNNEL_ZULETZT_BENUTZT:
- params->release();
- return new TunnelZuletztBenutzt();
- case UMLENKUNG_SET_ERLAUBT:
- return new UmlenkungSetEnabled(params);
- case UMLENKUNG_SET_MAX_ABK:
- return new UmlenkungSetMaxAbk(params);
- case UMLENKUNG_SET_RICHTUNG:
- return new UmlenkungSetRichtung(params);
- case UMLENKUNG_ZUFALL:
- params->release();
- return new UmlenkungZufall();
- case UMLENKUNG_ZULETZT_BENUTZT:
- params->release();
- return new UmlenkungZuletztBenutzt();
- case WARTEN:
- return new Warten(params);
- case WENN_DANN_SONST:
- return new WennDannSonst(params);
- case SEQUENZ:
- return new Sequenz(params);
- case FLOAT_RECHNUNG:
- {
- char op;
- dat.lese(&op, 1);
- return new FloatRechnung(params, (Operator)op);
- }
- case FLOAT_AUS_INTEGER:
- return new FloatAusInteger(params);
- case FLOAT_AUS_TEXT:
- return new FloatAusText(params);
- case TEXT_AUS_FLOAT:
- return new TextAusFloat(params);
- case FLOAT_ZUFALL:
- return new FloatZufall(params);
- case INTEGER_AUS_FLOAT:
- return new IntegerAusFloat(params);
- case BESTENLISTE_NEU:
- return new BestenlisteNeu(params);
- case BESTENLISTE_ADD_SPALTE:
- return new BestenlisteAddSpalte(params);
- case BESTENLISTE_ADD_ZEILE:
- return new BestenlisteAddZeile(params);
- case BESTENLISTE_SET_WERT:
- return new BestenlisteSetWert(params);
- case BESTENLISTE_GET_WERT:
- return new BestenlisteGetWert(params);
- case SCHALTER_MIT_NUMMER:
- return new SchalterMitNummer(params);
- case BASE_MIT_NUMMER:
- return new BaseMitNummer(params);
- case TEAM_MIT_NUMMER:
- return new TeamMitNummer(params);
- case TEAM_VON_BASE:
- return new TeamVonBase(params);
- case SPIELER_MIT_NUMMER:
- return new SpielerMitNummer(params);
- }
- params->release();
- return new KonstantNichts();
- }
- void MapReader::writeAktion(Aktion* zAk, StreamWriter& dat)
- {
- int id = zAk->getTyp();
- dat.schreibe((char*)&id, 4);
- unsigned char pAnz = (unsigned char)zAk->zSubActions()->getEintragAnzahl();
- dat.schreibe((char*)&pAnz, 1);
- for (auto e : *zAk->zSubActions())
- {
- writeAktion(e, dat);
- e->writeOptions(dat);
- }
- }
- // nicht constant
- void MapReader::ladeKarte(Spiel* zSpiel)
- {
- if (!pfad)
- return;
- SpielerTeamStruktur sts;
- Text* pf = new Text(pfad->getText());
- pf->append("data.sts");
- Datei* datei = new Datei();
- datei->setDatei(pf);
- if (!datei->existiert() || datei->istOrdner())
- {
- datei->release();
- return;
- }
- datei->open(Datei::Style::lesen);
- datei->lese((char*)&sts.spielerAnzahl, 4);
- datei->lese((char*)&sts.teamAnzahl, 4);
- for (int i = 0; i < sts.spielerAnzahl; i++)
- {
- int farbe = 0;
- datei->lese((char*)&farbe, 4);
- sts.spielerFarbe.set(farbe, i);
- }
- for (int i = 0; i < sts.teamAnzahl; i++)
- {
- int farbe = 0;
- datei->lese((char*)&farbe, 4);
- sts.teamFarbe.set(farbe, i);
- }
- for (int i = 0; i < sts.teamAnzahl; i++)
- {
- char len = 0;
- datei->lese(&len, 1);
- char* txt = new char[(__int64)len + 1];
- txt[(int)len] = 0;
- datei->lese(txt, len);
- Text* name = new Text(txt);
- delete[] txt;
- sts.teamName.set(name, i);
- }
- for (int i = 0; i < sts.teamAnzahl; i++)
- {
- int size = 0;
- datei->lese((char*)&size, 4);
- sts.teamSize.set(size, i);
- }
- datei->close();
- datei->release();
- pf = new Text(pfad->getText());
- pf->append("data.map");
- Datei mapFile;
- mapFile.setDatei(pf);
- if (!mapFile.existiert() || mapFile.istOrdner())
- return;
- mapFile.open(Datei::Style::lesen);
- // map Size
- int width;
- int height;
- mapFile.lese((char*)&width, 4);
- mapFile.lese((char*)&height, 4);
- zSpiel->setMapSize(width, height);
- // teams
- for (int i = 0; i < sts.teamAnzahl; i++)
- {
- int maxWbZeit;
- int punkte;
- mapFile.lese((char*)&maxWbZeit, 4);
- mapFile.lese((char*)&punkte, 4);
- zSpiel->addTeam(new Team(i, sts.teamSize.get(i), punkte, maxWbZeit, sts.teamFarbe.get(i), sts.teamName.z(i)->getText()));
- }
- // spieler
- int team = 0;
- int maxT = sts.teamSize.get(team);
- for (int i = 0; i < sts.spielerAnzahl; i++)
- {
- int spawnX;
- int spawnY;
- mapFile.lese((char*)&spawnX, 4);
- mapFile.lese((char*)&spawnY, 4);
- if (i >= maxT)
- {
- team++;
- if (sts.teamSize.hat(team))
- maxT += sts.teamSize.get(team);
- }
- zSpiel->addSpieler(new Spieler(zSpiel->zResources(), i, zSpiel->getTeam(team), spawnX, spawnY, sts.spielerFarbe.get(i)));
- }
- // Barieren
- int anz = 0;
- mapFile.lese((char*)&anz, 4);
- for (int i = 0; i < anz; i++)
- {
- int x;
- int y;
- int breite;
- int height;
- int style;
- int verschiebungWeite;
- int autoSchaltungMaxTime;
- int team;
- int id;
- mapFile.lese((char*)&id, 4);
- mapFile.lese((char*)&x, 4);
- mapFile.lese((char*)&y, 4);
- mapFile.lese((char*)&breite, 4);
- mapFile.lese((char*)&height, 4);
- mapFile.lese((char*)&style, 4);
- mapFile.lese((char*)&verschiebungWeite, 4);
- mapFile.lese((char*)&autoSchaltungMaxTime, 4);
- mapFile.lese((char*)&team, 4);
- zSpiel->addBariere(new Bariere(zSpiel->zResources(), id, x, y, breite, height, style, verschiebungWeite, autoSchaltungMaxTime, zSpiel->getTeam(team)));
- }
- // Basen
- mapFile.lese((char*)&anz, 4);
- for (int i = 0; i < anz; i++)
- {
- int x;
- int y;
- int breite;
- int height;
- int maxTime;
- int team;
- int id;
- bool showTimer;
- int timerX;
- int timerY;
- int timerFarbe;
- mapFile.lese((char*)&id, 4);
- mapFile.lese((char*)&x, 4);
- mapFile.lese((char*)&y, 4);
- mapFile.lese((char*)&breite, 4);
- mapFile.lese((char*)&height, 4);
- mapFile.lese((char*)&maxTime, 4);
- mapFile.lese((char*)&team, 4);
- mapFile.lese((char*)&showTimer, 1);
- mapFile.lese((char*)&timerX, 4);
- mapFile.lese((char*)&timerY, 4);
- mapFile.lese((char*)&timerFarbe, 4);
- zSpiel->addBase(new Base(zSpiel->zResources(), id, x, y, breite, height, showTimer, Punkt(timerX, timerY), timerFarbe, new TextRenderer(dynamic_cast<Schrift*>(zSpiel->zResources()->getUIFactory().initParam.schrift->getThis())), maxTime, zSpiel->getTeam(team)));
- }
- // Drops
- mapFile.lese((char*)&anz, 4);
- for (int i = 0; i < anz; i++)
- {
- int minX;
- int minY;
- int maxX;
- int maxY;
- int maxTime;
- int numDrops;
- float wahrscheinlichkeit[ITEMANZAHL];
- int id;
- mapFile.lese((char*)&id, 4);
- mapFile.lese((char*)&minX, 4);
- mapFile.lese((char*)&minY, 4);
- mapFile.lese((char*)&maxX, 4);
- mapFile.lese((char*)&maxY, 4);
- mapFile.lese((char*)&maxTime, 4);
- mapFile.lese((char*)&numDrops, 4);
- for (int j = KEIN_GEGENSTAND; j < ITEMANZAHL; j++)
- mapFile.lese((char*)&wahrscheinlichkeit[j], 4);
- char len;
- mapFile.lese((char*)&len, 1);
- char* name = new char[(__int64)len + 1];
- mapFile.lese(name, len);
- name[(int)len] = 0;
- zSpiel->addDrop(new Drop(id, minX, maxX, minY, maxY, maxTime, numDrops, name, wahrscheinlichkeit));
- delete[] name;
- }
- // Schalter
- mapFile.lese((char*)&anz, 4);
- for (int i = 0; i < anz; i++)
- {
- int x;
- int y;
- int breite;
- int height;
- bool aktive;
- int id;
- mapFile.lese((char*)&id, 4);
- mapFile.lese((char*)&x, 4);
- mapFile.lese((char*)&y, 4);
- mapFile.lese((char*)&breite, 4);
- mapFile.lese((char*)&height, 4);
- mapFile.lese((char*)&aktive, 1);
- zSpiel->addSchalter(new Schalter(zSpiel->zResources(), id, x, y, breite, height, aktive));
- }
- // Schiene
- mapFile.lese((char*)&anz, 4);
- for (int i = 0; i < anz; i++)
- {
- int x;
- int y;
- int breite;
- int height;
- int id;
- mapFile.lese((char*)&id, 4);
- mapFile.lese((char*)&x, 4);
- mapFile.lese((char*)&y, 4);
- mapFile.lese((char*)&breite, 4);
- mapFile.lese((char*)&height, 4);
- zSpiel->addSchiene(new Schiene(zSpiel->zResources(), id, x, y, breite, height));
- }
- // Timer
- mapFile.lese((char*)&anz, 4);
- for (int i = 0; i < anz; i++)
- {
- int x;
- int y;
- int maxZeit;
- bool sichtbar;
- bool autoWiederhohlung;
- bool runns;
- int farbe;
- int id;
- mapFile.lese((char*)&id, 4);
- mapFile.lese((char*)&x, 4);
- mapFile.lese((char*)&y, 4);
- mapFile.lese((char*)&maxZeit, 4);
- mapFile.lese((char*)&sichtbar, 1);
- mapFile.lese((char*)&autoWiederhohlung, 1);
- mapFile.lese((char*)&runns, 1);
- mapFile.lese((char*)&farbe, 4);
- char len;
- mapFile.lese((char*)&len, 1);
- char* name = new char[(__int64)len + 1];
- mapFile.lese(name, len);
- name[(int)len] = 0;
- zSpiel->addTimer(new Timer(zSpiel->zResources()->getUIFactory().initParam.schrift, id, name, maxZeit, x, y, sichtbar, autoWiederhohlung, runns, farbe));
- delete[] name;
- }
- // Tunnel
- mapFile.lese((char*)&anz, 4);
- for (int i = 0; i < anz; i++)
- {
- int x;
- int y;
- int breite;
- int height;
- int zielX;
- int zielY;
- bool aktiv;
- int id;
- mapFile.lese((char*)&id, 4);
- mapFile.lese((char*)&x, 4);
- mapFile.lese((char*)&y, 4);
- mapFile.lese((char*)&breite, 4);
- mapFile.lese((char*)&height, 4);
- mapFile.lese((char*)&zielX, 4);
- mapFile.lese((char*)&zielY, 4);
- mapFile.lese((char*)&aktiv, 1);
- zSpiel->addTunnel(new Tunnel(zSpiel->zResources(), id, x, y, breite, height, zielX, zielY, aktiv));
- }
- // Umlenkungen
- mapFile.lese((char*)&anz, 4);
- for (int i = 0; i < anz; i++)
- {
- int x;
- int y;
- int breite;
- int height;
- char richtung;
- int maxAbklingzeit;
- bool drehend;
- bool aktiv;
- int id;
- mapFile.lese((char*)&id, 4);
- mapFile.lese((char*)&x, 4);
- mapFile.lese((char*)&y, 4);
- mapFile.lese((char*)&breite, 4);
- mapFile.lese((char*)&height, 4);
- mapFile.lese((char*)&richtung, 1);
- mapFile.lese((char*)&maxAbklingzeit, 4);
- mapFile.lese((char*)&drehend, 1);
- mapFile.lese((char*)&aktiv, 1);
- zSpiel->addUmlenkung(new Umlenkung(zSpiel->zResources(), id, x, y, breite, height, (Richtung)richtung, maxAbklingzeit, drehend, aktiv));
- }
- // Trigger
- mapFile.lese((char*)&anz, 4);
- for (int i = 0; i < anz; i++)
- {
- int id;
- mapFile.lese((char*)&id, 4);
- char len;
- mapFile.lese((char*)&len, 1);
- char* name = new char[(__int64)len + 1];
- mapFile.lese(name, len);
- name[(int)len] = 0;
- int ereignisAnzahl;
- int bedingungAnzahl;
- int aktionAnzahl;
- mapFile.lese((char*)&ereignisAnzahl, 4);
- mapFile.lese((char*)&bedingungAnzahl, 4);
- mapFile.lese((char*)&aktionAnzahl, 4);
- EreignisTyp* ereignisse = new EreignisTyp[ereignisAnzahl];
- for (int j = 0; j < ereignisAnzahl; j++)
- mapFile.lese((char*)&ereignisse[j], 4);
- RCArray< Bedingung >* bedingungen = new RCArray< Bedingung >();
- for (int j = 0; j < bedingungAnzahl; j++)
- bedingungen->add(new Bedingung(readAktion(mapFile)));
- RCArray< Aktion >* aktionen = new RCArray< Aktion >();
- for (int j = 0; j < aktionAnzahl; j++)
- aktionen->add(readAktion(mapFile));
- zSpiel->addTrigger(new Trigger(id, name, ereignisAnzahl, ereignisse, bedingungen, aktionen));
- delete[] name;
- }
- // Variablen
- mapFile.lese((char*)&anz, 4);
- for (int i = 0; i < anz; i++)
- {
- char len;
- mapFile.lese((char*)&len, 1);
- char* name = new char[(__int64)len + 1];
- mapFile.lese(name, len);
- name[(int)len] = 0;
- char typ;
- mapFile.lese(&typ, 1);
- char def;
- mapFile.lese(&def, 1);
- Variable* var = 0;
- if (!def)
- var = new Variable(NICHTS);
- else
- {
- switch (typ)
- {
- case NICHTS:
- var = new Variable(NICHTS);
- break;
- case INTEGER:
- {
- int val;
- mapFile.lese((char*)&val, 4);
- var = new Integer(val);
- break;
- }
- case BOOLEAN:
- {
- bool val;
- mapFile.lese((char*)&val, 1);
- var = new Boolean(val);
- break;
- }
- case STRING:
- {
- char len;
- mapFile.lese((char*)&len, 1);
- char* value = new char[(__int64)len + 1];
- mapFile.lese(value, len);
- value[(int)len] = 0;
- var = new String(value);
- delete[] value;
- break;
- }
- case RICHTUNG:
- {
- char len;
- mapFile.lese((char*)&len, 1);
- char* value = new char[(__int64)len + 1];
- mapFile.lese(value, len);
- value[(int)len] = 0;
- var = new String(getRichtungFromString(Text(value)));
- delete[] value;
- break;
- }
- case FLOAT:
- {
- float val;
- mapFile.lese((char*)&val, 4);
- var = new Float(val);
- break;
- }
- case TASTE:
- {
- char val;
- mapFile.lese(&val, 1);
- var = new Integer(val, 1);
- break;
- }
- case SPIELER:
- {
- int id;
- mapFile.lese((char*)&id, 4);
- var = zSpiel->getSpieler(id);
- break;
- }
- case TIMER:
- {
- int id;
- mapFile.lese((char*)&id, 4);
- var = zSpiel->getTimer(id);
- break;
- }
- case TEAM:
- {
- int id;
- mapFile.lese((char*)&id, 4);
- var = zSpiel->getTeam(id);
- break;
- }
- case BARIERE:
- {
- int id;
- mapFile.lese((char*)&id, 4);
- var = zSpiel->getBariere(id);
- break;
- }
- case SCHALTER:
- {
- int id;
- mapFile.lese((char*)&id, 4);
- var = zSpiel->getSchalter(id);
- break;
- }
- case BASE:
- {
- int id;
- mapFile.lese((char*)&id, 4);
- var = zSpiel->getBase(id);
- break;
- }
- case GEGENSTAND:
- {
- int id;
- mapFile.lese((char*)&id, 4);
- var = new GegenstandTypVar((GegenstandTyp)id);
- break;
- }
- case SCHIENE:
- {
- int id;
- mapFile.lese((char*)&id, 4);
- var = zSpiel->getSchiene(id);
- break;
- }
- case TUNNEL:
- {
- int id;
- mapFile.lese((char*)&id, 4);
- var = zSpiel->getTunnel(id);
- break;
- }
- case UMLENKUNG:
- {
- int id;
- mapFile.lese((char*)&id, 4);
- var = zSpiel->getUmlenkung(id);
- break;
- }
- case TRIGGER:
- {
- int id;
- mapFile.lese((char*)&id, 4);
- var = zSpiel->getTrigger(id);
- break;
- }
- default:
- var = new Variable(NICHTS);
- }
- }
- zSpiel->addVariable(name, var);
- delete[] name;
- }
- mapFile.close();
- }
|