vrecko
virtual reality framework
Main Page
Related Pages
Namespaces
Classes
Files
File List
File Members
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)
36
class
TLsOnJuncManager
:
public
vrecko::Ability
{
37
public
:
38
TLsOnJuncManager
();
39
TLsOnJuncManager
(std::vector<TLcolorsMT> *
const
pTLcolorsMTvec
,
40
const
std::vector<unsigned int*const> *
const
pTLcolorsVec
,
41
const
std::vector<unsigned int> *
const
pTLgreenIntervVec
);
42
~TLsOnJuncManager
();
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
include
vreckoAP
CarSim
TLsOnJuncManager.h
Generated on Tue Feb 19 2013 10:23:42 for vrecko by
1.8.3.1