123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384 |
- extends RigidBody2D
- # Member variables
- 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(1)
- 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():
- rc_left = get_node("raycast_left")
- rc_right = get_node("raycast_right")
|