donderdag 18 oktober 2012

Traintracks

WorldManager

De WorldManager houd posities bij van alle WorldObject's. Deze worden opgeslagen op een gridbased systeem waarbij elke grid 25x25 is. Zowel de Rail als de City erven van WorldObject.

Wanneer op een WorldObject clicked word er voor elke grenzende positie (boven, rechts, links en onder) gekeken via de worldManager of hier nog een vrij plekje is. Wanneer er nog een plekje vrij is word er knopje geplaatst waar de gebruiker op kan klikken. 

Als de gebruiker op de railKnop klikt word er een nieuwe rail geplaatst.


WorldObjecten connecten

Als er een nieuw worldObject word gecreeerd word op dit object altijd de functie updateBottomTopLeftRight() , deze functie verbind deze rails met eventueel naastliggende stukken rails: De nieuwe rails word altijd gelocked aan het object waar de gebruiker in eerste instantie opklikte. Dit proces werkt twee kanten op. Beide objecten weten van elkaars bestaan af. Wanneer er nu nog een verbinding toegevoegd word word deze ook gezet op dezelfde manier. Echter wanneer een rail 2 verbindingen heeft word deze zogenaamd gelocked (isLocked). Als deze variable is gezet word deze rail genegeerd voor toekomstige railStukken. (dwz een rail kan nooit een splitsing zijn). Vervolgens als de verbinding is gezet word op beide rails updateRailSettings() aangeroepen. Deze functie update aan de hand van welke verbindingen zijn gezet welk model er geladen moet worden en in welke rotatie (bv een bocht, rechte, etc).



Path calculation

Als aan een rails met al 1 verbinding een stad word geconnect weet de rails dat een traject is afgerond. Er word nu een RailTrack object gemaakt die vanuit de laatste rails een path maakt naar de eerste rails op dit traject. Dit word een waypoint lijst. Vervolgens word er een trein gecreĆ«erd die deze lijst van waypoints gebruikt om over te rijden.


Robustheid

Om het systeem robust te maken/houden heb ik gebruik gemaakt van functies die op elk moment aan te roepen zijn. Deze functies gooien eerst de huidige opzet weg en bouwen het daarna opnieuw op. Een voorbeeld hiervan is voor het bouwen van de buildRailIcons op het scherm.


Geen opmerkingen:

Een reactie posten