improved pathfinding
This commit is contained in:
@@ -92,6 +92,7 @@ height = 54.0
|
|||||||
process_mode = 1
|
process_mode = 1
|
||||||
collision_layer = 5
|
collision_layer = 5
|
||||||
collision_mask = 5
|
collision_mask = 5
|
||||||
|
collision_priority = 5.0
|
||||||
motion_mode = 1
|
motion_mode = 1
|
||||||
script = ExtResource("1_qehox")
|
script = ExtResource("1_qehox")
|
||||||
|
|
||||||
@@ -133,3 +134,7 @@ visible = false
|
|||||||
position = Vector2(0, 36)
|
position = Vector2(0, 36)
|
||||||
rotation = 1.5708
|
rotation = 1.5708
|
||||||
shape = SubResource("CapsuleShape2D_38v5o")
|
shape = SubResource("CapsuleShape2D_38v5o")
|
||||||
|
|
||||||
|
[node name="globalposition_timer" type="Timer" parent="."]
|
||||||
|
wait_time = 1.5
|
||||||
|
autostart = true
|
||||||
|
@@ -1,32 +1,7 @@
|
|||||||
[gd_scene load_steps=9 format=3 uid="uid://cpu7t7csffoxg"]
|
[gd_scene load_steps=8 format=3 uid="uid://cpu7t7csffoxg"]
|
||||||
|
|
||||||
[ext_resource type="Texture2D" uid="uid://ca1es3hoj53wg" path="res://assets/textures/enemies/slime_green_atlas.png" id="1_bw6us"]
|
[ext_resource type="Texture2D" uid="uid://ca1es3hoj53wg" path="res://assets/textures/enemies/slime_green_atlas.png" id="1_bw6us"]
|
||||||
|
[ext_resource type="Script" path="res://src/scene-scripts/enemies/slime.cs" id="1_l1742"]
|
||||||
[sub_resource type="GDScript" id="GDScript_78jn1"]
|
|
||||||
resource_name = "debug"
|
|
||||||
script/source = "extends CharacterBody2D
|
|
||||||
|
|
||||||
var speed = 35
|
|
||||||
var motion = Vector2.ZERO
|
|
||||||
|
|
||||||
var player = null
|
|
||||||
|
|
||||||
func _ready():
|
|
||||||
$animated_sprite_2d.play()
|
|
||||||
|
|
||||||
func _physics_process(_delta):
|
|
||||||
motion = Vector2.ZERO
|
|
||||||
if player:
|
|
||||||
motion = position.direction_to(player.position) * speed
|
|
||||||
velocity = motion
|
|
||||||
move_and_slide()
|
|
||||||
|
|
||||||
func OnArea2dBodyEntered(body):
|
|
||||||
player = body
|
|
||||||
|
|
||||||
func OnArea2dBodyExited(_body):
|
|
||||||
player = null
|
|
||||||
"
|
|
||||||
|
|
||||||
[sub_resource type="AtlasTexture" id="AtlasTexture_eghup"]
|
[sub_resource type="AtlasTexture" id="AtlasTexture_eghup"]
|
||||||
atlas = ExtResource("1_bw6us")
|
atlas = ExtResource("1_bw6us")
|
||||||
@@ -61,34 +36,24 @@ animations = [{
|
|||||||
}]
|
}]
|
||||||
|
|
||||||
[sub_resource type="CapsuleShape2D" id="CapsuleShape2D_e6mi3"]
|
[sub_resource type="CapsuleShape2D" id="CapsuleShape2D_e6mi3"]
|
||||||
radius = 6.0
|
radius = 9.0
|
||||||
height = 56.0
|
height = 46.0
|
||||||
|
|
||||||
[sub_resource type="CircleShape2D" id="CircleShape2D_3gptu"]
|
|
||||||
radius = 440.41
|
|
||||||
|
|
||||||
[node name="slime" type="CharacterBody2D"]
|
[node name="slime" type="CharacterBody2D"]
|
||||||
collision_layer = 9
|
collision_layer = 8
|
||||||
collision_mask = 8
|
collision_mask = 9
|
||||||
script = SubResource("GDScript_78jn1")
|
collision_priority = 2.0
|
||||||
|
script = ExtResource("1_l1742")
|
||||||
|
|
||||||
[node name="animated_sprite_2d" type="AnimatedSprite2D" parent="."]
|
[node name="animated_sprite_2d" type="AnimatedSprite2D" parent="."]
|
||||||
position = Vector2(0, 33)
|
position = Vector2(0, 19)
|
||||||
sprite_frames = SubResource("SpriteFrames_bwr2v")
|
sprite_frames = SubResource("SpriteFrames_bwr2v")
|
||||||
frame_progress = 0.348187
|
frame_progress = 0.348187
|
||||||
|
|
||||||
[node name="collision_shape_2d" type="CollisionShape2D" parent="."]
|
[node name="collision_shape_2d" type="CollisionShape2D" parent="."]
|
||||||
position = Vector2(1, 43)
|
position = Vector2(0, 28)
|
||||||
rotation = 1.5708
|
rotation = 1.5708
|
||||||
shape = SubResource("CapsuleShape2D_e6mi3")
|
shape = SubResource("CapsuleShape2D_e6mi3")
|
||||||
|
|
||||||
[node name="area_2d" type="Area2D" parent="."]
|
[node name="visible_notifier_2d" type="VisibleOnScreenNotifier2D" parent="."]
|
||||||
position = Vector2(0, 32)
|
rect = Rect2(-25, 0, 50, 40)
|
||||||
collision_layer = 4
|
|
||||||
collision_mask = 4
|
|
||||||
|
|
||||||
[node name="collision_shape_2d" type="CollisionShape2D" parent="area_2d"]
|
|
||||||
shape = SubResource("CircleShape2D_3gptu")
|
|
||||||
|
|
||||||
[connection signal="body_entered" from="area_2d" to="." method="OnArea2dBodyEntered"]
|
|
||||||
[connection signal="body_exited" from="area_2d" to="." method="OnArea2dBodyExited"]
|
|
||||||
|
@@ -7,7 +7,7 @@ radius = 33.1361
|
|||||||
|
|
||||||
[node name="rigid_body_2d" type="RigidBody2D"]
|
[node name="rigid_body_2d" type="RigidBody2D"]
|
||||||
collision_layer = 2
|
collision_layer = 2
|
||||||
collision_mask = 3
|
collision_mask = 11
|
||||||
collision_priority = 20.0
|
collision_priority = 20.0
|
||||||
gravity_scale = 0.0
|
gravity_scale = 0.0
|
||||||
|
|
||||||
|
17
src/scene-scripts/enemies/slime.cs
Normal file
17
src/scene-scripts/enemies/slime.cs
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
using Godot;
|
||||||
|
using System;
|
||||||
|
|
||||||
|
public partial class slime : CharacterBody2D
|
||||||
|
{
|
||||||
|
[Export] int speed = 70;
|
||||||
|
Vector2 motion = Vector2.Zero;
|
||||||
|
public override void _Ready() => GetNode<AnimatedSprite2D>("animated_sprite_2d").Play();
|
||||||
|
public override void _PhysicsProcess(double delta)
|
||||||
|
{
|
||||||
|
if (GetNode<VisibleOnScreenNotifier2D>("visible_notifier_2d").IsOnScreen())
|
||||||
|
motion = Position.DirectionTo(player.globalPlayerPosition) * speed;
|
||||||
|
else motion = Vector2.Zero;
|
||||||
|
Velocity = motion;
|
||||||
|
MoveAndSlide();
|
||||||
|
}
|
||||||
|
}
|
@@ -10,6 +10,7 @@ public partial class player : CharacterBody2D
|
|||||||
public AnimatedSprite2D animatedSprite;
|
public AnimatedSprite2D animatedSprite;
|
||||||
public Marker2D rotCenter;
|
public Marker2D rotCenter;
|
||||||
public RayCast2D dialogRayCast;
|
public RayCast2D dialogRayCast;
|
||||||
|
public static Vector2 globalPlayerPosition; //for enemy path finding with delay for less bugs
|
||||||
//console cheats:
|
//console cheats:
|
||||||
private static Camera2D cheatCam;
|
private static Camera2D cheatCam;
|
||||||
private static Camera2D mainCam;
|
private static Camera2D mainCam;
|
||||||
@@ -32,8 +33,14 @@ public partial class player : CharacterBody2D
|
|||||||
if (Math.Round(movement.Length(), 0) != 0) rotCenter.Rotation = new Vector2((float)Math.Round(movement.X, 0), (float)Math.Round(movement.Y, 0)).Angle();
|
if (Math.Round(movement.Length(), 0) != 0) rotCenter.Rotation = new Vector2((float)Math.Round(movement.X, 0), (float)Math.Round(movement.Y, 0)).Angle();
|
||||||
MoveAndCollide(movement * speed * 200 * (float)delta);
|
MoveAndCollide(movement * speed * 200 * (float)delta);
|
||||||
}
|
}
|
||||||
|
void GlobalPlayerPosition()
|
||||||
|
{
|
||||||
|
if (Mathf.Round(GetNode<Timer>("globalposition_timer").TimeLeft) == 0)
|
||||||
|
globalPlayerPosition = Position;
|
||||||
|
}
|
||||||
public override void _Process(double delta)
|
public override void _Process(double delta)
|
||||||
{
|
{
|
||||||
|
GlobalPlayerPosition();
|
||||||
if (Input.IsActionJustPressed("ui_accept") && dialogRayCast.IsColliding() && allowMovement)
|
if (Input.IsActionJustPressed("ui_accept") && dialogRayCast.IsColliding() && allowMovement)
|
||||||
GetNode<dialog_bubble>("dialog_bubble").GetDialog(dialogRayCast.GetCollider().Get("file").AsString(), (Area2D)dialogRayCast.GetCollider());
|
GetNode<dialog_bubble>("dialog_bubble").GetDialog(dialogRayCast.GetCollider().Get("file").AsString(), (Area2D)dialogRayCast.GetCollider());
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user