11extends KinematicBody
22
3- const ANIM_FLOOR = 0
4- const ANIM_AIR = 1
3+ enum Anim {
4+ FLOOR ,
5+ AIR ,
6+ }
57
68const SHOOT_TIME = 1.5
79const SHOOT_SCALE = 2
810const CHAR_SCALE = Vector3 (0.3 , 0.3 , 0.3 )
11+ const MAX_SPEED = 4.5
912const TURN_SPEED = 40
13+ const JUMP_VELOCITY = 8.5
14+ const BULLET_SPEED = 20
15+ const AIR_IDLE_DEACCEL = false
16+ const ACCEL = 14.0
17+ const DEACCEL = 14.0
18+ const AIR_ACCEL_FACTOR = 0.4
19+ const SHARP_TURN_THRESHOLD = 140
1020
1121var movement_dir = Vector3 ()
1222var linear_velocity = Vector3 ()
13-
1423var jumping = false
15-
16- var air_idle_deaccel = false
17- var accel = 19.0
18- var deaccel = 14.0
19- var sharp_turn_threshold = 140
20- var max_speed = 3.1
21-
2224var prev_shoot = false
2325var shoot_blend = 0
2426
2527onready var gravity = ProjectSettings .get_setting ("physics/3d/default_gravity" ) * ProjectSettings .get_setting ("physics/3d/default_gravity_vector" )
2628
29+
2730func _ready ():
2831 get_node ("AnimationTree" ).set_active (true )
2932
3033
3134func _physics_process (delta ):
3235 linear_velocity += gravity * delta
3336
34- var anim = ANIM_FLOOR
37+ var anim = Anim . FLOOR
3538
3639 var vv = linear_velocity .y # Vertical velocity.
3740 var hv = Vector3 (linear_velocity .x , 0 , linear_velocity .z ) # Horizontal velocity.
@@ -51,18 +54,18 @@ func _physics_process(delta):
5154 var shoot_attempt = Input .is_action_pressed ("shoot" )
5255
5356 if is_on_floor ():
54- var sharp_turn = hspeed > 0.1 and rad2deg (acos (dir .dot (hdir ))) > sharp_turn_threshold
57+ var sharp_turn = hspeed > 0.1 and rad2deg (acos (dir .dot (hdir ))) > SHARP_TURN_THRESHOLD
5558
5659 if dir .length () > 0.1 and ! sharp_turn :
5760 if hspeed > 0.001 :
5861 hdir = adjust_facing (hdir , dir , delta , 1.0 / hspeed * TURN_SPEED , Vector3 .UP )
5962 else :
6063 hdir = dir
6164
62- if hspeed < max_speed :
63- hspeed += accel * delta
65+ if hspeed < MAX_SPEED :
66+ hspeed += ACCEL * delta
6467 else :
65- hspeed -= deaccel * delta
68+ hspeed -= DEACCEL * delta
6669 if hspeed < 0 :
6770 hspeed = 0
6871
@@ -79,22 +82,21 @@ func _physics_process(delta):
7982 get_node ("Armature" ).set_transform (Transform (m3 , mesh_xform .origin ))
8083
8184 if not jumping and jump_attempt :
82- vv = 7.0
85+ vv = JUMP_VELOCITY
8386 jumping = true
8487 get_node ("SoundJump" ).play ()
8588 else :
86- anim = ANIM_AIR
89+ anim = Anim . AIR
8790
8891 if dir .length () > 0.1 :
89- hv += dir * (accel * 0.2 * delta )
90- if hv .length () > max_speed :
91- hv = hv .normalized () * max_speed
92- else :
93- if air_idle_deaccel :
94- hspeed = hspeed - (deaccel * 0.2 * delta )
95- if hspeed < 0 :
96- hspeed = 0
97- hv = hdir * hspeed
92+ hv += dir * (ACCEL * AIR_ACCEL_FACTOR * delta )
93+ if hv .length () > MAX_SPEED :
94+ hv = hv .normalized () * MAX_SPEED
95+ elif AIR_IDLE_DEACCEL :
96+ hspeed = hspeed - (DEACCEL * AIR_ACCEL_FACTOR * delta )
97+ if hspeed < 0 :
98+ hspeed = 0
99+ hv = hdir * hspeed
98100
99101 if jumping and vv < 0 :
100102 jumping = false
@@ -116,14 +118,14 @@ func _physics_process(delta):
116118 var bullet = preload ("res://player/bullet/bullet.tscn" ).instance ()
117119 bullet .set_transform (get_node ("Armature/Bullet" ).get_global_transform ().orthonormalized ())
118120 get_parent ().add_child (bullet )
119- bullet .set_linear_velocity (get_node ("Armature/Bullet" ).get_global_transform ().basis [2 ].normalized () * 20 )
121+ bullet .set_linear_velocity (get_node ("Armature/Bullet" ).get_global_transform ().basis [2 ].normalized () * BULLET_SPEED )
120122 bullet .add_collision_exception_with (self ) # Add it to bullet.
121123 get_node ("SoundShoot" ).play ()
122124
123125 prev_shoot = shoot_attempt
124126
125127 if is_on_floor ():
126- $ AnimationTree ["parameters/walk/blend_amount" ] = hspeed / max_speed
128+ $ AnimationTree ["parameters/walk/blend_amount" ] = hspeed / MAX_SPEED
127129
128130 $ AnimationTree ["parameters/state/current" ] = anim
129131 $ AnimationTree ["parameters/air_dir/blend_amount" ] = clamp (- linear_velocity .y / 4 + 0.5 , 0 , 1 )
0 commit comments