123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419 |
- #include "Bestenliste.h"
- #include <Rahmen.h>
- #include <Schrift.h>
- #include <Punkt.h>
- #include <Scroll.h>
- #include <TastaturEreignis.h>
- #include "../../Initialisierung/Initialisierung.h"
- #include "..\Spieler\Spieler.h"
- int getStellen(double d);
- // Inhalt der BLSpieler Klasse aus Bestenliste.h
- // Konstruktor
- BLSpieler::BLSpieler(int sNum, UIInit& uiFactory)
- : ReferenceCounter()
- {
- this->sNum = sNum;
- rahmen = new LRahmen();
- rahmen->setRamenBreite(1);
- rahmen->setSize(420, 20);
- name = initTextFeld(0, 0, 100, 20, uiFactory, TextFeld::Style::Sichtbar | TextFeld::Style::Center, "");
- punkte = initTextFeld(100, 0, 50, 20, uiFactory, TextFeld::Style::Sichtbar | TextFeld::Style::Center, "");
- kills = initTextFeld(150, 0, 40, 20, uiFactory, TextFeld::Style::Sichtbar | TextFeld::Style::Center, "");
- tode = initTextFeld(190, 0, 40, 20, uiFactory, TextFeld::Style::Sichtbar | TextFeld::Style::Center, "");
- schadenGemacht = initTextFeld(230, 0, 60, 20, uiFactory, TextFeld::Style::Sichtbar | TextFeld::Style::Center, "");
- schadenGenommen = initTextFeld(290, 0, 60, 20, uiFactory, TextFeld::Style::Sichtbar | TextFeld::Style::Center, "");
- präzision = initTextFeld(350, 0, 70, 20, uiFactory, TextFeld::Style::Sichtbar | TextFeld::Style::Center, "");
- }
- // Destruktor
- BLSpieler::~BLSpieler()
- {
- rahmen->release();
- name->release();
- punkte->release();
- kills->release();
- tode->release();
- schadenGemacht->release();
- schadenGenommen->release();
- präzision->release();
- }
- // nicht constant
- bool BLSpieler::update(Spieler* zSpieler)
- {
- if (sNum != zSpieler->getSpielerNummer())
- return 0;
- rahmen->setFarbe(zSpieler->getSpielerFarbe());
- name->setText(zSpieler->zName()->getText());
- name->setSchriftFarbe(zSpieler->getSpielerFarbe());
- punkte->setText(Text() += zSpieler->getPunkte());
- punkte->setSchriftFarbe(zSpieler->getSpielerFarbe());
- kills->setText(Text() += zSpieler->getKills());
- kills->setSchriftFarbe(zSpieler->getSpielerFarbe());
- tode->setText(Text() += zSpieler->getTode());
- tode->setSchriftFarbe(zSpieler->getSpielerFarbe());
- schadenGemacht->setText(Text() += zSpieler->getSchadenGemacht());
- schadenGemacht->setSchriftFarbe(zSpieler->getSpielerFarbe());
- schadenGenommen->setText(Text() += zSpieler->getSchadenBekommen());
- schadenGenommen->setSchriftFarbe(zSpieler->getSpielerFarbe());
- Text txt;
- double d = 100 * ((double)zSpieler->getTreffer() / zSpieler->getSchüsse());
- if (!zSpieler->getSchüsse())
- d = 0;
- txt.setPrecision(getStellen(d) + 2);
- txt += d;
- präzision->setText(txt);
- präzision->setSchriftFarbe(zSpieler->getSpielerFarbe());
- return 1;
- }
- void BLSpieler::render(int y, Bild& zRObj)
- {
- if (!zRObj.setDrawOptions(1, y, rahmen->getBreite(), rahmen->getHeight()))
- return;
- rahmen->render(zRObj);
- name->render(zRObj);
- punkte->render(zRObj);
- kills->render(zRObj);
- tode->render(zRObj);
- schadenGemacht->render(zRObj);
- schadenGenommen->render(zRObj);
- präzision->render(zRObj);
- zRObj.releaseDrawOptions();
- }
- // constant
- int BLSpieler::getSpielerNummer() const
- {
- return sNum;
- }
- int BLSpieler::getPunkte() const
- {
- return (int)*punkte->zText();
- }
- // Inhalt der BLTeam Klasse aus Bestenliste.h
- // Konstruktor
- BLTeam::BLTeam(int id, UIInit& uiFactory)
- : ReferenceCounter()
- {
- teamId = id;
- spielerAnzahl = 0;
- this->uiFactory = uiFactory;
- spieler = new RCArray< BLSpieler >();
- rahmen = new LRahmen();
- rahmen->setRamenBreite(1);
- name = initTextFeld(0, 0, 100, 20, uiFactory, TextFeld::Style::Sichtbar | TextFeld::Style::Center, "");
- punkte = initTextFeld(100, 0, 50, 20, uiFactory, TextFeld::Style::Sichtbar | TextFeld::Style::Center, "");
- }
- // Destruktor
- BLTeam::~BLTeam()
- {
- rahmen->release();
- spieler->release();
- name->release();
- punkte->release();
- }
- // nicht constant
- bool BLTeam::addSpieler(Spieler* zSpieler)
- {
- bool gefunden = 0;
- for (int i = 0; i < spielerAnzahl; i++)
- {
- if (spieler->z(i)->getSpielerNummer() == zSpieler->getSpielerNummer())
- {
- gefunden = 1;
- break;
- }
- }
- if (gefunden)
- return 0;
- BLSpieler* tmp = new BLSpieler(zSpieler->getSpielerNummer(), uiFactory);
- tmp->update(zSpieler);
- spieler->set(tmp, spielerAnzahl);
- spielerAnzahl++;
- return 1;
- }
- bool BLTeam::updateSpieler(Spieler* zSpieler)
- {
- for (int i = 0; i < spielerAnzahl; i++)
- {
- if (spieler->z(i)->getSpielerNummer() == zSpieler->getSpielerNummer())
- {
- spieler->z(i)->update(zSpieler);
- return 1;
- }
- }
- return 0;
- }
- void BLTeam::update(Team* zTeam)
- {
- rahmen->setFarbe(zTeam->farbe);
- name->setSchriftFarbe(zTeam->farbe);
- name->setText(zTeam->name);
- punkte->setSchriftFarbe(zTeam->farbe);
- Text pt;
- pt += zTeam->punkte;
- pt += "/";
- pt += zTeam->maxPunkte;
- punkte->setText(pt);
- }
- void BLTeam::render(int y, Bild& zRObj)
- {
- rahmen->setSize(422, 21 + 20 * spielerAnzahl);
- if (!zRObj.setDrawOptions(1, y, rahmen->getBreite(), rahmen->getHeight()))
- return;
- rahmen->render(zRObj);
- name->render(zRObj);
- punkte->render(zRObj);
- Array< bool >* gemahlt = new Array< bool >();
- for (int i = 0; i < spielerAnzahl; i++)
- gemahlt->set(0, i);
- int min = -1;
- int tmp = -1;
- for (int h = 0; h < spielerAnzahl; h++)
- {
- min = 0x80000000;
- tmp = 0x80000000;
- for (int i = 0; i < spielerAnzahl; i++)
- {
- if (!spieler->z(i))
- continue;
- if (gemahlt->hat(i) && gemahlt->get(i))
- continue;
- int p = spieler->z(i)->getPunkte();
- if (p > min)
- {
- min = p;
- tmp = i;
- }
- }
- if (tmp != 0x80000000)
- {
- gemahlt->set(1, tmp);
- spieler->z(tmp)->render(20 + 20 * h, zRObj);
- }
- else
- break;
- }
- gemahlt->release();
- zRObj.releaseDrawOptions();
- }
- // constant
- int BLTeam::getSpielerAnzahl() const
- {
- return spielerAnzahl;
- }
- int BLTeam::getPunkte() const
- {
- Text* tmp = punkte->zText()->getTeilText(0, punkte->zText()->positionVon('/'));
- int ret = (int)*tmp;
- tmp->release();
- return ret;
- }
- int BLTeam::getHeight() const
- {
- return 21 + spielerAnzahl * 20;
- }
- // Inhalt der Bestenliste Klasse aus Bestenliste.h
- // Konstruktor
- Bestenliste::Bestenliste(UIInit& uiFactory)
- : ReferenceCounter()
- {
- this->uiFactory = uiFactory;
- rahmen = new LRahmen();
- rahmen->setRamenBreite(1);
- rahmen->setFarbe(0xFFFFFFFF);
- rahmen->setSize(440, 200);
- teams = new RCArray< BLTeam >();
- name = uiFactory.createTextFeld(uiFactory.initParam);
- name->setStyle(TextFeld::Style::Sichtbar | TextFeld::Style::Center);
- name->setText("Name");
- name->setSize(100, 30);
- name->setPosition(0, 0);
- punkte = uiFactory.createTextFeld(uiFactory.initParam);
- punkte->setStyle(TextFeld::Style::Sichtbar | TextFeld::Style::Center);
- punkte->setText("Punkte");
- punkte->setSize(50, 30);
- punkte->setPosition(100, 0);
- kills = uiFactory.createTextFeld(uiFactory.initParam);
- kills->setStyle(TextFeld::Style::Sichtbar | TextFeld::Style::Center);
- kills->setText("Kills");
- kills->setSize(40, 30);
- kills->setPosition(150, 0);
- tode = uiFactory.createTextFeld(uiFactory.initParam);
- tode->setStyle(TextFeld::Style::Sichtbar | TextFeld::Style::Center);
- tode->setText("Tode");
- tode->setSize(40, 30);
- tode->setPosition(190, 0);
- schadenGemacht = uiFactory.createTextFeld(uiFactory.initParam);
- schadenGemacht->setStyle(TextFeld::Style::Sichtbar | TextFeld::Style::Center | TextFeld::Style::Mehrzeilig);
- schadenGemacht->setText("Schaden\ngemacht");
- schadenGemacht->setSize(60, 30);
- schadenGemacht->setPosition(230, 0);
- schadenGenommen = uiFactory.createTextFeld(uiFactory.initParam);
- schadenGenommen->setStyle(TextFeld::Style::Sichtbar | TextFeld::Style::Center | TextFeld::Style::Mehrzeilig);
- schadenGenommen->setText("Schaden\ngenommen");
- schadenGenommen->setSize(60, 30);
- schadenGenommen->setPosition(290, 0);
- präzision = uiFactory.createTextFeld(uiFactory.initParam);
- präzision->setStyle(TextFeld::Style::Sichtbar | TextFeld::Style::Center | TextFeld::Style::Mehrzeilig);
- präzision->setText("präzision");
- präzision->setSize(70, 30);
- präzision->setPosition(350, 0);
- scroll = new VScrollBar();
- scroll->setKlickScroll(7);
- sichtbar = 0;
- teamAnzahl = 0;
- }
- // Destruktor
- Bestenliste::~Bestenliste()
- {
- rahmen->release();
- teams->release();
- name->release();
- punkte->release();
- kills->release();
- tode->release();
- schadenGemacht->release();
- schadenGenommen->release();
- präzision->release();
- scroll->release();
- }
- // nicht constant
- void Bestenliste::setTeamAnzahl(int anz)
- {
- teamAnzahl = anz;
- }
- void Bestenliste::addSpieler(Spieler* zSpieler)
- {
- int team = zSpieler->zTeam()->id;
- if (team < 0)
- return;
- if (!teams->z(team))
- teams->set(new BLTeam(team, uiFactory), team);
- teams->z(team)->addSpieler(zSpieler);
- }
- void Bestenliste::updateSpieler(Spieler* zSpieler)
- {
- if (teams->z(zSpieler->zTeam()->id))
- teams->z(zSpieler->zTeam()->id)->updateSpieler(zSpieler);
- }
- void Bestenliste::updateTeam(Team* zTeam)
- {
- if (teams->z(zTeam->id))
- teams->z(zTeam->id)->update(zTeam);
- }
- void Bestenliste::doTastaturEreignis(TastaturEreignis& te)
- {
- if (te.id == TE_Press && te.taste == T_Tab)
- sichtbar = !sichtbar;
- }
- void Bestenliste::doPublicMausEreignis(MausEreignis& me)
- {
- if (!sichtbar)
- return;
- scroll->doMausMessage(rahmen->getBreite() - 15, 1, 15, rahmen->getHeight() - 2, me);
- }
- void Bestenliste::render(Bild& zRObj)
- {
- if (!sichtbar)
- return;
- if (!zRObj.setDrawOptions(0, 0, rahmen->getBreite(), rahmen->getHeight()))
- return;
- rahmen->render(zRObj);
- zRObj.alphaRegion(1, 1, rahmen->getBreite() - 2, rahmen->getHeight() - 2, 0xA0000000);
- zRObj.addScrollOffset(0, scroll->getScroll());
- name->render(zRObj);
- punkte->render(zRObj);
- kills->render(zRObj);
- tode->render(zRObj);
- schadenGemacht->render(zRObj);
- schadenGenommen->render(zRObj);
- präzision->render(zRObj);
- int yOff = 30;
- Array< bool >* gemahlt = new Array< bool >();
- for (int i = 1; i <= teamAnzahl; i++)
- gemahlt->set(0, i);
- int min = -1;
- int tmp = -1;
- for (int h = 0; h < teamAnzahl; h++)
- {
- min = -1;
- tmp = -1;
- for (int i = 0; i < teamAnzahl; i++)
- {
- if (!teams->z(i + 1))
- continue;
- if (gemahlt->hat(i + 1) && gemahlt->get(i + 1))
- continue;
- int p = teams->z(i + 1)->getPunkte();
- if (p > min)
- {
- min = p;
- tmp = i + 1;
- }
- }
- if (tmp >= 0)
- {
- gemahlt->set(1, tmp);
- teams->z(tmp)->render(yOff, zRObj);
- yOff += teams->z(tmp)->getHeight();
- }
- else
- break;
- }
- gemahlt->release();
- zRObj.addScrollOffset(0, -scroll->getScroll());
- scroll->update(yOff, rahmen->getHeight() - 2);
- scroll->render(rahmen->getBreite() - 16, 1, 15, rahmen->getHeight() - 2, zRObj);
- zRObj.releaseDrawOptions();
- }
- // constant
- int Bestenliste::getTeamAnzahl() const
- {
- return teamAnzahl;
- }
- bool Bestenliste::teamExistiert(int team) const
- {
- return teams->z(team) != 0;
- }
- int Bestenliste::getTeamPunkte(int team) const
- {
- return teams->z(team) ? teams->z(team)->getPunkte() : 0;
- }
|