Skip to content

Commit 82e68e3

Browse files
authored
Merge pull request #589 from Calinou/improve-3d-platformer-demo
Improve the 3D platformer demo
2 parents bbf4cff + 3d6ba65 commit 82e68e3

File tree

7 files changed

+55
-55
lines changed

7 files changed

+55
-55
lines changed

3d/platformer/enemy/enemy.gd

Lines changed: 10 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,17 @@
11
extends RigidBody
22

3-
const STATE_WALKING = 0
4-
const STATE_DYING = 1
3+
const ACCEL = 5.0
4+
const DEACCEL = 20.0
5+
const MAX_SPEED = 2.0
6+
const ROT_SPEED = 1.0
57

68
var prev_advance = false
7-
var deaccel = 20.0
8-
var accel = 5
9-
var max_speed = 2
10-
var rot_dir = 4
11-
var rot_speed = 1
12-
139
var dying = false
10+
var rot_dir = 4
1411

1512
onready var gravity = ProjectSettings.get_setting("physics/3d/default_gravity") * ProjectSettings.get_setting("physics/3d/default_gravity_vector")
1613

14+
1715
func _integrate_forces(state):
1816
var delta = state.get_step()
1917
var lv = state.get_linear_velocity()
@@ -53,18 +51,18 @@ func _integrate_forces(state):
5351
var deaccel_dir = dir
5452

5553
if advance:
56-
if dir.dot(lv) < max_speed:
57-
lv += dir * accel * delta
54+
if dir.dot(lv) < MAX_SPEED:
55+
lv += dir * ACCEL * delta
5856
deaccel_dir = dir.cross(g).normalized()
5957
else:
6058
if prev_advance:
6159
rot_dir = 1
6260

63-
dir = Basis(up, rot_dir * rot_speed * delta).xform(dir)
61+
dir = Basis(up, rot_dir * ROT_SPEED * delta).xform(dir)
6462
get_node("Armature").set_transform(Transform().looking_at(-dir, up))
6563

6664
var dspeed = deaccel_dir.dot(lv)
67-
dspeed -= deaccel * delta
65+
dspeed -= DEACCEL * delta
6866
if dspeed < 0:
6967
dspeed = 0
7068

3d/platformer/player/follow_camera.gd

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,15 @@
11
extends Camera
22

3+
const MAX_HEIGHT = 2.0
4+
const MIN_HEIGHT = 0
5+
36
export var min_distance = 0.5
47
export var max_distance = 3.5
58
export var angle_v_adjust = 0.0
69
export var autoturn_ray_aperture = 25
710
export var autoturn_speed = 50
811

912
var collision_exception = []
10-
var max_height = 2.0
11-
var min_height = 0
1213

1314
func _ready():
1415
# Find collision exceptions for ray.
@@ -39,10 +40,7 @@ func _physics_process(dt):
3940
delta = delta.normalized() * max_distance
4041

4142
# Check upper and lower height.
42-
if delta.y > max_height:
43-
delta.y = max_height
44-
if delta.y < min_height:
45-
delta.y = min_height
43+
delta.y = clamp(delta.y, MIN_HEIGHT, MAX_HEIGHT)
4644

4745
# Check autoturn.
4846
var ds = PhysicsServer.space_get_direct_state(get_world().get_space())

3d/platformer/player/player.gd

Lines changed: 30 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -1,37 +1,40 @@
11
extends KinematicBody
22

3-
const ANIM_FLOOR = 0
4-
const ANIM_AIR = 1
3+
enum Anim {
4+
FLOOR,
5+
AIR,
6+
}
57

68
const SHOOT_TIME = 1.5
79
const SHOOT_SCALE = 2
810
const CHAR_SCALE = Vector3(0.3, 0.3, 0.3)
11+
const MAX_SPEED = 4.5
912
const 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

1121
var movement_dir = Vector3()
1222
var linear_velocity = Vector3()
13-
1423
var 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-
2224
var prev_shoot = false
2325
var shoot_blend = 0
2426

2527
onready var gravity = ProjectSettings.get_setting("physics/3d/default_gravity") * ProjectSettings.get_setting("physics/3d/default_gravity_vector")
2628

29+
2730
func _ready():
2831
get_node("AnimationTree").set_active(true)
2932

3033

3134
func _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)

3d/platformer/player/player.tscn

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1634,7 +1634,7 @@ input_1/auto_advance = false
16341634
[sub_resource type="AnimationNodeBlend2" id=22]
16351635

16361636
[sub_resource type="AnimationNodeBlendTree" id=23]
1637-
graph_offset = Vector2( -294.243, -77.71 )
1637+
graph_offset = Vector2( -680, -166 )
16381638
nodes/Animation/node = SubResource( 17 )
16391639
nodes/Animation/position = Vector2( -260, -280 )
16401640
"nodes/Animation 2/node" = SubResource( 13 )
@@ -1841,7 +1841,7 @@ tree_root = SubResource( 23 )
18411841
anim_player = NodePath("../AnimationPlayer")
18421842
parameters/air_dir/blend_amount = 0.0
18431843
parameters/gun/blend_amount = 0
1844-
parameters/scale/scale = 1.2
1844+
parameters/scale/scale = 1.5
18451845
parameters/state/current = 0
18461846
parameters/walk/blend_amount = 0.0
18471847

3d/platformer/project.godot

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -139,6 +139,10 @@ shoot={
139139

140140
multithread/thread_rid_pool_prealloc=60
141141

142+
[physics]
143+
144+
3d/default_gravity=14.0
145+
142146
[rendering]
143147

144148
quality/intended_usage/framebuffer_allocation=3

3d/platformer/stage/stage.tscn

Lines changed: 1 addition & 1 deletion
Large diffs are not rendered by default.

3d/platformer/stage/texturemr.png.import

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,21 +2,19 @@
22

33
importer="texture"
44
type="StreamTexture"
5-
path.s3tc="res://.import/texturemr.png-93ff7bda7acbc5334b4181300007df27.s3tc.stex"
6-
path.etc2="res://.import/texturemr.png-93ff7bda7acbc5334b4181300007df27.etc2.stex"
5+
path="res://.import/texturemr.png-93ff7bda7acbc5334b4181300007df27.stex"
76
metadata={
8-
"imported_formats": [ "s3tc", "etc2" ],
9-
"vram_texture": true
7+
"vram_texture": false
108
}
119

1210
[deps]
1311

1412
source_file="res://stage/texturemr.png"
15-
dest_files=[ "res://.import/texturemr.png-93ff7bda7acbc5334b4181300007df27.s3tc.stex", "res://.import/texturemr.png-93ff7bda7acbc5334b4181300007df27.etc2.stex" ]
13+
dest_files=[ "res://.import/texturemr.png-93ff7bda7acbc5334b4181300007df27.stex" ]
1614

1715
[params]
1816

19-
compress/mode=2
17+
compress/mode=0
2018
compress/lossy_quality=0.7
2119
compress/hdr_mode=0
2220
compress/bptc_ldr=0

0 commit comments

Comments
 (0)