123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596 |
- extends KinematicBody
- # member variables here, example:
- # var a=2
- # var b="textvar"
- var g = -9.8
- var vel = Vector3()
- const MAX_SPEED = 5
- const JUMP_SPEED = 7
- const ACCEL= 2
- const DEACCEL= 4
- const MAX_SLOPE_ANGLE = 30
- func _fixed_process(delta):
- var dir = Vector3() #where does the player intend to walk to
- var cam_xform = get_node("target/camera").get_global_transform()
-
- if (Input.is_action_pressed("move_forward")):
- dir+=-cam_xform.basis[2]
- if (Input.is_action_pressed("move_backwards")):
- dir+=cam_xform.basis[2]
- if (Input.is_action_pressed("move_left")):
- dir+=-cam_xform.basis[0]
- if (Input.is_action_pressed("move_right")):
- dir+=cam_xform.basis[0]
- dir.y=0
- dir=dir.normalized()
- vel.y+=delta*g
-
- var hvel = vel
- hvel.y=0
-
- var target = dir*MAX_SPEED
- var accel
- if (dir.dot(hvel) >0):
- accel=ACCEL
- else:
- accel=DEACCEL
-
- hvel = hvel.linear_interpolate(target,accel*delta)
-
- vel.x=hvel.x;
- vel.z=hvel.z
- var motion = move(vel*delta)
- var on_floor = false
- var original_vel = vel
- var floor_velocity=Vector3()
- var attempts=4
-
- while(is_colliding() and attempts):
- var n=get_collision_normal()
- if ( rad2deg(acos(n.dot( Vector3(0,1,0)))) < MAX_SLOPE_ANGLE ):
- #if angle to the "up" vectors is < angle tolerance
- #char is on floor
- floor_velocity=get_collider_velocity()
- on_floor=true
-
- motion = n.slide(motion)
- vel = n.slide(vel)
- if (original_vel.dot(vel) > 0):
- #do not allow to slide towads the opposite direction we were coming from
- motion=move(motion)
- if (motion.length()<0.001):
- break
- attempts-=1
- if (on_floor and floor_velocity!=Vector3()):
- move(floor_velocity*delta)
-
- if (on_floor and Input.is_action_pressed("jump")):
- vel.y=JUMP_SPEED
-
- var crid = get_node("../elevator1").get_rid()
- # print(crid," : ",PS.body_get_state(crid,PS.BODY_STATE_TRANSFORM))
- func _ready():
- # Initalization here
- set_fixed_process(true)
- pass
- func _on_tcube_body_enter( body ):
- get_node("../ty").show()
- pass # replace with function body
|