Spiel.cpp 24 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000
  1. #include "Spiel.h"
  2. // Konstruktor
  3. Spiel::Spiel()
  4. {
  5. lastRunnedTrigger = 0;
  6. zuletztEingeschalteteBariere = 0;
  7. zuletztAusgeschalteteBariere = 0;
  8. zuletztBewegteBariere = 0;
  9. lastTeamChangedBase = 0;
  10. lastDropedDrop = 0;
  11. zuletztAufgehobenerGegenstand = KEIN_GEGENSTAND;
  12. zuletztBenutzterGegenstand = KEIN_GEGENSTAND;
  13. zuletztGedropterGegenstand = KEIN_GEGENSTAND;
  14. zuletztAbgefeuertesGeschoss = 0;
  15. zuletztUmgelenktesGeschoss = 0;
  16. zuletztBariereGetroffenesGeschoss = 0;
  17. zuletztTunnelBenutztesGeschoss = 0;
  18. zuletztGeschossGetroffenesGeschoss = 0;
  19. zuletztAktivierterSchalter = 0;
  20. zuletztSchadenGemachterSpieler = 0;
  21. zuletztSchadenGenommenerSpieler = 0;
  22. zuletztGeheilterSpieler = 0;
  23. zuletztLevelUpSpieler = 0;
  24. zuletztErfahrungBekommenerSpieler = 0;
  25. zuletztGegenstandAktivierterSpieler = 0;
  26. zuletztGegenstandAufgehobenerSpieler = 0;
  27. zuletztSchalterAktivierterSpieler = 0;
  28. zuletztTunnelBenutzterSpieler = 0;
  29. zuletztGestorbenerSpieler = 0;
  30. zuletztWiederbelebterSpieler = 0;
  31. zuletztGeschossenerSpieler = 0;
  32. zuletztAbgelaufenerTimer = 0;
  33. zuletztGestarteterTimer = 0;
  34. zuletztPausierterTimer = 0;
  35. zuletztFortgesetzterTimer = 0;
  36. zuletztBenutzterTunnel = 0;
  37. zuletztBenutzteUmlenkung = 0;
  38. ref = 1;
  39. }
  40. // Destruktor
  41. Spiel::~Spiel()
  42. {
  43. if( lastRunnedTrigger )
  44. lastRunnedTrigger->release();
  45. if( zuletztEingeschalteteBariere )
  46. zuletztEingeschalteteBariere->release();
  47. if( zuletztAusgeschalteteBariere )
  48. zuletztAusgeschalteteBariere->release();
  49. if( zuletztBewegteBariere )
  50. zuletztBewegteBariere->release();
  51. if( lastTeamChangedBase )
  52. lastTeamChangedBase->release();
  53. if( lastDropedDrop )
  54. lastDropedDrop->release();
  55. if( zuletztAbgefeuertesGeschoss )
  56. zuletztAbgefeuertesGeschoss->release();
  57. if( zuletztUmgelenktesGeschoss )
  58. zuletztUmgelenktesGeschoss->release();
  59. if( zuletztBariereGetroffenesGeschoss )
  60. zuletztBariereGetroffenesGeschoss->release();
  61. if( zuletztTunnelBenutztesGeschoss )
  62. zuletztTunnelBenutztesGeschoss->release();
  63. if( zuletztGeschossGetroffenesGeschoss )
  64. zuletztGeschossGetroffenesGeschoss->release();
  65. if( zuletztAktivierterSchalter )
  66. zuletztAktivierterSchalter->release();
  67. if( zuletztSchadenGemachterSpieler )
  68. zuletztSchadenGemachterSpieler->release();
  69. if( zuletztSchadenGenommenerSpieler )
  70. zuletztSchadenGenommenerSpieler->release();
  71. if( zuletztGeheilterSpieler )
  72. zuletztGeheilterSpieler->release();
  73. if( zuletztLevelUpSpieler )
  74. zuletztLevelUpSpieler->release();
  75. if( zuletztErfahrungBekommenerSpieler )
  76. zuletztErfahrungBekommenerSpieler->release();
  77. if( zuletztGegenstandAktivierterSpieler )
  78. zuletztGegenstandAktivierterSpieler->release();
  79. if( zuletztGegenstandAufgehobenerSpieler )
  80. zuletztGegenstandAufgehobenerSpieler->release();
  81. if( zuletztSchalterAktivierterSpieler )
  82. zuletztSchalterAktivierterSpieler->release();
  83. if( zuletztTunnelBenutzterSpieler )
  84. zuletztTunnelBenutzterSpieler->release();
  85. if( zuletztGestorbenerSpieler )
  86. zuletztGestorbenerSpieler->release();
  87. if( zuletztWiederbelebterSpieler )
  88. zuletztWiederbelebterSpieler->release();
  89. if( zuletztGeschossenerSpieler )
  90. zuletztGeschossenerSpieler->release();
  91. if( zuletztAbgelaufenerTimer )
  92. zuletztAbgelaufenerTimer->release();
  93. if( zuletztGestarteterTimer )
  94. zuletztGestarteterTimer->release();
  95. if( zuletztPausierterTimer )
  96. zuletztPausierterTimer->release();
  97. if( zuletztFortgesetzterTimer )
  98. zuletztFortgesetzterTimer->release();
  99. if( zuletztBenutzterTunnel )
  100. zuletztBenutzterTunnel->release();
  101. if( zuletztBenutzteUmlenkung )
  102. zuletztBenutzteUmlenkung->release();
  103. }
  104. // nicht constant
  105. void Spiel::lock()
  106. {
  107. }
  108. void Spiel::unlock()
  109. {
  110. }
  111. void Spiel::setSchrift( Schrift *schrift )
  112. {
  113. }
  114. // call 4
  115. void Spiel::setBildschirm( Bildschirm *zScreen )
  116. {
  117. }
  118. // call 3
  119. void Spiel::nachricht( int län, char *bytes )
  120. {
  121. }
  122. void Spiel::setKlients( KSGClient::InformationServerClient *infoKlient, KSGClient::SpielServerClient *spielKlient )
  123. {
  124. }
  125. // call 2
  126. void Spiel::setKarteId( int karteId )
  127. {
  128. }
  129. // call 1
  130. void Spiel::ladeDaten()
  131. {
  132. }
  133. // call 5
  134. void Spiel::doPublicMausEreignis( MausEreignis &me )
  135. {
  136. }
  137. void Spiel::doTastaturEreignis( TastaturEreignis &te )
  138. {
  139. }
  140. void Spiel::stknVerarbeitung()
  141. {
  142. }
  143. bool Spiel::tick( double zeit )
  144. {
  145. }
  146. void Spiel::render( Bild &zRObj )
  147. {
  148. }
  149. void Spiel::setMapSize( int width, int height )
  150. {
  151. mapSize = Punkt( width, height );
  152. }
  153. void Spiel::setPausiert( bool pausiert )
  154. {
  155. this->pause = pausiert;
  156. }
  157. void Spiel::addVariable( const char *name, Variable *var )
  158. {
  159. bool found = 0;
  160. for( auto v = variablen.getIterator(); v; v++ )
  161. {
  162. if( v->getName().istGleich( name ) )
  163. {
  164. found = 1;
  165. break;
  166. }
  167. }
  168. if( !found )
  169. variablen.add( new VarPointer( name, var ) );
  170. else
  171. var->release();
  172. }
  173. void Spiel::setVariable( const char *name, Variable *var )
  174. {
  175. bool found = 0;
  176. for( auto v = variablen.getIterator(); v; v++ )
  177. {
  178. if( v->getName().istGleich( name ) )
  179. {
  180. v->setVariable( var );
  181. break;
  182. }
  183. }
  184. if( !found )
  185. var->release();
  186. }
  187. void Spiel::addTeam( Team *team )
  188. {
  189. teams.add( team );
  190. }
  191. void Spiel::addSpieler( Spieler *spieler )
  192. {
  193. this->spieler.add( spieler );
  194. }
  195. void Spiel::addBariere( Bariere *bariere )
  196. {
  197. barieren.add( bariere );
  198. }
  199. void Spiel::addBase( Base *base )
  200. {
  201. basen.add( base );
  202. }
  203. void Spiel::addDrop( Drop *drop )
  204. {
  205. drops.add( drop );
  206. }
  207. void Spiel::addGegenstand( Gegenstand *gegenstand )
  208. {
  209. items.add( gegenstand );
  210. zuletztGedropterGegenstand = gegenstand->getTyp();
  211. Ereignis *e = new Ereignis( GEGENSTAND_DROPED );
  212. e->addParameter( "Betroffener Gegenstand", gegenstand->getThis() );
  213. throwEvent( e );
  214. }
  215. void Spiel::addGeschoss( Geschoss *geschoss )
  216. {
  217. if( zuletztAbgefeuertesGeschoss )
  218. zuletztAbgefeuertesGeschoss->release();
  219. zuletztAbgefeuertesGeschoss = geschoss;
  220. shots.add( geschoss );
  221. }
  222. void Spiel::addSchalter( Schalter *schalter )
  223. {
  224. this->schalter.add( schalter );
  225. }
  226. void Spiel::addSchiene( Schiene *schiene )
  227. {
  228. schienen.add( schiene );
  229. }
  230. void Spiel::addTimer( Timer *timer )
  231. {
  232. this->timer.add( timer );
  233. }
  234. void Spiel::addTunnel( Tunnel *tunnel )
  235. {
  236. this->tunnel.add( tunnel );
  237. }
  238. void Spiel::addUmlenkung( Umlenkung *umlenkung )
  239. {
  240. umlenkungen.add( umlenkung );
  241. }
  242. void Spiel::addTrigger( Trigger *trigger )
  243. {
  244. this->trigger.add( trigger );
  245. }
  246. void Spiel::addTriggerRun( TriggerRun *tRun )
  247. {
  248. if( tRun )
  249. {
  250. if( lastRunnedTrigger )
  251. lastRunnedTrigger->release();
  252. lastRunnedTrigger = tRun->getTrigger();
  253. triggerRuns.add( tRun );
  254. }
  255. }
  256. void Spiel::spielerActivate( Spieler *zSpieler )
  257. {
  258. // spieler - item intersection
  259. for( int i = 0; i < items.getEintragAnzahl(); i++ )
  260. {
  261. if( items.z( i )->intersectsWith( zSpieler ) )
  262. {
  263. items.remove( i );
  264. zSpieler->addItem( items.z( i )->getTyp(), 1, this );
  265. i--;
  266. }
  267. }
  268. // Spieler - schalter intersection
  269. for( int i = 0; i < schalter.getEintragAnzahl(); i++ )
  270. {
  271. if( schalter.z( i )->intersectsWith( zSpieler ) )
  272. {
  273. zSpieler->addSchalterBenutzung( this );
  274. schalter.z( i )->press( this );
  275. }
  276. }
  277. // Spieler - tunnel intersection
  278. for( int i = 0; i < tunnel.getEintragAnzahl(); i++ )
  279. {
  280. if( tunnel.z( i )->intersectsWith( zSpieler ) )
  281. {
  282. zSpieler->addTunnelBenutzung( this );
  283. zSpieler->setX( (float)tunnel.z( i )->getZielX() - zSpieler->getWidth() / 2.f );
  284. zSpieler->setY( (float)tunnel.z( i )->getZielY() - zSpieler->getHeight() / 2.f );
  285. tunnel.z( i )->addBenutzung( this );
  286. }
  287. }
  288. }
  289. Team *Spiel::getTeam( int id ) const
  290. {
  291. for( auto t = teams.getIterator(); t; t++ )
  292. {
  293. if( t->getTeamNummer() == id )
  294. return (Team *)t->getThis();
  295. }
  296. return 0;
  297. }
  298. Spieler *Spiel::getSpieler( int id ) const
  299. {
  300. for( auto s = spieler.getIterator(); s; s++ )
  301. {
  302. if( s->getId() == id )
  303. return (Spieler *)s->getThis();
  304. }
  305. return 0;
  306. }
  307. Iterator<Spieler *> Spiel::getSpieler() const
  308. {
  309. return spieler.getIterator();
  310. }
  311. Iterator<Bariere *> Spiel::getBarieren() const
  312. {
  313. return barieren.getIterator();
  314. }
  315. Bariere *Spiel::getBariere( int id ) const
  316. {
  317. for( auto b = barieren.getIterator(); b; b++ )
  318. {
  319. if( b->getId() == id )
  320. return (Bariere *)b->getThis();
  321. }
  322. return 0;
  323. }
  324. Base *Spiel::getBase( int id ) const
  325. {
  326. for( auto b = basen.getIterator(); b; b++ )
  327. {
  328. if( b->getId() == id )
  329. return (Base *)b->getThis();
  330. }
  331. return 0;
  332. }
  333. Drop *Spiel::getDrop( int id ) const
  334. {
  335. for( auto d = drops.getIterator(); d; d++ )
  336. {
  337. if( d->getId() == id )
  338. return (Drop *)d->getThis();
  339. }
  340. return 0;
  341. }
  342. Schalter *Spiel::getSchalter( int id ) const
  343. {
  344. for( auto s = schalter.getIterator(); s; s++ )
  345. {
  346. if( s->getId() == id )
  347. return (Schalter *)s->getThis();
  348. }
  349. return 0;
  350. }
  351. Schiene *Spiel::getSchiene( int id ) const
  352. {
  353. for( auto s = schienen.getIterator(); s; s++ )
  354. {
  355. if( s->getId() == id )
  356. return (Schiene *)s->getThis();
  357. }
  358. return 0;
  359. }
  360. Timer *Spiel::getTimer( int id ) const
  361. {
  362. for( auto t = timer.getIterator(); t; t++ )
  363. {
  364. if( t->getId() == id )
  365. return (Timer *)t->getThis();
  366. }
  367. return 0;
  368. }
  369. Tunnel *Spiel::getTunnel( int id ) const
  370. {
  371. for( auto t = tunnel.getIterator(); t; t++ )
  372. {
  373. if( t->getId() == id )
  374. return (Tunnel *)t->getThis();
  375. }
  376. return 0;
  377. }
  378. Umlenkung *Spiel::getUmlenkung( int id ) const
  379. {
  380. for( auto u = umlenkungen.getIterator(); u; u++ )
  381. {
  382. if( u->getId() == id )
  383. return (Umlenkung *)u->getThis();
  384. }
  385. return 0;
  386. }
  387. Trigger *Spiel::getTrigger( int id ) const
  388. {
  389. for( auto t = trigger.getIterator(); t; t++ )
  390. {
  391. if( t->getId() == id )
  392. return (Trigger *)t->getThis();
  393. }
  394. return 0;
  395. }
  396. Variable *Spiel::getVariable( const char *name ) const
  397. {
  398. for( auto v = variablen.getIterator(); v; v++ )
  399. {
  400. if( v->getName().istGleich( name ) )
  401. return v->getVariable();
  402. }
  403. return 0;
  404. }
  405. Variable *Spiel::zVariable( const char *name ) const
  406. {
  407. for( auto v = variablen.getIterator(); v; v++ )
  408. {
  409. if( v->getName().istGleich( name ) )
  410. return v->zVariable();
  411. }
  412. return 0;
  413. }
  414. bool Spiel::istPausiert() const
  415. {
  416. return pause;
  417. }
  418. void Spiel::activateShalter( int id )
  419. {
  420. for( auto s = schalter.getIterator(); s; s++ )
  421. {
  422. if( s->getId() == id )
  423. s->press( this );
  424. }
  425. }
  426. void Spiel::throwEvent( Ereignis *e )
  427. {
  428. for( auto t = trigger.getIterator(); t; t++ )
  429. {
  430. if( t->hatEreignis( e->getTyp() ) )
  431. {
  432. TriggerRun *tr = t->runTrigger( e->getThis(), this );
  433. if( tr )
  434. triggerRuns.add( tr );
  435. }
  436. }
  437. e->release();
  438. }
  439. bool Spiel::needEvent( EreignisTyp typ ) const
  440. {
  441. for( auto t = trigger.getIterator(); t; t++ )
  442. {
  443. if( t->hatEreignis( typ ) )
  444. return 1;
  445. }
  446. return 0;
  447. }
  448. int Spiel::getNextId()
  449. {
  450. return ++nextId;
  451. }
  452. double Spiel::getRand()
  453. {
  454. return randG.rand();
  455. }
  456. int Spiel::getTickCount() const
  457. {
  458. return gameTicks;
  459. }
  460. void Spiel::setEnde( Team *zGewinner )
  461. {
  462. zWinner = zGewinner;
  463. // TODO initialize ende dialog
  464. }
  465. Trigger *Spiel::getRandomTrigger()
  466. {
  467. if( !trigger.getEintragAnzahl() )
  468. return 0;
  469. return trigger.get( (int)( randG.rand() * trigger.getEintragAnzahl() ) );
  470. }
  471. Trigger *Spiel::getLastRunnedTrigger() const
  472. {
  473. return lastRunnedTrigger ? (Trigger *)lastRunnedTrigger->getThis() : 0;
  474. }
  475. Bariere *Spiel::getRandomBariere()
  476. {
  477. return barieren.get( (int)( randG.rand() * barieren.getEintragAnzahl() ) );
  478. }
  479. void Spiel::setZuletztEingeschalteteBariere( Bariere *b )
  480. {
  481. if( zuletztEingeschalteteBariere )
  482. zuletztEingeschalteteBariere->release();
  483. zuletztEingeschalteteBariere = b;
  484. }
  485. Bariere *Spiel::getZuletztEingeschalteteBariere() const
  486. {
  487. return zuletztEingeschalteteBariere ? (Bariere *)zuletztEingeschalteteBariere->getThis() : 0;
  488. }
  489. void Spiel::setZuletztAusgeschalteteBariere( Bariere *b )
  490. {
  491. if( zuletztAusgeschalteteBariere )
  492. zuletztAusgeschalteteBariere->release();
  493. zuletztAusgeschalteteBariere = b;
  494. }
  495. Bariere *Spiel::getZuletztAusgeschalteteBariere() const
  496. {
  497. return zuletztAusgeschalteteBariere ? (Bariere *)zuletztAusgeschalteteBariere->getThis() : 0;
  498. }
  499. void Spiel::setZuletztBewegteBariere( Bariere *b )
  500. {
  501. if( zuletztBewegteBariere )
  502. zuletztBewegteBariere->release();
  503. zuletztBewegteBariere = b;
  504. }
  505. Bariere *Spiel::getZuletztBewegteBariere() const
  506. {
  507. return zuletztBewegteBariere ? (Bariere *)zuletztBewegteBariere->getThis() : 0;
  508. }
  509. Base *Spiel::getRandomBase()
  510. {
  511. if( !basen.getEintragAnzahl() )
  512. return 0;
  513. return basen.get( (int)( randG.rand() * basen.getEintragAnzahl() ) );
  514. }
  515. void Spiel::setLastTeamChangedBase( Base *b )
  516. {
  517. if( lastTeamChangedBase )
  518. lastTeamChangedBase->release();
  519. lastTeamChangedBase = b;
  520. }
  521. Base *Spiel::getLastTeamChangedBase() const
  522. {
  523. return lastTeamChangedBase ? (Base *)lastTeamChangedBase->getThis() : 0;
  524. }
  525. Drop *Spiel::getRandomDrop()
  526. {
  527. if( !drops.getEintragAnzahl() )
  528. return 0;
  529. return drops.get( (int)( randG.rand() * drops.getEintragAnzahl() ) );
  530. }
  531. void Spiel::setLastDrop( Drop *d )
  532. {
  533. if( lastDropedDrop )
  534. lastDropedDrop->release();
  535. lastDropedDrop = d;
  536. }
  537. Drop *Spiel::getLastDrop() const
  538. {
  539. return lastDropedDrop ? (Drop *)lastDropedDrop->getThis() : 0;
  540. }
  541. void Spiel::setItemZuletztAufgehoben( GegenstandTyp g )
  542. {
  543. zuletztAufgehobenerGegenstand = g;
  544. }
  545. GegenstandTyp Spiel::getItemZuletztAufgehoben() const
  546. {
  547. return zuletztAufgehobenerGegenstand;
  548. }
  549. void Spiel::setItemZuletztAktiviert( GegenstandTyp g )
  550. {
  551. zuletztBenutzterGegenstand = g;
  552. }
  553. GegenstandTyp Spiel::getItemZuletztAktiviert() const
  554. {
  555. return zuletztBenutzterGegenstand;
  556. }
  557. GegenstandTyp Spiel::getItemZuletztGedropt() const
  558. {
  559. return zuletztGedropterGegenstand;
  560. }
  561. Geschoss *Spiel::getRandomGeschoss()
  562. {
  563. if( !shots.getEintragAnzahl() )
  564. return 0;
  565. return shots.get( (int)( randG.rand() * shots.getEintragAnzahl() ) );
  566. }
  567. Geschoss *Spiel::getGeschossZuletztAbgefeuert() const
  568. {
  569. return zuletztAbgefeuertesGeschoss ? (Geschoss *)zuletztAbgefeuertesGeschoss->getThis() : 0;
  570. }
  571. void Spiel::setGeschossZuletztUmgelenkt( Geschoss *g )
  572. {
  573. if( zuletztUmgelenktesGeschoss )
  574. zuletztUmgelenktesGeschoss->release();
  575. zuletztUmgelenktesGeschoss = g;
  576. }
  577. Geschoss *Spiel::getGeschossZuletztUmgelenkt() const
  578. {
  579. return zuletztUmgelenktesGeschoss ? (Geschoss *)zuletztUmgelenktesGeschoss->getThis() : 0;
  580. }
  581. Geschoss *Spiel::getGeschossZuletztBariereGetroffen() const
  582. {
  583. return zuletztBariereGetroffenesGeschoss ? (Geschoss *)zuletztBariereGetroffenesGeschoss->getThis() : 0;
  584. }
  585. void Spiel::setGeschossZuletztTunnelBenutzt( Geschoss *g )
  586. {
  587. if( zuletztTunnelBenutztesGeschoss )
  588. zuletztTunnelBenutztesGeschoss->release();
  589. zuletztTunnelBenutztesGeschoss = g;
  590. }
  591. Geschoss *Spiel::getGeschossZuletztTunnelBenutzt() const
  592. {
  593. return zuletztTunnelBenutztesGeschoss ? (Geschoss *)zuletztTunnelBenutztesGeschoss->getThis() : 0;
  594. }
  595. void Spiel::setGeschossZuletztGeschossGetroffen( Geschoss *g )
  596. {
  597. if( zuletztGeschossGetroffenesGeschoss )
  598. zuletztGeschossGetroffenesGeschoss->release();
  599. zuletztGeschossGetroffenesGeschoss = g;
  600. }
  601. Geschoss *Spiel::getGeschossZuletztGeschossGetroffen() const
  602. {
  603. return zuletztGeschossGetroffenesGeschoss ? (Geschoss *)zuletztGeschossGetroffenesGeschoss->getThis() : 0;
  604. }
  605. Schalter *Spiel::getRandomSchalter()
  606. {
  607. if( !schalter.getEintragAnzahl() )
  608. return 0;
  609. return schalter.get( (int)( randG.rand() * schalter.getEintragAnzahl() ) );
  610. }
  611. void Spiel::setSchalterZuletztAktiviert( Schalter *s )
  612. {
  613. if( zuletztAktivierterSchalter )
  614. zuletztAktivierterSchalter->release();
  615. zuletztAktivierterSchalter = s;
  616. }
  617. Schalter *Spiel::getSchalterZuletztAktiviert() const
  618. {
  619. return zuletztAktivierterSchalter ? (Schalter *)zuletztAktivierterSchalter->getThis() : 0;
  620. }
  621. Spieler *Spiel::getRandomSpieler()
  622. {
  623. if( !spieler.getEintragAnzahl() )
  624. return 0;
  625. return spieler.get( (int)( randG.rand() * spieler.getEintragAnzahl() ) );
  626. }
  627. Spieler *Spiel::getRandomSpieler( Team *zTeam )
  628. {
  629. if( !zTeam || !zTeam->getSpielerAnzahl() )
  630. return 0;
  631. int index = (int)( randG.rand() * zTeam->getSpielerAnzahl() );
  632. for( auto s = spieler.getIterator(); s; s++ )
  633. {
  634. if( s->zTeam() == zTeam )
  635. {
  636. if( index-- <= 0 )
  637. return (Spieler *)s->getThis();
  638. }
  639. }
  640. return 0;
  641. }
  642. void Spiel::setSpielerZuletztSchadenGemacht( Spieler *s )
  643. {
  644. if( zuletztSchadenGemachterSpieler )
  645. zuletztSchadenGemachterSpieler->release();
  646. zuletztSchadenGemachterSpieler = s;
  647. }
  648. Spieler *Spiel::getSpielerZuletztSchadenGemacht() const
  649. {
  650. return zuletztSchadenGemachterSpieler ? (Spieler *)zuletztSchadenGemachterSpieler->getThis() : 0;
  651. }
  652. void Spiel::setSpielerZuletztSchadenGenommen( Spieler *s )
  653. {
  654. if( zuletztSchadenGenommenerSpieler )
  655. zuletztSchadenGenommenerSpieler->release();
  656. zuletztSchadenGenommenerSpieler = s;
  657. }
  658. Spieler *Spiel::getSpielerZuletztSchadenGenommen() const
  659. {
  660. return zuletztSchadenGenommenerSpieler ? (Spieler *)zuletztSchadenGenommenerSpieler->getThis() : 0;
  661. }
  662. void Spiel::setSpielerZuletztGeheilt( Spieler *s )
  663. {
  664. if( zuletztGeheilterSpieler )
  665. zuletztGeheilterSpieler->release();
  666. zuletztGeheilterSpieler = s;
  667. }
  668. Spieler *Spiel::getSpielerZuletztGeheilt() const
  669. {
  670. return zuletztGeheilterSpieler ? (Spieler *)zuletztGeheilterSpieler->getThis() : 0;
  671. }
  672. void Spiel::setSpielerZuletztLevelUp( Spieler *s )
  673. {
  674. if( zuletztLevelUpSpieler )
  675. zuletztLevelUpSpieler->release();
  676. zuletztLevelUpSpieler = s;
  677. }
  678. Spieler *Spiel::getSpielerZuletztLevelUp() const
  679. {
  680. return zuletztLevelUpSpieler ? (Spieler *)zuletztLevelUpSpieler->getThis() : 0;
  681. }
  682. void Spiel::setSpielerZuletztErfahrungBekommen( Spieler *s )
  683. {
  684. if( zuletztErfahrungBekommenerSpieler )
  685. zuletztErfahrungBekommenerSpieler->release();
  686. zuletztErfahrungBekommenerSpieler = s;
  687. }
  688. Spieler *Spiel::getSpielerZuletztErfahrungBekommen() const
  689. {
  690. return zuletztErfahrungBekommenerSpieler ? (Spieler *)zuletztErfahrungBekommenerSpieler->getThis() : 0;
  691. }
  692. void Spiel::setSpielerZuletztGegenstandAktiviert( Spieler *s )
  693. {
  694. if( zuletztGegenstandAktivierterSpieler )
  695. zuletztGegenstandAktivierterSpieler->release();
  696. zuletztGegenstandAktivierterSpieler = s;
  697. }
  698. Spieler *Spiel::getSpielerZuletztGegenstandAktiviert() const
  699. {
  700. return zuletztGegenstandAktivierterSpieler ? (Spieler *)zuletztGegenstandAktivierterSpieler->getThis() : 0;
  701. }
  702. void Spiel::setSpielerZuletztGegenstandAufgehoben( Spieler *s )
  703. {
  704. if( zuletztGegenstandAufgehobenerSpieler )
  705. zuletztGegenstandAufgehobenerSpieler->release();
  706. zuletztGegenstandAufgehobenerSpieler = s;
  707. }
  708. Spieler *Spiel::getSpielerZuletztGegenstandAufgehoben() const
  709. {
  710. return zuletztGegenstandAufgehobenerSpieler ? (Spieler *)zuletztGegenstandAufgehobenerSpieler->getThis() : 0;
  711. }
  712. void Spiel::setSpielerZuletztSchalterAktiviert( Spieler *s )
  713. {
  714. if( zuletztSchalterAktivierterSpieler )
  715. zuletztSchalterAktivierterSpieler->release();
  716. zuletztSchalterAktivierterSpieler = s;
  717. }
  718. Spieler *Spiel::getSpielerZuletztSchalterAktiviert() const
  719. {
  720. return zuletztSchalterAktivierterSpieler ? (Spieler *)zuletztSchalterAktivierterSpieler->getThis() : 0;
  721. }
  722. void Spiel::setSpielerZuletztTunnelBenutzt( Spieler *s )
  723. {
  724. if( zuletztTunnelBenutzterSpieler )
  725. zuletztTunnelBenutzterSpieler->release();
  726. zuletztTunnelBenutzterSpieler = s;
  727. }
  728. Spieler *Spiel::getSpielerZuletztTunnelBenutzt() const
  729. {
  730. return zuletztTunnelBenutzterSpieler ? (Spieler *)zuletztTunnelBenutzterSpieler->getThis() : 0;
  731. }
  732. void Spiel::setSpielerZuletztGestorben( Spieler *s )
  733. {
  734. if( zuletztGestorbenerSpieler )
  735. zuletztGestorbenerSpieler->release();
  736. zuletztGestorbenerSpieler = s;
  737. }
  738. Spieler *Spiel::getSpielerZuletztGestorben() const
  739. {
  740. return zuletztGestorbenerSpieler ? (Spieler *)zuletztGestorbenerSpieler->getThis() : 0;
  741. }
  742. void Spiel::setSpielerZuletztWiederbelebt( Spieler *s )
  743. {
  744. if( zuletztWiederbelebterSpieler )
  745. zuletztWiederbelebterSpieler->release();
  746. zuletztWiederbelebterSpieler = s;
  747. }
  748. Spieler *Spiel::getSpielerZuletztWiederbelebt() const
  749. {
  750. return zuletztWiederbelebterSpieler ? (Spieler *)zuletztWiederbelebterSpieler->getThis() : 0;
  751. }
  752. void Spiel::setSpielerZuletztGeschossen( Spieler *s )
  753. {
  754. if( zuletztGeschossenerSpieler )
  755. zuletztGeschossenerSpieler->release();
  756. zuletztGeschossenerSpieler = s;
  757. }
  758. Spieler *Spiel::getSpielerZuletztGeschossen() const
  759. {
  760. return zuletztGeschossenerSpieler ? (Spieler *)zuletztGeschossenerSpieler->getThis() : 0;
  761. }
  762. Team *Spiel::getRandomTeam()
  763. {
  764. if( !teams.getEintragAnzahl() )
  765. return 0;
  766. return teams.get( (int)( randG.rand() * teams.getEintragAnzahl() ) );
  767. }
  768. Timer *Spiel::getRandomTimer()
  769. {
  770. if( !timer.getEintragAnzahl() )
  771. return 0;
  772. return timer.get( (int)( randG.rand() * timer.getEintragAnzahl() ) );
  773. }
  774. void Spiel::setTimerZuletztAbgelaufen( Timer *t )
  775. {
  776. if( zuletztAbgelaufenerTimer )
  777. zuletztAbgelaufenerTimer->release();
  778. zuletztAbgelaufenerTimer = t;
  779. }
  780. Timer *Spiel::getTimerZuletztAbgelaufen() const
  781. {
  782. return zuletztAbgelaufenerTimer ? (Timer *)zuletztAbgelaufenerTimer->getThis() : 0;
  783. }
  784. void Spiel::setTimerZuletztGestartet( Timer *t )
  785. {
  786. if( zuletztGestarteterTimer )
  787. zuletztGestarteterTimer->release();
  788. zuletztGestarteterTimer = t;
  789. }
  790. Timer *Spiel::getTimerZuletztGestartet() const
  791. {
  792. return zuletztGestarteterTimer ? (Timer *)zuletztGestarteterTimer->getThis() : 0;
  793. }
  794. void Spiel::setTimerZuletztPausiert( Timer *t )
  795. {
  796. if( zuletztPausierterTimer )
  797. zuletztPausierterTimer->release();
  798. zuletztPausierterTimer = t;
  799. }
  800. Timer *Spiel::getTimerZuletztPausiert() const
  801. {
  802. return zuletztPausierterTimer ? (Timer *)zuletztPausierterTimer->getThis() : 0;
  803. }
  804. void Spiel::setTimerZuletztFortgesetzt( Timer *t )
  805. {
  806. if( zuletztFortgesetzterTimer )
  807. zuletztFortgesetzterTimer->release();
  808. zuletztFortgesetzterTimer = t;
  809. }
  810. Timer *Spiel::getTimerZuletztFortgesetzt() const
  811. {
  812. return zuletztFortgesetzterTimer ? (Timer *)zuletztFortgesetzterTimer->getThis() : 0;
  813. }
  814. Tunnel *Spiel::getRandomTunnel()
  815. {
  816. if( !tunnel.getEintragAnzahl() )
  817. return 0;
  818. return tunnel.get( (int)( randG.rand() * tunnel.getEintragAnzahl() ) );
  819. }
  820. void Spiel::setTunnelZuletztBenutzt( Tunnel *t )
  821. {
  822. if( zuletztBenutzterTunnel )
  823. zuletztBenutzterTunnel->release();
  824. zuletztBenutzterTunnel = t;
  825. }
  826. Tunnel *Spiel::getTunnelZuletztBenutzt() const
  827. {
  828. return zuletztBenutzterTunnel ? (Tunnel *)zuletztBenutzterTunnel->getThis() : 0;
  829. }
  830. Umlenkung *Spiel::getRandomUmlenkung()
  831. {
  832. if( !umlenkungen.getEintragAnzahl() )
  833. return 0;
  834. return umlenkungen.get( (int)( randG.rand() * umlenkungen.getEintragAnzahl() ) );
  835. }
  836. void Spiel::setUmlenkungZuletztBenutzt( Umlenkung *t )
  837. {
  838. if( zuletztBenutzteUmlenkung )
  839. zuletztBenutzteUmlenkung->release();
  840. zuletztBenutzteUmlenkung = t;
  841. }
  842. Umlenkung *Spiel::getUmlenkungZuletztBenutzt() const
  843. {
  844. return zuletztBenutzteUmlenkung ? (Umlenkung *)zuletztBenutzteUmlenkung->getThis() : 0;
  845. }
  846. // Reference Counting
  847. SpielV *Spiel::getThis()
  848. {
  849. ref++;
  850. return this;
  851. }
  852. SpielV *Spiel::release()
  853. {
  854. if( !--ref )
  855. delete this;
  856. return 0;
  857. }