summaryrefslogtreecommitdiff
path: root/demos/2d/platformer/enemy.gd
diff options
context:
space:
mode:
Diffstat (limited to 'demos/2d/platformer/enemy.gd')
-rw-r--r--demos/2d/platformer/enemy.gd97
1 files changed, 97 insertions, 0 deletions
diff --git a/demos/2d/platformer/enemy.gd b/demos/2d/platformer/enemy.gd
new file mode 100644
index 0000000000..5ec7cb28a7
--- /dev/null
+++ b/demos/2d/platformer/enemy.gd
@@ -0,0 +1,97 @@
+
+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")
+
+