vrecko
virtual reality framework
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
TLsOnJuncManager.h
Go to the documentation of this file.
1 #ifndef TLS_ON_JUNC_MANAGER
2 #define TLS_ON_JUNC_MANAGER
3 
4 #include <vrecko/Ability.h>
5 
6 #include <vector>
7 
8 #include <osg/MatrixTransform>
9 
10 // TL znamena traffic lights ve smyslu jeden semafor
11 // TLs znamena traffic lights ve smyslu vice semaforu
12 
13 // nasledujici makra slouzi pro popis (vyjadreni) barev, ktere sviti na jednom semaforu:
14 #define TL_RED_ORANGE 1
15 #define TL_GREEN 2
16 #define TL_ORANGE 3
17 #define TL_RED 4
18 
19 namespace CarSim {
20  // zde budou ulozeny ukazatele na transformace barevnych svetel na jednom semaforu
21  struct TLcolorsMT {
22  // ref_ptr pouzivam misto ukazatele proto, aby se pri aktualizaci teto ability nekdy
23  // (na konci simulace) nestalo, ze by ukazatel na MT ukazoval do pameti, kde by ten MT
24  // byl jiz odstranen (nesjpis by to fungovalo i s normalnimi ukazateli, jelikoz na konci
25  // simulace jsou nejdrive zastaveny vsechny aktualizace u Scheduleru a az
26  // potom jsou mazany ability a EnvironmentObjecty; ovsem pro jistotu radeji pouzivam ref_ptr)
27  osg::ref_ptr<osg::MatrixTransform> pRedMT;
28  osg::ref_ptr<osg::MatrixTransform> pOrangeMT;
29  osg::ref_ptr<osg::MatrixTransform> pGreenMT;
30  };
31 
32  // abilita, ktera na male krizovatce meni svetla na semaforech (pro jednoduchost se mala
33  // krizovatka, ktera je rizena semafory, vyskytuje ve velke krizovatce vzdy
34  // sama a propojuje 3-4 silnice, v nichz jsou alespon 2 normalni hrany, ktere
35  // smeruji do krizovatky)
37  public:
39  TLsOnJuncManager(std::vector<TLcolorsMT> *const pTLcolorsMTvec,
40  const std::vector<unsigned int*const> *const pTLcolorsVec,
41  const std::vector<unsigned int> *const pTLgreenIntervVec);
43 
44  void preInitialize(void);
45 
46  void update(void);
47  //void *processRequest(const std::string &input_name, void *value);
48  protected:
49  // vektor, ve kterem budou pro obsluhu semaforu u krizovatky ulozeny ukazatele na
50  // transformace jednotlivych barev (zelena, oranzova, cervena) pro kazdy semafor
51  // na konci kazde vstupni normalni hrany krizovatky (semafory budou usporadany
52  // proti smeru hodinovych rucicek kolem krizovatky);
53  // pozn.: spravne by asi mela byt kazda transformace zapouzdrena ve svem
54  // EnvironmentObjectu, takze by se k ni nemelo dat pristupovat primo; pro zvyseni
55  // rychlosti ovsem porusuji toto zapouzdreni;
56  std::vector<TLcolorsMT> *const pTLcolorsMTvec;
57 
58  // vektor, ve kterem budou pro obsluhu semaforu u krizovatky ulozeny ukazatele na
59  // barvy (ciselne vyjadrene), ktere budou svitit na semaforech
60  // na koncich vstupnich normalnich hran (barvy budou usporadany proti smeru hodinovych
61  // rucicek kolem krizovatky podle semaforu, na kterych se budou vyskytovat);
62  // pozn.: opet spravne by asi mela byt barva semaforu vzdy zapouzdrena u hrany krizovatky
63  // (JuncsEdge) v RoadsState; pro zvyseni rychlosti ovsem porusuji toto zapouzdreni;
64  // pozn.: zrejme se nemuze stat, ze by pri aktualizaci teto ability nekdy (na konci simulace)
65  // ukazatel na barvu ukazoval do pameti, kde by ta barva byla jiz odstranena
66  // (protoze jsou na konci simulace nejdrive zastaveny vsechny aktualizace u Scheduleru a az
67  // potom jsou mazany ability a EnvironmentObjecty)
68  const std::vector<unsigned int*const> *const pTLcolorsVec;
69 
70  // vektor s casovymi intervaly, po ktere bude na semaforech kolem krizovatky svitit
71  // zelena (opet budou usporadany proti smeru hodinovych
72  // rucicek kolem krizovatky podle semaforu)
73  const std::vector<unsigned int> *const pTLgreenIntervVec;
74 
75  // index do vyse uvedenych vektoru, bude oznacovat semafor, ktery nasleduje
76  // za semaforem, na kterem naposledy zhasnula oranzova a rozsvitila se cervena
77  // (pokud zadny takovy semafor jeste nebyl, bude obsahovat 0 - tedy oznacovat
78  // (ukazovat na) 1. semafor v tech vektorech)
79  unsigned int tlIndex;
80 
81  // casove rozvrzeni sviceni barev na semaforech u krizovatky (osa x je casova osa):
82  // 1. semafor |u|ggggggggggggg|o|rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr|
83  // 2. semafor |rrrrrrrrrrrrrrrrrrr|u|gggggggggggggg|o|rrrrrrrrrrrrrrrrrr|
84  // 3. semafor |rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr|u|gggggggggggggg|
85  // ...
86  // | tlIndex == 0 | tlIndex == 1 | tlIndex == 2 |
87 
88  // popis zkratek:
89  // u - na semaforu sviti cervena a oranzova soucasne
90  // g - na semaforu sviti zelena
91  // o - na semaforu sviti oranzova
92  // r - na semaforu sviti cervena
93 
94  // doba, po kterou bude na semaforu svitit oranzova nebo oranzova a cervena soucasne
95  // nebo na vsech semaforech cervena, bude vzdy stejna - dejme tomu 2 s
96 
97  // pocet sekund, ktery ubehl od posledni zmeny tlIndexu
98  unsigned int secCount;
99 
100  // metoda, ktera na zacatku simulace na vsech semaforech rozsviti cervenou
101  void initColorsOnTLs(void);
102 
103  // tato metoda prepne barvy, ktere sviti na semaforu, na ktery ukazuje tlIndex
104  // (nejprve z r na u, pak z u na g, pak z g na o a nakonec z o na r
105  void switchColorsOnTL(void);
106 
107  };
108 
109 }
110 
111 #endif
112