-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathfs_mouse.py
More file actions
98 lines (71 loc) · 2.28 KB
/
fs_mouse.py
File metadata and controls
98 lines (71 loc) · 2.28 KB
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
import pg_main, pygame, time, math
from pynput.mouse import Listener
from cfg import *
prev_time = time.time()
prev_pos = None
vx = 0
vy = 0
px = 0
py = 0
mx = 0
my = 0
speed_level = 2
def event_func(event):
global mx, my
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_RETURN:
print(mx,my)
last_dx = 0.0
last_dy = 0.0
def on_move(x,y):
global prev_time, prev_pos, vx, vy, px, py, mx, my, last_dx, last_dy
mouse_mult = 1 - math.exp(-speed_level)
current_time = time.time()
if prev_pos is not None:
dx = x - prev_pos[0]
dy = y - prev_pos[1]
if dx != 0 and last_dx != 0 and ( dx/abs(dx) != last_dx/abs(last_dx) ):
dx = 0
if dy != 0 and last_dy != 0 and ( dy/abs(dy) != last_dy/abs(last_dy) ):
dy = 0
last_dx = dx
last_dy = dy
dt = current_time - prev_time
if dt > 0:
vx = dx / (dt * 1000)
vy = dy / (dt * 1000)
px += vx
py += vy
mx += vx * 0.1 * mouse_mult
my += vy * 0.1 * mouse_mult
prev_pos = (x, y)
prev_time = current_time
surface1 = pygame.Surface((config["SCREEN_WIDTH"], config["SCREEN_HEIGHT"]))
surface2 = pygame.Surface((config["SCREEN_WIDTH"], config["SCREEN_HEIGHT"]))
surface1.set_alpha(100)
surface2.set_alpha(100)
def render_func(screen):
global vx, vy, px, py, mx, my, timey
mouse_mult = 1-math.exp(-speed_level)
px *= mouse_mult
py *= mouse_mult
sw = config["SCREEN_WIDTH"]
sh = config["SCREEN_HEIGHT"]
s = pygame.Surface((sw,sh))
s.set_alpha(1)
s.fill((0, 0, 0))
surface2.blit(s, (0, 0))
screen.fill((0, 0, 0))
shift_x = -vx * 0.1 * mouse_mult
shift_y = -vy * 0.1 * mouse_mult
# Scroll the trail surface
surface2.scroll(int(shift_x), int(shift_y))
#pygame.draw.circle(surface2,(255,255,255),(sw*0.5,sh*0.5), 3)
pygame.draw.line(surface2,(255,255,255),(sw*0.5,sh*0.5),(sw*0.5+shift_x,sh*0.5+shift_y), 3)
surface1.blit(surface2, (0, 0))
screen.blit(surface1, (0, 0))
pygame.draw.line(screen, (255, 255, 255), (sw * 0.5, sh * 0.5),(sw*0.5 + px,sh*0.5 + py), 2)
if __name__ == "__main__":
listener = Listener(on_move=on_move)
listener.start()
pg_main.render(event_func, render_func)