add some enemy behavior prototypes
This commit is contained in:
38
godot/characters/enemies/WalkingEnemy.gd
Normal file
38
godot/characters/enemies/WalkingEnemy.gd
Normal file
@@ -0,0 +1,38 @@
|
||||
extends KinematicBody2D
|
||||
|
||||
|
||||
signal player_touched
|
||||
|
||||
|
||||
var velocity = Vector2()
|
||||
export var direction = -1
|
||||
export var detect_edges = true
|
||||
export var speed = 25
|
||||
export var gravity = 9.8
|
||||
|
||||
|
||||
func _ready() -> void:
|
||||
if direction == 1:
|
||||
$AnimatedSprite.flip_h = true
|
||||
$FloorChecker.position.x = $CollisionShape2D.shape.get_extents().x * direction
|
||||
$FloorChecker.enabled = detect_edges
|
||||
|
||||
|
||||
func _physics_process(_delta: float) -> void:
|
||||
if is_on_wall() or not $FloorChecker.is_colliding() and is_on_floor() and $FloorChecker.enabled:
|
||||
direction *= -1
|
||||
$AnimatedSprite.flip_h = not $AnimatedSprite.flip_h
|
||||
$FloorChecker.position.x = $CollisionShape2D.shape.get_extents().x * direction
|
||||
|
||||
velocity.y += gravity
|
||||
velocity.x = speed * direction
|
||||
velocity = move_and_slide(velocity, Vector2.UP)
|
||||
|
||||
for i in get_slide_count():
|
||||
var collision = get_slide_collision(i)
|
||||
if collision.collider.name == "Player":
|
||||
emit_signal("player_touched")
|
||||
|
||||
|
||||
func squash() -> void:
|
||||
queue_free()
|
27
godot/characters/enemies/blightwing/Blightwing.gd
Normal file
27
godot/characters/enemies/blightwing/Blightwing.gd
Normal file
@@ -0,0 +1,27 @@
|
||||
extends KinematicBody2D
|
||||
|
||||
|
||||
# Declare member variables here. Examples:
|
||||
# var a: int = 2
|
||||
# var b: String = "text"
|
||||
|
||||
|
||||
# Called when the node enters the scene tree for the first time.
|
||||
func _ready() -> void:
|
||||
pass # Replace with function body.
|
||||
|
||||
|
||||
# Called every frame. 'delta' is the elapsed time since the previous frame.
|
||||
func _physics_process(delta: float) -> void:
|
||||
var velocity = Vector2()
|
||||
velocity.x += 1 * 50
|
||||
#velocity.y -= 1 * 50
|
||||
velocity = move_and_slide(velocity, Vector2(0, 0), true, 2)
|
||||
for i in get_slide_count():
|
||||
var collision = get_slide_collision(i)
|
||||
#if collision.collider.name == "Player":
|
||||
# print("Blightwing: " + String(OS.get_unix_time()) + " " + collision.collider.name)
|
||||
|
||||
|
||||
func _on_Area2D_body_entered(body: Node) -> void:
|
||||
print(body.name)
|
@@ -25,14 +25,13 @@ animations = [ {
|
||||
[sub_resource type="RectangleShape2D" id=5]
|
||||
extents = Vector2( 5, 5 )
|
||||
|
||||
[node name="Blightwing" type="KinematicBody2D"]
|
||||
[node name="Blightwing" type="KinematicBody2D" groups=["enemy"]]
|
||||
collision_layer = 8
|
||||
collision_mask = 11
|
||||
|
||||
[node name="AnimatedSprite" type="AnimatedSprite" parent="."]
|
||||
frames = SubResource( 4 )
|
||||
animation = "fly"
|
||||
frame = 1
|
||||
playing = true
|
||||
|
||||
[node name="CollisionShape2D" type="CollisionShape2D" parent="."]
|
||||
|
27
godot/characters/enemies/blockface/Blockface.gd
Normal file
27
godot/characters/enemies/blockface/Blockface.gd
Normal file
@@ -0,0 +1,27 @@
|
||||
extends KinematicBody2D
|
||||
|
||||
|
||||
signal player_touched
|
||||
|
||||
|
||||
onready var start_position = position
|
||||
var velocity = Vector2()
|
||||
export var speed = 50.0
|
||||
export var fall_speed = 75.0
|
||||
var return_to_start: bool = false
|
||||
|
||||
|
||||
func _physics_process(delta: float) -> void:
|
||||
if return_to_start:
|
||||
position = position.move_toward(start_position, speed * delta)
|
||||
else:
|
||||
var collision = move_and_collide(Vector2(0, (position.y + fall_speed) * delta))
|
||||
if collision:
|
||||
return_to_start = true
|
||||
$AnimatedSprite.play("normal")
|
||||
if collision.collider.name == "Player":
|
||||
emit_signal("player_touched")
|
||||
|
||||
if position.y <= start_position.y:
|
||||
return_to_start = false
|
||||
$AnimatedSprite.play("angry")
|
@@ -1,6 +1,7 @@
|
||||
[gd_scene load_steps=6 format=2]
|
||||
[gd_scene load_steps=7 format=2]
|
||||
|
||||
[ext_resource path="res://assets/characters/characters.png" type="Texture" id=1]
|
||||
[ext_resource path="res://characters/enemies/blockface/Blockface.gd" type="Script" id=2]
|
||||
|
||||
[sub_resource type="AtlasTexture" id=1]
|
||||
atlas = ExtResource( 1 )
|
||||
@@ -26,9 +27,10 @@ animations = [ {
|
||||
[sub_resource type="RectangleShape2D" id=4]
|
||||
extents = Vector2( 9, 9 )
|
||||
|
||||
[node name="Blockface" type="KinematicBody2D"]
|
||||
[node name="Blockface" type="KinematicBody2D" groups=["enemy", "rideable"]]
|
||||
collision_layer = 8
|
||||
collision_mask = 11
|
||||
script = ExtResource( 2 )
|
||||
|
||||
[node name="AnimatedSprite" type="AnimatedSprite" parent="."]
|
||||
frames = SubResource( 3 )
|
||||
|
1
godot/characters/enemies/dreadtooth/Dreadtooth.gd
Normal file
1
godot/characters/enemies/dreadtooth/Dreadtooth.gd
Normal file
@@ -0,0 +1 @@
|
||||
extends "res://characters/enemies/WalkingEnemy.gd"
|
@@ -1,6 +1,7 @@
|
||||
[gd_scene load_steps=7 format=2]
|
||||
[gd_scene load_steps=8 format=2]
|
||||
|
||||
[ext_resource path="res://assets/characters/characters.png" type="Texture" id=1]
|
||||
[ext_resource path="res://characters/enemies/dreadtooth/Dreadtooth.gd" type="Script" id=2]
|
||||
|
||||
[sub_resource type="AtlasTexture" id=1]
|
||||
atlas = ExtResource( 1 )
|
||||
@@ -28,17 +29,26 @@ animations = [ {
|
||||
} ]
|
||||
|
||||
[sub_resource type="RectangleShape2D" id=5]
|
||||
extents = Vector2( 7.5, 8.5 )
|
||||
extents = Vector2( 7.5, 6.5 )
|
||||
|
||||
[node name="Dreadtooth" type="KinematicBody2D"]
|
||||
[node name="Dreadtooth" type="KinematicBody2D" groups=["enemy"]]
|
||||
collision_layer = 8
|
||||
collision_mask = 11
|
||||
script = ExtResource( 2 )
|
||||
|
||||
[node name="AnimatedSprite" type="AnimatedSprite" parent="."]
|
||||
frames = SubResource( 4 )
|
||||
animation = "walk"
|
||||
playing = true
|
||||
frame = 1
|
||||
|
||||
[node name="CollisionShape2D" type="CollisionShape2D" parent="."]
|
||||
position = Vector2( -0.5, 3.5 )
|
||||
position = Vector2( -0.5, 5.5 )
|
||||
shape = SubResource( 5 )
|
||||
|
||||
[node name="CollisionPolygon2D" type="CollisionPolygon2D" parent="."]
|
||||
polygon = PoolVector2Array( 0, -7, 3, -4, 3, -1, -4, -1, -4, -4, -1, -7 )
|
||||
|
||||
[node name="FloorChecker" type="RayCast2D" parent="."]
|
||||
enabled = true
|
||||
cast_to = Vector2( 0, 20 )
|
||||
collision_mask = 10
|
||||
|
@@ -21,12 +21,13 @@ animations = [ {
|
||||
[sub_resource type="RectangleShape2D" id=4]
|
||||
extents = Vector2( 5.5, 7.5 )
|
||||
|
||||
[node name="Gravevine" type="KinematicBody2D"]
|
||||
[node name="Gravevine" type="KinematicBody2D" groups=["enemy"]]
|
||||
collision_layer = 8
|
||||
collision_mask = 11
|
||||
|
||||
[node name="AnimatedSprite" type="AnimatedSprite" parent="."]
|
||||
frames = SubResource( 3 )
|
||||
frame = 1
|
||||
playing = true
|
||||
|
||||
[node name="CollisionShape2D" type="CollisionShape2D" parent="."]
|
||||
|
1
godot/characters/enemies/shelly/Shelly.gd
Normal file
1
godot/characters/enemies/shelly/Shelly.gd
Normal file
@@ -0,0 +1 @@
|
||||
extends "res://characters/enemies/WalkingEnemy.gd"
|
@@ -1,6 +1,7 @@
|
||||
[gd_scene load_steps=7 format=2]
|
||||
[gd_scene load_steps=8 format=2]
|
||||
|
||||
[ext_resource path="res://assets/characters/characters.png" type="Texture" id=1]
|
||||
[ext_resource path="res://characters/enemies/shelly/Shelly.gd" type="Script" id=2]
|
||||
|
||||
[sub_resource type="AtlasTexture" id=1]
|
||||
atlas = ExtResource( 1 )
|
||||
@@ -28,11 +29,12 @@ animations = [ {
|
||||
} ]
|
||||
|
||||
[sub_resource type="RectangleShape2D" id=5]
|
||||
extents = Vector2( 7.5, 7 )
|
||||
extents = Vector2( 7.5, 6.5 )
|
||||
|
||||
[node name="Shelly" type="KinematicBody2D"]
|
||||
[node name="Shelly" type="KinematicBody2D" groups=["enemy", "squashable"]]
|
||||
collision_layer = 8
|
||||
collision_mask = 11
|
||||
script = ExtResource( 2 )
|
||||
|
||||
[node name="AnimatedSprite" type="AnimatedSprite" parent="."]
|
||||
frames = SubResource( 4 )
|
||||
@@ -40,5 +42,10 @@ animation = "walk"
|
||||
playing = true
|
||||
|
||||
[node name="CollisionShape2D" type="CollisionShape2D" parent="."]
|
||||
position = Vector2( 1, 5 )
|
||||
position = Vector2( 1, 5.5 )
|
||||
shape = SubResource( 5 )
|
||||
|
||||
[node name="FloorChecker" type="RayCast2D" parent="."]
|
||||
enabled = true
|
||||
cast_to = Vector2( 0, 20 )
|
||||
collision_mask = 10
|
||||
|
@@ -17,7 +17,7 @@ animations = [ {
|
||||
[sub_resource type="CircleShape2D" id=3]
|
||||
radius = 9.05539
|
||||
|
||||
[node name="Spikeball" type="KinematicBody2D"]
|
||||
[node name="Spikeball" type="KinematicBody2D" groups=["enemy"]]
|
||||
collision_layer = 8
|
||||
collision_mask = 11
|
||||
|
||||
|
1
godot/characters/enemies/super_shelly/SuperShelly.gd
Normal file
1
godot/characters/enemies/super_shelly/SuperShelly.gd
Normal file
@@ -0,0 +1 @@
|
||||
extends "res://characters/enemies/WalkingEnemy.gd"
|
@@ -1,6 +1,7 @@
|
||||
[gd_scene load_steps=7 format=2]
|
||||
[gd_scene load_steps=8 format=2]
|
||||
|
||||
[ext_resource path="res://assets/characters/characters.png" type="Texture" id=1]
|
||||
[ext_resource path="res://characters/enemies/super_shelly/SuperShelly.gd" type="Script" id=2]
|
||||
|
||||
[sub_resource type="AtlasTexture" id=1]
|
||||
atlas = ExtResource( 1 )
|
||||
@@ -28,11 +29,12 @@ animations = [ {
|
||||
} ]
|
||||
|
||||
[sub_resource type="RectangleShape2D" id=5]
|
||||
extents = Vector2( 12, 11 )
|
||||
extents = Vector2( 12, 10.5 )
|
||||
|
||||
[node name="SuperShelly" type="KinematicBody2D"]
|
||||
[node name="SuperShelly" type="KinematicBody2D" groups=["enemy", "squashable"]]
|
||||
collision_layer = 8
|
||||
collision_mask = 11
|
||||
script = ExtResource( 2 )
|
||||
|
||||
[node name="AnimatedSprite" type="AnimatedSprite" parent="."]
|
||||
frames = SubResource( 4 )
|
||||
@@ -41,5 +43,10 @@ frame = 1
|
||||
playing = true
|
||||
|
||||
[node name="CollisionShape2D" type="CollisionShape2D" parent="."]
|
||||
position = Vector2( 0, 1 )
|
||||
position = Vector2( 0, 1.5 )
|
||||
shape = SubResource( 5 )
|
||||
|
||||
[node name="FloorChecker" type="RayCast2D" parent="."]
|
||||
enabled = true
|
||||
cast_to = Vector2( 0, 20 )
|
||||
collision_mask = 10
|
||||
|
Reference in New Issue
Block a user