summaryrefslogtreecommitdiff
path: root/src/obtsDevice.cpp
blob: c8255b413a45f48f1593157d41e5eedaa9acaec0 (plain)
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
124
#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=0.99;
	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=2.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,0x7f);
		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));
	//printf("%s %i\n",number.c_str(),greylev);
	ofSetColor(greylev,greylev,greylev,0xff);
	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));
}