#include "FreundesListe.h" #include #include #include #include #include #include #include #include #include "..\..\Global\Initialisierung.h" #include "..\..\Global\Variablen.h" // Inhalt der FreundData Klasse aus FreundesListe.h // Konstruktor FreundData::FreundData(int accountId, LRahmen* rahmen, AlphaFeld* auswahlBuffer) : Thread() { Bild* entfernenBild = bilder->get("data/client/bilder/chat.ltdb/entfernen.png"); Bild* ansehenBild = bilder->get("data/client/bilder/chat.ltdb/ansehen.png"); Bild* nachrichtBild = bilder->get("data/client/bilder/chat.ltdb/nachricht.png"); Bild* einladenBild = bilder->get("data/client/bilder/chat.ltdb/neuerfreund.png"); this->accountId = accountId; this->rahmen = rahmen; this->auswahlBuffer = auswahlBuffer; name = uiFactory.createTextFeld(uiFactory.initParam); name->setStyle(TextFeld::Style::Sichtbar | TextFeld::Style::Center); name->setText(""); name->setSize(200, 20); name->setPosition(25, 1); status = uiFactory.createTextFeld(uiFactory.initParam); status->setStyle(TextFeld::Style::Sichtbar | TextFeld::Style::Center); status->setSchriftFarbe(0xFFFF0000); status->setText("offline"); status->setSize(200, 20); status->setPosition(25, 24); entfernen = initKnopf(228, 49, 20, 20, 0, ""); entfernen->setStyle(Knopf::Style::Sichtbar | Knopf::Style::Erlaubt | Knopf::Style::Hintergrund | Knopf::Style::HAlpha | Knopf::Style::HBild | Knopf::Style::KlickBuffer); entfernen->setHintergrundBildZ(entfernenBild); entfernen->setHintergrundFarbe(0); initToolTip(entfernen, "Freund entfernen."); ansehen = initKnopf(208, 49, 20, 20, 0, ""); ansehen->setStyle(Knopf::Style::Sichtbar | Knopf::Style::Erlaubt | Knopf::Style::Hintergrund | Knopf::Style::HAlpha | Knopf::Style::HBild | Knopf::Style::KlickBuffer); ansehen->setHintergrundBildZ(ansehenBild); ansehen->setHintergrundFarbe(0); initToolTip(ansehen, "Account ansehen."); nachricht = initKnopf(188, 49, 20, 20, 0, ""); nachricht->setStyle(Knopf::Style::Sichtbar | Knopf::Style::Erlaubt | Knopf::Style::Hintergrund | Knopf::Style::HAlpha | Knopf::Style::HBild | Knopf::Style::KlickBuffer); nachricht->setHintergrundBildZ(nachrichtBild); nachricht->setHintergrundFarbe(0); initToolTip(nachricht, "Nachricht senden."); einladen = initKnopf(168, 49, 20, 20, 0, ""); einladen->setStyle(Knopf::Style::Sichtbar | Knopf::Style::Hintergrund | Knopf::Style::HAlpha | Knopf::Style::HBild | Knopf::Style::KlickBuffer); einladen->setHintergrundBildZ(einladenBild); einladen->setHintergrundFarbe(0); initToolTip(einladen, "Spieler in Gruppe einladen.\nDies kann nur der Gruppen " "Administrator."); online = 0; einladenSichtbar = 0; ausgewählt = 0; höhe = 0; animation = 1; auswahlAlpha = 0; tickVal = 0; rend = 0; start(); } // Destruktor FreundData::~FreundData() { rahmen->release(); auswahlBuffer = (AlphaFeld*)auswahlBuffer->release(); name = (TextFeld*)name->release(); status = (TextFeld*)status->release(); entfernen = (Knopf*)entfernen->release(); ansehen = (Knopf*)ansehen->release(); nachricht = (Knopf*)nachricht->release(); einladen = (Knopf*)einladen->release(); } // nicht constant void FreundData::thread() { if (infoClient) { Text* n = infoClient->getSpielerName(accountId); name->setTextZ(n); } run = 0; } void FreundData::setName(const char* txt) { name->setText(txt); rend = 1; } void FreundData::setStatus(const char* txt) { status->setText(txt); rend = 1; } void FreundData::setOnline(bool online) { this->online = online; if (online) { status->setSchriftFarbe(0xFF00FF00); status->setText("online"); } else { status->setSchriftFarbe(0xFFFF0000); status->setText("offline"); } einladen->setStyle(Knopf::Style::Erlaubt, einladenSichtbar && online); rend = 1; } void FreundData::setAusgewählt(bool ausw) { if (animation != 3) { ausgewählt = ausw; if (ausw) animation = 2; else animation = 1; } } void FreundData::remove() { animation = 3; } void FreundData::zeigeEinladeKnopf(bool zeigen) { einladenSichtbar = zeigen; einladen->setStyle(Knopf::Style::Erlaubt, einladenSichtbar && online); rend = 1; } void FreundData::doPublicMausEreignis(MausEreignis& me) { if (animation != 3) { bool tmp = 0; if (me.my > höhe || !ausgewählt) { tmp = me.verarbeitet; me.verarbeitet = 1; } char aktion = 0; bool vera = me.verarbeitet; nachricht->doPublicMausEreignis(me); aktion = me.verarbeitet && !vera ? 1 : 0; ansehen->doPublicMausEreignis(me); if (!aktion) aktion = me.verarbeitet && !vera ? 2 : 0; entfernen->doPublicMausEreignis(me); if (!aktion) aktion = me.verarbeitet && !vera ? 3 : 0; einladen->doPublicMausEreignis(me); if (!aktion) aktion = me.verarbeitet && !vera ? 4 : 0; if (me.my > höhe || !ausgewählt) { me.verarbeitet = tmp; return; } switch (aktion) { case 1: // Nachricht senden if (me.id == ME_RLinks) nachLogin->zChatLeiste()->addChat(accountId, 0); break; case 2: // profil ansehen if (me.id == ME_RLinks) { if (nachLogin->zAccountAnsehenFenster()->setSpielerDetails( accountId, 2)) { MausEreignis me = {ME_RLinks, 0, 0, 0, 1}; nachLogin->zTitelLeiste()->druckAccountAnsehen(me); } } break; case 3: // freund entfernen if (me.id == ME_RLinks) { int id = accountId; Text* nachricht = new Text("Möchtest du deine Freundschaft mit "); nachricht->append(name->zText()->getText()); nachricht->append(" wirklich beenden?"); nachLogin->zNachrichtenListe()->addNachricht( new Text("Bist du dir Sicher?"), nachricht, new Text("ja"), new Text("abbrechen"), [id]() { chatClient->freundschaftBeenden(id); }); } break; case 4: // In Gruppe einladen if (me.id == ME_RLinks) { if (!anmeldungClient) anmeldungClient = mainClient->createAnmeldungServerClient(); if (!anmeldungClient) { nachLogin->zNachrichtenListe()->addNachricht( new Text("Fehler"), new Text(mainClient->getLetzterFehler()), new Text("Ok"), 0); } if (anmeldungClient && anmeldungClient->verbinde()) { if (!anmeldungClient->gruppeSpielerEinladen(accountId, nachLogin->zSpielenFenster()->getGruppeId())) { nachLogin->zNachrichtenListe()->addNachricht( new Text("Fehler"), new Text(anmeldungClient->getLetzterFehler()), new Text("Ok"), 0); } anmeldungClient->trenne(0); } else { nachLogin->zNachrichtenListe()->addNachricht( new Text("Fehler"), new Text(anmeldungClient->getLetzterFehler()), new Text("Ok"), 0); } } default: // nichts break; } } } bool FreundData::tick(double tickVal) { rend |= name->tick(tickVal); rend |= status->tick(tickVal); rend |= entfernen->tick(tickVal); rend |= ansehen->tick(tickVal); rend |= nachricht->tick(tickVal); rend |= einladen->tick(tickVal); this->tickVal += tickVal * 100; int val = (int)this->tickVal; if (val < 1) { bool ret = rend; rend = 0; return ret; } if (val > 4) val = 4; this->tickVal -= val; switch (animation) { case 1: if (höhe != 50) { if (höhe > 50) { höhe -= val; if (höhe < 50) höhe = 50; } else { höhe += val; if (höhe > 50) höhe = 50; } rend = 1; } else animation = 0; break; case 2: if (höhe != 70) { höhe += val; if (höhe > 70) höhe = 70; rend = 1; } else animation = 0; break; case 3: höhe -= val; if (höhe <= 0) { nachLogin->zFreundesListe()->removeMember(this); // delete this return 1; } rend = 1; break; } if (ausgewählt && auswahlAlpha < 50) { if (auswahlAlpha + val > 50) auswahlAlpha = 50; else auswahlAlpha += val; rend = 1; } else if (!ausgewählt && auswahlAlpha > 0) { if (auswahlAlpha - val < 0) auswahlAlpha = 0; else auswahlAlpha -= val; rend = 1; } bool ret = rend; rend = 0; return ret; } void FreundData::render(int yPos, Bild& zRObj) { int br = 250; if (!zRObj.setDrawOptions(0, yPos, br, höhe)) return; rahmen->setSize(br, höhe); rahmen->render(zRObj); int rbr = rahmen->getRBreite(); if (!zRObj.setDrawOptions(rbr, rbr, br - rbr * 2, höhe - rbr * 2)) { zRObj.releaseDrawOptions(); return; } if (auswahlAlpha > 0) { auswahlBuffer->setFarbe( 0x0000FF00 | (((int)auswahlAlpha << 24) & 0xFF000000)); auswahlBuffer->setSize(br - rbr * 2, höhe - rbr * 2); auswahlBuffer->render(zRObj); } name->render(zRObj); status->render(zRObj); einladen->render(zRObj); nachricht->render(zRObj); ansehen->render(zRObj); entfernen->render(zRObj); zRObj.releaseDrawOptions(); zRObj.releaseDrawOptions(); } // constant bool FreundData::istOnline() const { return online; } bool FreundData::istAusgewählt() const { return ausgewählt; } const char* FreundData::zName() const { return name->zText()->getText(); } Text* FreundData::getName() const { return name->getText(); } const char* FreundData::zStatus() const { return status->zText()->getText(); } Text* FreundData::getStatus() const { return status->getText(); } int FreundData::getAccountId() const { return accountId; } int FreundData::getHeight() const { return höhe; } // Inhalt der FreundesListeObj Klasse aus FreundesListe.h // Konstruktor FreundesListeObj::FreundesListeObj() : Zeichnung() { members = new RCArray(); memberRahmen = new LRahmen(); memberRahmen->setFarbe(0xFFFFFFFF); memberRahmen->setRamenBreite(1); auswahlBuffer = new AlphaFeld(); auswahlBuffer->setStrength(-2); auswahlBuffer->setPosition(1, 1); vsb = new VScrollBar(); vsb->setKlickScroll(10); bildschirmGröße = uiFactory.initParam.bildschirm->getBackBufferSize(); vsb->update(0, bildschirmGröße.y - 200); memberNummer = 0; einladenSichtbar = 0; } // Destruktor FreundesListeObj::~FreundesListeObj() { members->release(); memberRahmen->release(); auswahlBuffer = (AlphaFeld*)auswahlBuffer->release(); vsb = (VScrollBar*)vsb->release(); } // nicht constant void FreundesListeObj::addMember(int accountId) { FreundData* tmp = new FreundData(accountId, dynamic_cast(memberRahmen->getThis()), dynamic_cast(auswahlBuffer->getThis())); members->add(tmp, memberNummer); memberNummer++; if (einladenSichtbar) tmp->zeigeEinladeKnopf(1); rend = 1; } void FreundesListeObj::removeMember(int accountId) { for (int i = 0; i < memberNummer; i++) { FreundData* tmp = members->z(i); if (tmp->getAccountId() == accountId) { tmp->remove(); break; } } } void FreundesListeObj::removeMember(FreundData* member) { for (int i = 0; i < memberNummer; i++) { if (members->z(i) == member) { members->remove(i); memberNummer--; rend = 1; break; } } } void FreundesListeObj::removeAll() { members->leeren(); memberNummer = 0; rend = 1; } void FreundesListeObj::setName(int accountId, const char* txt) { for (int i = 0; i < memberNummer; i++) { FreundData* tmp = members->z(i); if (tmp->getAccountId() == accountId) { tmp->setName(txt); break; } } } void FreundesListeObj::setStatus(int accountId, const char* txt) { for (int i = 0; i < memberNummer; i++) { FreundData* tmp = members->z(i); if (tmp->getAccountId() == accountId) { tmp->setStatus(txt); break; } } } void FreundesListeObj::setOnline(int accountId, bool online) { for (int i = 0; i < memberNummer; i++) { FreundData* tmp = members->z(i); if (tmp->getAccountId() == accountId) { tmp->setOnline(online); break; } } } void FreundesListeObj::zeigeEinladeKnopf(bool zeigen) { einladenSichtbar = zeigen; for (int i = 0; i < memberNummer; i++) { FreundData* tmp = members->z(i); tmp->zeigeEinladeKnopf(zeigen); } } bool FreundesListeObj::tick(double tickVal) { rend |= vsb->getRend(); rend |= nachLogin->zFreundesListe()->tick(tickVal); for (int i = 0; i < memberNummer; i++) { FreundData* tmp = members->z(i); if (tmp) rend |= tmp->tick(tickVal); } bool ret = rend; rend = 0; return ret; } void FreundesListeObj::doPublicMausEreignis(MausEreignis& me) { int my = me.my; me.my -= pos.y; if (me.mx <= 250 && me.mx > 0 && me.my >= 0) { me.my += vsb->getScroll(); for (int i = 0; i < memberNummer; i++) { FreundData* tmp = members->z(i); if (tmp) { if (me.my > 0 && me.my < tmp->getHeight()) tmp->setAusgewählt(1); else tmp->setAusgewählt(0); tmp->doPublicMausEreignis(me); me.my -= tmp->getHeight(); } } me.my -= vsb->getScroll(); } else { me.my += vsb->getScroll(); for (int i = 0; i < memberNummer; i++) { FreundData* tmp = members->z(i); if (tmp) { tmp->setAusgewählt(0); tmp->doPublicMausEreignis(me); me.my -= tmp->getHeight(); } } me.my -= vsb->getScroll(); } me.my = my; vsb->doMausMessage(250, pos.y, 20, gr.y, me); } void FreundesListeObj::render(Bild& zrObj) { if (!zrObj.setDrawOptions(pos.x, pos.y, gr.x, gr.y)) return; int höhe = 0; for (int i = 0; i < memberNummer; i++) { FreundData* tmp = members->z(i); tmp->render(höhe, zrObj); höhe += tmp->getHeight(); } vsb->update(höhe, gr.y); vsb->render(250, 0, 20, gr.y, zrObj); zrObj.releaseDrawOptions(); } // constant bool FreundesListeObj::istFreund(int accId) const { for (int i = 0; i < memberNummer; i++) { FreundData* tmp = members->z(i); if (tmp->getAccountId() == accId) return 1; } return 0; } // Inhalt der FreundesListe Klasse aus FreundesListe.h // Konstruktor FreundesListe::FreundesListe(Fenster* zNachLoginFenster) : Thread() { minimierenBild = bilder->get("data/client/bilder/chat.ltdb/minimieren.png"); maximierenBild = bilder->get("data/client/bilder/chat.ltdb/maximieren.png"); Bild* neuerFreundBild = bilder->get("data/client/bilder/chat.ltdb/neuerfreund.png"); bildschirmGröße = uiFactory.initParam.bildschirm->getBackBufferSize(); fenster = new Fenster(); fenster->addStyle(Fenster::Style::Sichtbar | Fenster::Style::Erlaubt | Fenster::Style::Rahmen | Fenster::Style::BodyHintergrund); fenster->setSize(270, 20); fenster->setRFarbe(0xFFFFFFFF); fenster->setKBgFarbe(0xFF000000); fenster->setPosition(-250, 100); minMax = initKnopf(249, 1, 20, 20, 0, ""); minMax->setStyle(Knopf::Style::Sichtbar | Knopf::Style::Erlaubt | Knopf::Style::Hintergrund | Knopf::Style::HAlpha | Knopf::Style::HBild | Knopf::Style::KlickBuffer); minMax->setHintergrundBildZ(dynamic_cast(minimierenBild->getThis())); minMax->setMausEreignisParameter(this); minMax->setMausEreignis(freundesListeMinMaxME); initToolTip(minMax, "Freundes Leiste minimieren."); fenster->addMember(dynamic_cast(minMax->getThis())); überschrift = initTextFeld(0, 5, 250, 25, TextFeld::Style::Text | TextFeld::Style::Center | TextFeld::Style::Sichtbar, "Freunde"); überschrift->setSchriftSize(15); fenster->addMember(dynamic_cast(überschrift->getThis())); accountName = initTextFeld(25, 40, 200, 20, TextFeld::Style::TextFeld | TextFeld::Style::Sichtbar, ""); accountName->setTastaturEreignisParameter(this); accountName->setTastaturEreignis(freundesListeNameTE); initToolTip( accountName, "Mit diesem Namen bist du bei anderen Spielern sichtbar."); fenster->addMember(dynamic_cast(accountName->getThis())); LTDBDatei* chatBilder = new LTDBDatei(); chatBilder->setDatei(new Text("data/client/bilder/chat.ltdb")); chatBilder->leseDaten(0); Bild* neuerChatBild = chatBilder->laden(0, new Text("neuerchat.png")); chatBilder->release(); neuerFreund = initKnopf(5, 75, 20, 20, 0, ""); neuerFreund->setStyle(Knopf::Style::Sichtbar | Knopf::Style::Erlaubt | Knopf::Style::Hintergrund | Knopf::Style::HBild | Knopf::Style::HAlpha | Knopf::Style::KlickBuffer); neuerFreund->setHintergrundBildZ(neuerFreundBild); neuerFreund->setMausEreignisParameter(this); neuerFreund->setMausEreignis(freundesListeNeuerFreundME); initToolTip(neuerFreund, "Freundesanfrage senden."); fenster->addMember(dynamic_cast(neuerFreund->getThis())); neuerChat = initKnopf(30, 75, 20, 20, 0, ""); neuerChat->setStyle(Knopf::Style::Sichtbar | Knopf::Style::Erlaubt | Knopf::Style::Hintergrund | Knopf::Style::HBild | Knopf::Style::HAlpha | Knopf::Style::KlickBuffer); neuerChat->setHintergrundBildZ(neuerChatBild); neuerChat->setMausEreignisParameter(this); neuerChat->setMausEreignis(freundesListeNeuerChatME); initToolTip(neuerChat, "Nachricht senden."); fenster->addMember(dynamic_cast(neuerChat->getThis())); neuerFreundFenster = initFenster( 0, 100, 270, 0, Fenster::Style::Erlaubt | Fenster::Style::Rahmen, 0); neuerFreundSpielerName = initTextFeld(5, 5, 235, 20, TextFeld::Style::Sichtbar | TextFeld::Style::TextFeld, "Spieler Name"); neuerFreundSpielerName->setTastaturEreignisParameter(this); neuerFreundSpielerName->setTastaturEreignis( freundesListeNeuerFreundSpielerNameTE); initToolTip(neuerFreundSpielerName, "Name des Spielers an den eine Freundesanfrage gesendet werden soll."); neuerFreundFenster->addMember( dynamic_cast(neuerFreundSpielerName->getThis())); neuerFreundFertig = initKnopf(245, 5, 20, 20, 0, ""); neuerFreundFertig->setStyle(Knopf::Style::Sichtbar | Knopf::Style::Erlaubt | Knopf::Style::Hintergrund | Knopf::Style::HBild | Knopf::Style::HAlpha | Knopf::Style::KlickBuffer); neuerFreundFertig->setHintergrundBildZ( dynamic_cast(maximierenBild->getThis())); neuerFreundFertig->setMausEreignisParameter(this); neuerFreundFertig->setMausEreignis(freundesListeNeuerFreundFertigME); initToolTip( neuerFreundFertig, "Diesem Spieler eine Freundesanfrage senden."); neuerFreundFenster->addMember( dynamic_cast(neuerFreundFertig->getThis())); fenster->addMember(dynamic_cast(neuerFreundFenster->getThis())); neuerChatFenster = initFenster( 0, 100, 270, 0, Fenster::Style::Erlaubt | Fenster::Style::Rahmen, 0); neuerChatName = initTextFeld(5, 5, 235, 20, TextFeld::Style::Sichtbar | TextFeld::Style::TextFeld, "Spieler Name"); neuerChatName->setTastaturEreignisParameter(this); neuerChatName->setTastaturEreignis(freundesListeNeuerChatNameTE); initToolTip(neuerChatName, "Name des Spielers an den eine Nachricht gesendet werden soll."); neuerChatFenster->addMember( dynamic_cast(neuerChatName->getThis())); neuerChatFertig = initKnopf(245, 5, 20, 20, 0, ""); neuerChatFertig->setStyle(Knopf::Style::Sichtbar | Knopf::Style::Erlaubt | Knopf::Style::Hintergrund | Knopf::Style::HBild | Knopf::Style::HAlpha | Knopf::Style::KlickBuffer); neuerChatFertig->setHintergrundBildZ( dynamic_cast(maximierenBild->getThis())); neuerChatFertig->setMausEreignisParameter(this); neuerChatFertig->setMausEreignis(freundesListeNeuerChatFertigME); initToolTip(neuerChatFertig, "Diesem Spieler eine Nachricht senden."); neuerChatFenster->addMember( dynamic_cast(neuerChatFertig->getThis())); neuesChatroomName = initTextFeld(5, 30, 235, 20, TextFeld::Style::Sichtbar | TextFeld::Style::TextFeld, "Chatroom Name"); neuesChatroomName->setTastaturEreignisParameter(this); neuesChatroomName->setTastaturEreignis(freundesListeNeuesChatroomNameTE); initToolTip( neuesChatroomName, "Name des Chatroom dem du beitreten möchtest."); neuerChatFenster->addMember( dynamic_cast(neuesChatroomName->getThis())); neuesChatroomFertig = initKnopf(245, 30, 20, 20, 0, ""); neuesChatroomFertig->setStyle(Knopf::Style::Sichtbar | Knopf::Style::Erlaubt | Knopf::Style::Hintergrund | Knopf::Style::HBild | Knopf::Style::HAlpha | Knopf::Style::KlickBuffer); neuesChatroomFertig->setHintergrundBildZ( dynamic_cast(maximierenBild->getThis())); neuesChatroomFertig->setMausEreignisParameter(this); neuesChatroomFertig->setMausEreignis(freundesListeNeuesChatroomFertigME); initToolTip(neuesChatroomFertig, "Chatroom erstellen oder beitreten."); neuerChatFenster->addMember( dynamic_cast(neuesChatroomFertig->getThis())); fenster->addMember(dynamic_cast(neuerChatFenster->getThis())); freundesListe = new FreundesListeObj(); freundesListe->setPosition(0, 100); freundesListe->setSize(270, bildschirmGröße.y - 200); fenster->addMember(dynamic_cast(freundesListe->getThis())); zNachLoginFenster->addMember(dynamic_cast(fenster->getThis())); animation = 1; tickVal = 0; neuerFreundSichtbar = 0; neuerChatSichtbar = 0; rend = 0; start(); } // Destruktor FreundesListe::~FreundesListe() { fenster = (Fenster*)fenster->release(); minimierenBild->release(); maximierenBild->release(); minMax = (Knopf*)minMax->release(); überschrift = (TextFeld*)überschrift->release(); accountName = (TextFeld*)accountName->release(); freundesListe = (FreundesListeObj*)freundesListe->release(); neuerFreund = (Knopf*)neuerFreund->release(); neuerChat = (Knopf*)neuerChat->release(); neuerFreundFenster = (Fenster*)neuerFreundFenster->release(); neuerFreundSpielerName = (TextFeld*)neuerFreundSpielerName->release(); neuerFreundFertig = (Knopf*)neuerFreundFertig->release(); neuerChatFenster = (Fenster*)neuerChatFenster->release(); neuerChatName = (TextFeld*)neuerChatName->release(); neuerChatFertig = (Knopf*)neuerChatFertig->release(); neuesChatroomName = (TextFeld*)neuesChatroomName->release(); neuesChatroomFertig = (Knopf*)neuesChatroomFertig->release(); } // nicht constant void FreundesListe::addMember(int accountId) { freundesListe->addMember(accountId); } void FreundesListe::removeMember(int accountId) { freundesListe->removeMember(accountId); } void FreundesListe::removeMember(FreundData* member) { freundesListe->removeMember(member); } void FreundesListe::removeAll() { freundesListe->removeAll(); } void FreundesListe::setName(int accountId, const char* txt) { freundesListe->setName(accountId, txt); } void FreundesListe::setStatus(int accountId, const char* txt) { freundesListe->setStatus(accountId, txt); } void FreundesListe::setOnline(int accountId, bool online) { freundesListe->setOnline(accountId, online); } void FreundesListe::setAnimation(int animation) { this->animation = animation; } void FreundesListe::thread() { bool err = 1; if (infoClient && loginClient) { Text* name = infoClient->getSpielerName(loginClient->getAccountId()); if (name) { accountName->setText(name->getText()); name->release(); err = 0; } } if (err && nachLogin->zNachrichtenListe()) { nachLogin->zNachrichtenListe()->addNachricht(new Text("Fehler"), new Text("Dein Accountname konnte nicht ermittelt werden."), new Text("Ok"), 0); } err = 0; if ((!chatClient || !chatClient->freundesListeAnfragen()) && nachLogin->zNachrichtenListe()) { nachLogin->zNachrichtenListe()->addNachricht(new Text("Fehler"), new Text("Deine Freunde konnten nicht geladen werden."), new Text("Ok"), 0); } run = 0; } void FreundesListe::zeigeEinladeKnopf(bool zeigen) { freundesListe->zeigeEinladeKnopf(zeigen); } bool FreundesListe::tick(double tickVal) { this->tickVal += tickVal * 400; int val = (int)this->tickVal; if (val < 1) { bool ret = rend; rend = 0; return ret; } if (val > 14) val = 14; this->tickVal -= val; switch (animation) { case 1: if (fenster->getX() < 0) { fenster->setPosition(fenster->getX() + val, fenster->getY()); if (fenster->getX() > 0) fenster->setPosition(0, fenster->getY()); } else if (fenster->getHeight() < bildschirmGröße.y - 100) { fenster->setSize(fenster->getBreite(), fenster->getHeight() + val); if (fenster->getHeight() > bildschirmGröße.y - 100) fenster->setSize(fenster->getBreite(), bildschirmGröße.y - 100); } else animation = 0; rend = 1; break; case 2: if (fenster->getHeight() > 20) { fenster->setSize(fenster->getBreite(), fenster->getHeight() - val); if (fenster->getHeight() < 20) fenster->setSize(fenster->getBreite(), 20); } else if (fenster->getX() > -250) { fenster->setPosition(fenster->getX() - val, fenster->getY()); if (fenster->getX() < -250) fenster->setPosition(-250, fenster->getY()); } else animation = 0; rend = 1; break; } if (neuerFreundSichtbar) { if (neuerFreundFenster->getHeight() != 30 && neuerChatFenster->hatStyleNicht(Fenster::Style::Sichtbar)) { neuerFreundFenster->addStyle(Fenster::Style::Sichtbar); neuerFreundFenster->setSize(neuerFreundFenster->getBreite(), neuerFreundFenster->getHeight() + val); freundesListe->setPosition( freundesListe->getX(), freundesListe->getY() + val); freundesListe->setSize( freundesListe->getBreite(), freundesListe->getHeight() - val); if (neuerFreundFenster->getHeight() > 30) { neuerFreundFenster->setSize( neuerFreundFenster->getBreite(), 30); freundesListe->setPosition(freundesListe->getX(), 130); freundesListe->setSize( freundesListe->getBreite(), bildschirmGröße.y - 230); } rend = 1; } } else { if (neuerFreundFenster->hatStyle(Fenster::Style::Sichtbar)) { neuerFreundFenster->setSize(neuerFreundFenster->getBreite(), neuerFreundFenster->getHeight() - val); freundesListe->setPosition( freundesListe->getX(), freundesListe->getY() - val); freundesListe->setSize( freundesListe->getBreite(), freundesListe->getHeight() + val); if (neuerFreundFenster->getHeight() < 0) { neuerFreundFenster->setSize(neuerFreundFenster->getBreite(), 0); neuerFreundFenster->removeStyle(Fenster::Style::Sichtbar); freundesListe->setPosition(freundesListe->getX(), 100); freundesListe->setSize( freundesListe->getBreite(), bildschirmGröße.y - 200); } rend = 1; } } if (neuerChatSichtbar) { if (neuerChatFenster->getHeight() != 55 && neuerFreundFenster->hatStyleNicht(Fenster::Style::Sichtbar)) { neuerChatFenster->addStyle(Fenster::Style::Sichtbar); neuerChatFenster->setSize(neuerChatFenster->getBreite(), neuerChatFenster->getHeight() + val); freundesListe->setPosition( freundesListe->getX(), freundesListe->getY() + val); freundesListe->setSize( freundesListe->getBreite(), freundesListe->getHeight() - val); if (neuerChatFenster->getHeight() > 55) { neuerChatFenster->setSize(neuerChatFenster->getBreite(), 55); freundesListe->setPosition(freundesListe->getX(), 155); freundesListe->setSize( freundesListe->getBreite(), bildschirmGröße.y - 255); } rend = 1; } } else { if (neuerChatFenster->hatStyle(Fenster::Style::Sichtbar)) { neuerChatFenster->setSize(neuerChatFenster->getBreite(), neuerChatFenster->getHeight() - val); freundesListe->setPosition( freundesListe->getX(), freundesListe->getY() - val); freundesListe->setSize( freundesListe->getBreite(), freundesListe->getHeight() + val); if (neuerChatFenster->getHeight() < 0) { neuerChatFenster->setSize(neuerChatFenster->getBreite(), 0); neuerChatFenster->removeStyle(Fenster::Style::Sichtbar); freundesListe->setPosition(freundesListe->getX(), 100); freundesListe->setSize( freundesListe->getBreite(), bildschirmGröße.y - 200); } rend = 1; } } bool ret = rend; rend = 0; return ret; } bool FreundesListe::druckMinMax(MausEreignis& me) { if (me.id == ME_RLinks) { if (minMax->zHintergrundBild() == minimierenBild) { animation = 2; minMax->setHintergrundBildZ( dynamic_cast(maximierenBild->getThis())); // TODO minMax->zToolTip()->setText( "Freundes Leiste maximieren." // ); } else { animation = 1; minMax->setHintergrundBildZ( dynamic_cast(minimierenBild->getThis())); // TODO minMax->zToolTip()->setText( "Freundes Leiste minimieren." // ); } } return 1; } bool FreundesListe::druckName(TastaturEreignis& te) { if (te.id == TE_Release && te.virtualKey == T_Enter) chatClient->accountNameÄndern(accountName->zText()->getText()); return 1; } bool FreundesListe::druckNeuerFreund(MausEreignis& me) { if (me.id == ME_RLinks) { neuerChatSichtbar = 0; neuerFreundSichtbar = !neuerFreundSichtbar; } return 1; } bool FreundesListe::druckNeuerChat(MausEreignis& me) { if (me.id == ME_RLinks) { neuerFreundSichtbar = 0; neuerChatSichtbar = !neuerChatSichtbar; } return 1; } bool FreundesListe::druckNeuerFreundSpielerName(TastaturEreignis& te) { if (!neuerFreundSichtbar) return 0; if (te.id == TE_Release && te.virtualKey == T_Enter) { MausEreignis me = {ME_RLinks, 0, 0, 0}; druckNeuerFreundFertig(me); } return 1; } bool FreundesListe::druckNeuerFreundFertig(MausEreignis& me) { if (!neuerFreundSichtbar) return 0; if (me.id == ME_RLinks) { if (neuerFreundSpielerName->zText()->getLength()) { int accountId = infoClient->getAccountId( neuerFreundSpielerName->zText()->getText()); if (accountId) { if (chatClient->freundesAnfrage(accountId)) { nachLogin->zNachrichtenListe()->addNachricht( new Text("Freundesanfrage"), new Text( "Es wurde eine Anfrage an den Spieler gesendet."), new Text("Ok"), 0); neuerFreundSichtbar = 0; } } else nachLogin->zNachrichtenListe()->addNachricht(new Text("Fehler"), new Text("Der Spieler wurde nicht gefunden."), new Text("Ok"), 0); } } return 1; } bool FreundesListe::druckNeuerChatName(TastaturEreignis& te) { if (!neuerChatSichtbar) return 0; if (te.id == TE_Release && te.virtualKey == T_Enter) { MausEreignis me = {ME_RLinks, 0, 0, 0}; druckNeuerChatFertig(me); } return 1; } bool FreundesListe::druckNeuerChatFertig(MausEreignis& me) { if (!neuerChatSichtbar) return 0; if (me.id == ME_RLinks) { if (neuerChatName->zText()->getLength()) { int accountId = infoClient->getAccountId(neuerChatName->zText()->getText()); if (accountId) { nachLogin->zChatLeiste()->addChat(accountId, 0); neuerChatSichtbar = 0; } else nachLogin->zNachrichtenListe()->addNachricht(new Text("Fehler"), new Text("Der Spieler wurde nicht gefunden."), new Text("Ok"), 0); } } return 1; } bool FreundesListe::druckNeuesChatroomName(TastaturEreignis& te) { if (!neuerChatSichtbar) return 0; if (te.id == TE_Release && te.virtualKey == T_Enter) { MausEreignis me = {ME_RLinks, 0, 0, 0}; druckNeuesChatroomFertig(me); } return 1; } bool FreundesListe::druckNeuesChatroomFertig(MausEreignis& me) { if (!neuerChatSichtbar) return 0; if (me.id == ME_RLinks) { if (neuesChatroomName->zText()->getLength()) { int chatroomId = infoClient->getChatroomId( neuesChatroomName->zText()->getText()); if (chatroomId) { if (chatClient->chatroomBetreten(chatroomId)) { nachLogin->zChatLeiste()->addChat(0, chatroomId); neuerChatSichtbar = 0; } } else { chatroomId = chatClient->chatroomErstellen( neuesChatroomName->zText()->getText()); if (chatroomId) { nachLogin->zChatLeiste()->addChat(0, chatroomId); neuerChatSichtbar = 0; } } } } return 1; } // constant bool FreundesListe::istFreund(int accId) const { return freundesListe->istFreund(accId); } // Nachrichten bool freundesListeMinMaxME(void* p, void* obj, MausEreignis me) { return ((FreundesListe*)p)->druckMinMax(me); } bool freundesListeNameTE(void* p, void* obj, TastaturEreignis te) { return ((FreundesListe*)p)->druckName(te); } bool freundesListeNeuerFreundME(void* p, void* obj, MausEreignis me) { return ((FreundesListe*)p)->druckNeuerFreund(me); } bool freundesListeNeuerChatME(void* p, void* obj, MausEreignis me) { return ((FreundesListe*)p)->druckNeuerChat(me); } bool freundesListeNeuerFreundSpielerNameTE( void* p, void* obj, TastaturEreignis te) { return ((FreundesListe*)p)->druckNeuerFreundSpielerName(te); } bool freundesListeNeuerFreundFertigME(void* p, void* obj, MausEreignis me) { return ((FreundesListe*)p)->druckNeuerFreundFertig(me); } bool freundesListeNeuerChatNameTE(void* p, void* obj, TastaturEreignis te) { return ((FreundesListe*)p)->druckNeuerChatName(te); } bool freundesListeNeuerChatFertigME(void* p, void* obj, MausEreignis me) { return ((FreundesListe*)p)->druckNeuerChatFertig(me); } bool freundesListeNeuesChatroomNameTE(void* p, void* obj, TastaturEreignis te) { return ((FreundesListe*)p)->druckNeuesChatroomName(te); } bool freundesListeNeuesChatroomFertigME(void* p, void* obj, MausEreignis me) { return ((FreundesListe*)p)->druckNeuesChatroomFertig(me); }