99 lines
1.8 KiB
GDScript
99 lines
1.8 KiB
GDScript
|
|
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(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():
|
|
# Initalization here
|
|
rc_left=get_node("raycast_left")
|
|
rc_right=get_node("raycast_right")
|
|
|
|
|
|
|