mirror of
https://github.com/godotengine/godot-demo-projects.git
synced 2025-12-16 13:30:07 +01:00
Merge pull request #589 from Calinou/improve-3d-platformer-demo
Improve the 3D platformer demo
This commit is contained in:
@@ -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
|
||||
|
||||
|
||||
@@ -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())
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user