-
Notifications
You must be signed in to change notification settings - Fork 0
/
VPointer.pde
129 lines (93 loc) · 3.8 KB
/
VPointer.pde
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
125
126
127
128
129
public class VPointer
{
private float centerXPos, centerYPos, size;
private float pointerXPos, pointerYPos, maxLength;
private boolean isBuffer = true;
private boolean paintRed = false;
private float windDecay = .49;
//private float windDecay = 1.2;
//private float windDecay = 1;
private float mouseX0 = mouseX;
private float mouseY0 = mouseY;
private float magConst = 1;
public VPointer(float cXPos, float cYPos, float s)
{
centerXPos = cXPos;
centerYPos = cYPos;
size = s;
pointerXPos = centerXPos;
pointerYPos = centerYPos;
}
//only gets called once
public void initalize(float Length)
{
generateSquare();
//initalizePointerRandomly(Length);
}
void generateSquare()
{
rectMode(CENTER);
fill(paintRed ? 0 : 255);
rect(centerXPos, centerYPos, size, size);
isBuffer = false;
}
void generatePointer()
{
float magX = pointerXPos - centerXPos;
float magY = pointerYPos - centerYPos;
stroke(255 - (int)(255/(1 + Math.pow(exp(1.0), 4 + (-.5 * sqrt(magX * magX + magY * magY))))), (int)(255/(1 + Math.pow(exp(1.0), 4 + (-.5 * sqrt(magX * magX + magY * magY))))), 0);
fill(255 - (int)(255/(1 + Math.pow(exp(1.0), 4 + (-.5 * sqrt(magX * magX + magY * magY))))), (int)(255/(1 + Math.pow(exp(1.0), 4 + (-.5 * sqrt(magX * magX + magY * magY))))), 0);
line(centerXPos, centerYPos, pointerXPos, pointerYPos);
ellipse(pointerXPos, pointerYPos, 2, 2);
stroke(0);
decayVelocity();
addVelocityBrush();
}
void decayVelocity()
{
setXMagnitude(getXMagnitude() * windDecay);
setYMagnitude(getYMagnitude() * windDecay);
}
public float getXMagnitude() { return !isBuffer ? pointerXPos - centerXPos : 0; }
public float getYMagnitude() { return !isBuffer ? pointerYPos - centerYPos : 0; }
public float getCenterXPos() { return centerXPos; }
public float getCenterYPos() { return centerYPos; }
public void setXMagnitude(float value) { pointerXPos = value + centerXPos; }
public void setYMagnitude(float value) { pointerYPos = value + centerYPos; }
public void addVelocityBrush()
{
if (mouseDown)
{
float r = min(dist(mouseX0, mouseY0, mouseX, mouseY), 100);
//distance between old mouse position and origin of vector
float v1 = dist(mouseX0, mouseY0, centerXPos, centerYPos);
if (r - v1 >= 0)
{
float mag = (r - v1) * magConst;
float theta = atan2((mouseY - mouseY0), (mouseX - mouseX0));
setXMagnitude(mag * cos(theta));
setYMagnitude(mag * sin(theta));
}
}
mouseX0 = mouseX;
mouseY0 = mouseY;
}
//everything below is for testing purposes and will not funciton / be useful in the final implementation
public void initalizePointerRandomly(float Length)
{
maxLength = Length;
pointerXPos = centerXPos + (random(width) - centerXPos) * (maxLength/width);
pointerYPos = centerYPos + (random(height) - centerYPos) * (maxLength/height);
line(centerXPos, centerYPos, pointerXPos, pointerYPos);
ellipse(pointerXPos, pointerYPos, 2, 2);
}
//only want to get the magnitude if it is a non-buffer tile.
public float getXMagnitudeWithMouse(float Length) { return !isBuffer ? (mouseX - centerXPos) * (Length/width) : 0; }
public float getYMagnitudeWithMouse(float Length) { return !isBuffer ? (mouseY - centerYPos) * (Length/height) : 0; }
public void drawPointerWithMouse(float Length)
{
line(centerXPos, centerYPos, centerXPos + (mouseX - centerXPos) * (Length/width), centerYPos + (mouseY - centerYPos) * (Length/height));
ellipse(centerXPos + (mouseX - centerXPos) * (Length/width), centerYPos + (mouseY - centerYPos) * (Length/height), 2, 2);
}
public void paintRed(boolean b) { paintRed = b; }
}