Merge pull request #589 from Calinou/improve-3d-platformer-demo

Improve the 3D platformer demo
This commit is contained in:
Aaron Franke
2021-03-02 18:22:31 -05:00
committed by GitHub
7 changed files with 55 additions and 55 deletions

View File

@@ -1,19 +1,17 @@
extends RigidBody
const STATE_WALKING = 0
const STATE_DYING = 1
const ACCEL = 5.0
const DEACCEL = 20.0
const MAX_SPEED = 2.0
const ROT_SPEED = 1.0
var prev_advance = false
var deaccel = 20.0
var accel = 5
var max_speed = 2
var rot_dir = 4
var rot_speed = 1
var dying = false
var rot_dir = 4
onready var gravity = ProjectSettings.get_setting("physics/3d/default_gravity") * ProjectSettings.get_setting("physics/3d/default_gravity_vector")
func _integrate_forces(state):
var delta = state.get_step()
var lv = state.get_linear_velocity()
@@ -53,18 +51,18 @@ func _integrate_forces(state):
var deaccel_dir = dir
if advance:
if dir.dot(lv) < max_speed:
lv += dir * accel * delta
if dir.dot(lv) < MAX_SPEED:
lv += dir * ACCEL * delta
deaccel_dir = dir.cross(g).normalized()
else:
if prev_advance:
rot_dir = 1
dir = Basis(up, rot_dir * rot_speed * delta).xform(dir)
dir = Basis(up, rot_dir * ROT_SPEED * delta).xform(dir)
get_node("Armature").set_transform(Transform().looking_at(-dir, up))
var dspeed = deaccel_dir.dot(lv)
dspeed -= deaccel * delta
dspeed -= DEACCEL * delta
if dspeed < 0:
dspeed = 0

View File

@@ -1,5 +1,8 @@
extends Camera
const MAX_HEIGHT = 2.0
const MIN_HEIGHT = 0
export var min_distance = 0.5
export var max_distance = 3.5
export var angle_v_adjust = 0.0
@@ -7,8 +10,6 @@ export var autoturn_ray_aperture = 25
export var autoturn_speed = 50
var collision_exception = []
var max_height = 2.0
var min_height = 0
func _ready():
# Find collision exceptions for ray.
@@ -39,10 +40,7 @@ func _physics_process(dt):
delta = delta.normalized() * max_distance
# Check upper and lower height.
if delta.y > max_height:
delta.y = max_height
if delta.y < min_height:
delta.y = min_height
delta.y = clamp(delta.y, MIN_HEIGHT, MAX_HEIGHT)
# Check autoturn.
var ds = PhysicsServer.space_get_direct_state(get_world().get_space())

View File

@@ -1,29 +1,32 @@
extends KinematicBody
const ANIM_FLOOR = 0
const ANIM_AIR = 1
enum Anim {
FLOOR,
AIR,
}
const SHOOT_TIME = 1.5
const SHOOT_SCALE = 2
const CHAR_SCALE = Vector3(0.3, 0.3, 0.3)
const MAX_SPEED = 4.5
const TURN_SPEED = 40
const JUMP_VELOCITY = 8.5
const BULLET_SPEED = 20
const AIR_IDLE_DEACCEL = false
const ACCEL = 14.0
const DEACCEL = 14.0
const AIR_ACCEL_FACTOR = 0.4
const SHARP_TURN_THRESHOLD = 140
var movement_dir = Vector3()
var linear_velocity = Vector3()
var jumping = false
var air_idle_deaccel = false
var accel = 19.0
var deaccel = 14.0
var sharp_turn_threshold = 140
var max_speed = 3.1
var prev_shoot = false
var shoot_blend = 0
onready var gravity = ProjectSettings.get_setting("physics/3d/default_gravity") * ProjectSettings.get_setting("physics/3d/default_gravity_vector")
func _ready():
get_node("AnimationTree").set_active(true)
@@ -31,7 +34,7 @@ func _ready():
func _physics_process(delta):
linear_velocity += gravity * delta
var anim = ANIM_FLOOR
var anim = Anim.FLOOR
var vv = linear_velocity.y # Vertical velocity.
var hv = Vector3(linear_velocity.x, 0, linear_velocity.z) # Horizontal velocity.
@@ -51,7 +54,7 @@ func _physics_process(delta):
var shoot_attempt = Input.is_action_pressed("shoot")
if is_on_floor():
var sharp_turn = hspeed > 0.1 and rad2deg(acos(dir.dot(hdir))) > sharp_turn_threshold
var sharp_turn = hspeed > 0.1 and rad2deg(acos(dir.dot(hdir))) > SHARP_TURN_THRESHOLD
if dir.length() > 0.1 and !sharp_turn:
if hspeed > 0.001:
@@ -59,10 +62,10 @@ func _physics_process(delta):
else:
hdir = dir
if hspeed < max_speed:
hspeed += accel * delta
if hspeed < MAX_SPEED:
hspeed += ACCEL * delta
else:
hspeed -= deaccel * delta
hspeed -= DEACCEL * delta
if hspeed < 0:
hspeed = 0
@@ -79,22 +82,21 @@ func _physics_process(delta):
get_node("Armature").set_transform(Transform(m3, mesh_xform.origin))
if not jumping and jump_attempt:
vv = 7.0
vv = JUMP_VELOCITY
jumping = true
get_node("SoundJump").play()
else:
anim = ANIM_AIR
anim = Anim.AIR
if dir.length() > 0.1:
hv += dir * (accel * 0.2 * delta)
if hv.length() > max_speed:
hv = hv.normalized() * max_speed
else:
if air_idle_deaccel:
hspeed = hspeed - (deaccel * 0.2 * delta)
if hspeed < 0:
hspeed = 0
hv = hdir * hspeed
hv += dir * (ACCEL * AIR_ACCEL_FACTOR * delta)
if hv.length() > MAX_SPEED:
hv = hv.normalized() * MAX_SPEED
elif AIR_IDLE_DEACCEL:
hspeed = hspeed - (DEACCEL * AIR_ACCEL_FACTOR * delta)
if hspeed < 0:
hspeed = 0
hv = hdir * hspeed
if jumping and vv < 0:
jumping = false
@@ -116,14 +118,14 @@ func _physics_process(delta):
var bullet = preload("res://player/bullet/bullet.tscn").instance()
bullet.set_transform(get_node("Armature/Bullet").get_global_transform().orthonormalized())
get_parent().add_child(bullet)
bullet.set_linear_velocity(get_node("Armature/Bullet").get_global_transform().basis[2].normalized() * 20)
bullet.set_linear_velocity(get_node("Armature/Bullet").get_global_transform().basis[2].normalized() * BULLET_SPEED)
bullet.add_collision_exception_with(self) # Add it to bullet.
get_node("SoundShoot").play()
prev_shoot = shoot_attempt
if is_on_floor():
$AnimationTree["parameters/walk/blend_amount"] = hspeed / max_speed
$AnimationTree["parameters/walk/blend_amount"] = hspeed / MAX_SPEED
$AnimationTree["parameters/state/current"] = anim
$AnimationTree["parameters/air_dir/blend_amount"] = clamp(-linear_velocity.y / 4 + 0.5, 0, 1)

View File

@@ -1634,7 +1634,7 @@ input_1/auto_advance = false
[sub_resource type="AnimationNodeBlend2" id=22]
[sub_resource type="AnimationNodeBlendTree" id=23]
graph_offset = Vector2( -294.243, -77.71 )
graph_offset = Vector2( -680, -166 )
nodes/Animation/node = SubResource( 17 )
nodes/Animation/position = Vector2( -260, -280 )
"nodes/Animation 2/node" = SubResource( 13 )
@@ -1841,7 +1841,7 @@ tree_root = SubResource( 23 )
anim_player = NodePath("../AnimationPlayer")
parameters/air_dir/blend_amount = 0.0
parameters/gun/blend_amount = 0
parameters/scale/scale = 1.2
parameters/scale/scale = 1.5
parameters/state/current = 0
parameters/walk/blend_amount = 0.0

View File

@@ -139,6 +139,10 @@ shoot={
multithread/thread_rid_pool_prealloc=60
[physics]
3d/default_gravity=14.0
[rendering]
quality/intended_usage/framebuffer_allocation=3

File diff suppressed because one or more lines are too long

View File

@@ -2,21 +2,19 @@
importer="texture"
type="StreamTexture"
path.s3tc="res://.import/texturemr.png-93ff7bda7acbc5334b4181300007df27.s3tc.stex"
path.etc2="res://.import/texturemr.png-93ff7bda7acbc5334b4181300007df27.etc2.stex"
path="res://.import/texturemr.png-93ff7bda7acbc5334b4181300007df27.stex"
metadata={
"imported_formats": [ "s3tc", "etc2" ],
"vram_texture": true
"vram_texture": false
}
[deps]
source_file="res://stage/texturemr.png"
dest_files=[ "res://.import/texturemr.png-93ff7bda7acbc5334b4181300007df27.s3tc.stex", "res://.import/texturemr.png-93ff7bda7acbc5334b4181300007df27.etc2.stex" ]
dest_files=[ "res://.import/texturemr.png-93ff7bda7acbc5334b4181300007df27.stex" ]
[params]
compress/mode=2
compress/mode=0
compress/lossy_quality=0.7
compress/hdr_mode=0
compress/bptc_ldr=0