-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmove_node.gd
81 lines (72 loc) · 2.24 KB
/
move_node.gd
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
extends Spatial
export(float) var area_percent = 0.1
export(int) var acc = 10
export(int) var dec = 25
export(int) var MAX_SPEED = 100
export(int) var ang_acc = 3
export(int) var ang_dec = 8
export(int) var MAX_ANG_SPEED = 50
export(float) var MOUSE_SENSITIVITY = 0.001
var angl = -1
var angr = 1
var speed = 0
var dir = Vector3(0,0,0)
var pos = Vector2(0,0)
var crsr = Vector2(0,0)
func _ready():
set_process(true)
Input.set_mouse_mode(Input.MOUSE_MODE_CONFINED)
func _input(event):
if event is InputEventMouseMotion:
crsr = event.position
if event is InputEventMouseButton and Input.is_mouse_button_pressed(BUTTON_MIDDLE):
Input.set_mouse_mode(Input.MOUSE_MODE_CAPTURED)
elif event is InputEventMouseButton:
Input.set_mouse_mode(Input.MOUSE_MODE_VISIBLE)
if event is InputEventMouseMotion and Input.get_mouse_mode() == Input.MOUSE_MODE_CAPTURED:
self.rotate_y(event.relative.x * MOUSE_SENSITIVITY)
func _process(delta):
pos = get_viewport().size
if (crsr.x < int(pos.x * area_percent)) or Input.is_key_pressed(KEY_A):
dir = Vector3(0,0,0)
dir.x -= 1
speed += acc * delta
speed = clamp(speed, 0, MAX_SPEED)
translate(dir * delta * speed)
elif (crsr.x > (pos.x - (pos.x * area_percent))) or Input.is_key_pressed(KEY_D):
dir = Vector3(0,0,0)
dir.x += 1
speed += acc * delta
speed = clamp(speed,0,MAX_SPEED)
translate(dir*delta*speed)
elif (crsr.y < int(pos.y*area_percent)) or Input.is_key_pressed(KEY_W):
dir = Vector3(0,0,0)
dir.z -= 1
speed += acc * delta
speed = clamp(speed,0,MAX_SPEED)
translate(dir*delta*speed)
elif (crsr.y > (pos.y-(pos.y*area_percent))) or Input.is_key_pressed(KEY_S):
dir = Vector3(0,0,0)
dir.z += 1
speed += acc * delta
speed = clamp(speed,0,MAX_SPEED)
translate(dir*delta*speed)
else:
speed -= dec * delta
speed = clamp(speed,0,MAX_SPEED)
translate(dir*delta*speed)
if Input.is_key_pressed(KEY_E):
angr += ang_acc * delta
angr = clamp(angr,0,MAX_ANG_SPEED)
rotate_y(angr*delta)
elif Input.is_key_pressed(KEY_Q):
angl += ang_acc * delta
angl = clamp(angl,0,MAX_ANG_SPEED)
rotate_y(-angl*delta)
else:
angr -= ang_dec * delta
angr = clamp(angr,0,MAX_ANG_SPEED)
rotate_y(angr*delta)
angl -= ang_dec * delta
angl = clamp(angl,0,MAX_ANG_SPEED)
rotate_y(-angl*delta)