1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798 |
- extends RigidBody2D
- # member variables here, example:
- # var a=2
- # var b="textvar"
- const STATE_WALKING = 0
- const STATE_DYING = 1
- var state = STATE_WALKING
- var direction = -1
- var anim=""
- var rc_left=null
- var rc_right=null
- var WALK_SPEED = 50
- var bullet_class = preload("res://bullet.gd")
- func _die():
- queue_free()
- func _pre_explode():
- #stay there
- clear_shapes()
- set_mode(MODE_STATIC)
- get_node("sound").play("explode")
-
- func _integrate_forces(s):
- var lv = s.get_linear_velocity()
- var new_anim=anim
- if (state==STATE_DYING):
- new_anim="explode"
- elif (state==STATE_WALKING):
-
- new_anim="walk"
-
- var wall_side=0.0
-
- for i in range(s.get_contact_count()):
- var cc = s.get_contact_collider_object(i)
- var dp = s.get_contact_local_normal(i)
-
- if (cc):
-
-
- if (cc extends bullet_class and not cc.disabled):
- set_mode(MODE_RIGID)
- state=STATE_DYING
- #lv=s.get_contact_local_normal(i)*400
- s.set_angular_velocity(sign(dp.x)*33.0)
- set_friction(true)
- cc.disable()
- get_node("sound").play("hit")
-
- break
-
- if (dp.x>0.9):
- wall_side=1.0
- elif (dp.x<-0.9):
- wall_side=-1.0
-
- if (wall_side!=0 and wall_side!=direction):
-
- direction=-direction
- get_node("sprite").set_scale( Vector2(-direction,1) )
- if (direction<0 and not rc_left.is_colliding() and rc_right.is_colliding()):
- direction=-direction
- get_node("sprite").set_scale( Vector2(-direction,1) )
- elif (direction>0 and not rc_right.is_colliding() and rc_left.is_colliding()):
- direction=-direction
- get_node("sprite").set_scale( Vector2(-direction,1) )
-
-
- lv.x = direction * WALK_SPEED
-
- if( anim!=new_anim ):
- anim=new_anim
- get_node("anim").play(anim)
-
- s.set_linear_velocity(lv)
- func _ready():
- # Initalization here
- rc_left=get_node("raycast_left")
- rc_right=get_node("raycast_right")
|