1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
|
#include "obtsDevice.h"
obtsDevice::obtsDevice()
{
}
obtsDevice::obtsDevice(string &imsi,string &imei,string &num,ofImage *_icon,ofVec2f _coords)
{
IMSI=imsi;
IMEI=imei;
number=num;
coords=_coords;
icon=_icon;
active=false;
calling=false;
exciteLevel=1.0;
lastTime=ofGetElapsedTimef();
printf("new device: IMSI%s\n",IMSI.c_str());
}
obtsDevice::~obtsDevice()
{
//dtor
}
void obtsDevice::connect(){
if (!active) {
connectionHistory.push_back(timeseg());
active=true;
}
}
void obtsDevice::disconnect(){
if (active) {
connectionHistory[connectionHistory.size()-1].endTime=ofGetElapsedTimef();
active=false;
}
}
void obtsDevice::ringing(obtsDevice *to){
if (!calling) {
callHistory.push_back(tcall(to,false));
calling=true;
}
}
void obtsDevice::connectCall(){
if (calling) {
callHistory[callHistory.size()-1].connect();
}
}
void obtsDevice::call(obtsDevice *to){
if (!calling) {
callHistory.push_back(tcall(to,true));
calling=true;
}
}
void obtsDevice::endCall(){
if (calling) {
callHistory[callHistory.size()-1].endTime=ofGetElapsedTimef();
callHistory[callHistory.size()-1].connected=false;
calling=false;
}
}
void obtsDevice::sms(obtsDevice *to){
smsHistory.push_back(tsms(to));
}
void obtsDevice::excite(float amount) {
exciteLevel=amount;
}
void obtsDevice::draw(float timeScale)
{
float decay=1.0;
float now=ofGetElapsedTimef();
float timeSeg=now-lastTime;
lastTime=now;
//draw a line at the angular position of the device
//z=0 is the 'surface' i.e. now.
//the device know the time now and when it was created
//needs to know the time the app began in order to scale the line vertically
//dynamic scaling or fixed vertical scale?
//for dynamic, just scale vertically based on time
//for fixed/dynamic, pass a scaling parameter when drawing
float rf=sin((coords.y/(ofGetWidth()*0.9))*TWO_PI);
ofSetColor(0x8f*rf,0x8f*rf,0x8f*rf);
float endPos;
for (vector<timeseg>::iterator i=connectionHistory.begin();i!=connectionHistory.end();i++){
float startPos=((*i).startTime-now)/timeScale;
endPos=(*i).endTime>0.0f?((*i).endTime-now)/timeScale:0.0f;
ofLine(cos(coords.x)*coords.y,sin(coords.x)*coords.y,startPos,cos(coords.x)*coords.y,sin(coords.x)*coords.y,endPos);
//printf("%f drawing %f,%f,%f to %f,%f,%f\n",ofGetElapsedTimef(),cos(coords.x)*coords.y,sin(coords.x)*coords.y,startPos,cos(coords.x)*coords.y,sin(coords.x)*coords.y,endPos);
}
ofSetColor(0xff,0x8f,0x8f);
for (vector<tsms>::iterator i=smsHistory.begin();i!=smsHistory.end();i++){
float timepos=((*i).time-now)/timeScale;
ofLine(cos(coords.x)*coords.y,sin(coords.x)*coords.y,timepos,cos((*i).recipient->coords.x)*(*i).recipient->coords.y,sin((*i).recipient->coords.x)*(*i).recipient->coords.y,timepos);
}
for (vector<tcall>::iterator i=callHistory.begin();i!=callHistory.end();i++){
ofSetColor(0xff,0xff,0x8f);
float stimepos=((*i).startTime-now)/timeScale;
float etimepos=((*i).endTime>0.0f?((*i).endTime-now)/timeScale:0.0f);
glBegin(GL_QUADS);
glVertex3f(cos(coords.x)*coords.y,sin(coords.x)*coords.y,stimepos);
glVertex3f(cos((*i).recipient->coords.x)*(*i).recipient->coords.y,sin((*i).recipient->coords.x)*(*i).recipient->coords.y,stimepos);
glVertex3f(cos((*i).recipient->coords.x)*(*i).recipient->coords.y,sin((*i).recipient->coords.x)*(*i).recipient->coords.y,etimepos);
glVertex3f(cos(coords.x)*coords.y,sin(coords.x)*coords.y,etimepos);
glEnd();
}
int greylev=0x7f+((int)(128.0f*exciteLevel));
ofSetHexColor(greylev+(greylev<<8)+(greylev<<16));
ofSetDrawBitmapMode(OF_BITMAPMODE_MODEL_BILLBOARD);
ofDrawBitmapString(number,cos(coords.x)*coords.y,sin(coords.x)*coords.y,endPos);
ofSetDrawBitmapMode(OF_BITMAPMODE_SIMPLE);
exciteLevel=pow(exciteLevel,1+(timeSeg*decay));
}
|