12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394 |
- extends RigidBody
- # member variables here, example:
- # var a=2
- # var b="textvar"
- const STATE_WALKING = 0
- const STATE_DYING = 1
-
- 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
- func _integrate_forces(state):
-
- var delta = state.get_step()
- var lv = state.get_linear_velocity()
- var g = state.get_total_gravity()
- lv += g * delta #apply gravity
- var up = -g.normalized()
- if (dying):
- state.set_linear_velocity(lv)
- return
-
- for i in range(state.get_contact_count()):
- var cc = state.get_contact_collider_object(i)
- var dp = state.get_contact_local_normal(i)
-
- if (cc):
- if (cc extends preload("res://bullet.gd") and not cc.disabled):
- set_mode(MODE_RIGID)
- dying=true
- #lv=s.get_contact_local_normal(i)*400
- state.set_angular_velocity( -dp.cross(up).normalized() *33.0)
- get_node("AnimationPlayer").play("impact")
- get_node("AnimationPlayer").queue("explode")
- set_friction(true)
- cc.disabled=true
- get_node("sound").play("hit")
- return
-
-
-
- var col_floor = get_node("Armature/ray_floor").is_colliding()
- var col_wall = get_node("Armature/ray_wall").is_colliding()
-
- var advance = not col_wall and col_floor
-
- var dir = get_node("Armature").get_transform().basis[2].normalized()
-
-
- var deaccel_dir = dir
-
- if (advance):
- if (dir.dot(lv) < max_speed):
- lv+=dir * accel * delta
- deaccel_dir = dir.cross(g).normalized()
- else:
- if (prev_advance):
- rot_dir = 1 #randf() * 2.0 -1.0
-
- dir = Matrix3(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
- if (dspeed<0):
- dspeed=0
-
- lv = lv - deaccel_dir*deaccel_dir.dot(lv) + deaccel_dir*dspeed
-
-
- state.set_linear_velocity(lv)
- prev_advance=advance
- func _ready():
- # Initalization here
- pass
|