Added tile based movement
This commit is contained in:
parent
e58d6ea0be
commit
1f5149e634
|
|
@ -0,0 +1,53 @@
|
|||
using Godot;
|
||||
|
||||
public partial class RemotePathFollow2D : Path2D
|
||||
{
|
||||
[Export] public Node2D Target { get; set; } = null;
|
||||
[Export] public double Speed { get; set; } = 1;
|
||||
|
||||
public bool Started => _started;
|
||||
public bool Finished => _pathFollowNode.ProgressRatio >= 1;
|
||||
|
||||
private PathFollow2D _pathFollowNode = new PathFollow2D();
|
||||
|
||||
private bool _started = true;
|
||||
private Vector2 _startingPosition;
|
||||
|
||||
public RemotePathFollow2D() { }
|
||||
public RemotePathFollow2D(Node2D target) => Target = target;
|
||||
public RemotePathFollow2D(float speed) => Speed = speed;
|
||||
public RemotePathFollow2D(Node2D target, float speed) => (Target, Speed) = (target, speed);
|
||||
|
||||
public override void _Ready()
|
||||
{
|
||||
base._Ready();
|
||||
|
||||
_pathFollowNode.Loop = false;
|
||||
_pathFollowNode.CubicInterp = false;
|
||||
|
||||
AddChild(_pathFollowNode);
|
||||
}
|
||||
|
||||
public override void _Process(double delta)
|
||||
{
|
||||
base._Process(delta);
|
||||
}
|
||||
|
||||
public override void _PhysicsProcess(double delta)
|
||||
{
|
||||
base._Process(delta);
|
||||
|
||||
if (Started)
|
||||
{
|
||||
_pathFollowNode.Progress += (float)(Speed * delta);
|
||||
Target.Position = _startingPosition + _pathFollowNode.Position;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public void Start()
|
||||
{
|
||||
_startingPosition = Target.Position;
|
||||
_started = true;
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1 @@
|
|||
uid://n8kpn7lhard2
|
||||
|
|
@ -1,7 +1,8 @@
|
|||
[gd_scene load_steps=9 format=4 uid="uid://clilwruw7ln4w"]
|
||||
[gd_scene load_steps=10 format=4 uid="uid://clilwruw7ln4w"]
|
||||
|
||||
[ext_resource type="Texture2D" uid="uid://cbioy3k1erth7" path="res://Assets/Tilemaps/Tilemap/tilemap.png" id="1_8871w"]
|
||||
[ext_resource type="Script" uid="uid://dtco6yt3nhgrp" path="res://Scripts/Mob.cs" id="2_tsg1g"]
|
||||
[ext_resource type="Script" uid="uid://rmyjvxdhcw4r" path="res://Scripts/Floor.cs" id="2_vd8ro"]
|
||||
[ext_resource type="Texture2D" uid="uid://blpkbnd2ginn0" path="res://Assets/Tilemaps/Tiles/tile_0084.png" id="3_vd8ro"]
|
||||
[ext_resource type="Texture2D" uid="uid://bdhcy1gn7fnhp" path="res://Assets/Tilemaps/Tiles/tile_0121.png" id="4_lcu17"]
|
||||
|
||||
|
|
@ -153,42 +154,43 @@ size = Vector2(16, 16)
|
|||
[node name="Node2D" type="Node2D"]
|
||||
scale = Vector2(4, 4)
|
||||
|
||||
[node name="TileMap" type="TileMap" parent="."]
|
||||
tile_set = SubResource("TileSet_fqbyx")
|
||||
format = 2
|
||||
|
||||
[node name="Floor" type="TileMapLayer" parent="TileMap"]
|
||||
[node name="Floor" type="TileMapLayer" parent="." node_paths=PackedStringArray("MovementTarget")]
|
||||
use_parent_material = true
|
||||
tile_map_data = PackedByteArray("AAAHAAQAAAAAAAAAAAAIAAQAAAACAAQAAAAJAAQAAAAAAAAAAAAKAAQAAAACAAQAAAALAAQAAAAAAAAAAAAMAAQAAAADAAQAAAAHAAUAAAAAAAQAAAAIAAUAAAAAAAAAAAAJAAUAAAAAAAQAAAAKAAUAAAAAAAAAAAALAAUAAAAAAAQAAAAMAAUAAAAAAAAAAAANAAQAAAAAAAAAAAAOAAQAAAAAAAQAAAAPAAQAAAAAAAAAAAAQAAQAAAAEAAQAAAANAAUAAAAAAAQAAAAOAAUAAAAAAAIAAAAPAAUAAAAAAAQAAAAQAAUAAAAAAAAAAAAQAAYAAAAAAAQAAAAQAAcAAAAAAAAAAAAQAAgAAAAAAAQAAAAQAAkAAAAAAAAAAAAQAAoAAAAAAAQAAAAQAAsAAAAAAAIAAAAQAAwAAAAAAAQAAAAQAA0AAAAAAAAAAAAPAA0AAAAGAAMAAAAOAA0AAAAAAAAAAAANAA0AAAAAAAQAAAAMAA0AAAAAAAAAAAALAA0AAAAAAAQAAAAKAA0AAAAAAAEAAAAJAA0AAAAAAAQAAAAIAA0AAAAAAAAAAAAHAA0AAAAAAAQAAAAHAAwAAAAAAAAAAAAHAAsAAAAAAAQAAAAHAAoAAAAAAAAAAAAHAAkAAAAAAAQAAAAHAAgAAAAAAAAAAAAHAAcAAAAFAAQAAAAHAAYAAAAAAAAAAAAIAAYAAAAAAAQAAAAJAAYAAAAAAAEAAAAKAAYAAAAAAAQAAAALAAYAAAAAAAAAAAAMAAYAAAAAAAQAAAANAAYAAAAAAAAAAAAOAAYAAAAAAAQAAAAPAAYAAAAAAAAAAAAPAAcAAAAAAAQAAAAPAAgAAAAAAAAAAAAPAAkAAAAAAAQAAAAPAAoAAAAAAAAAAAAPAAsAAAAAAAQAAAAPAAwAAAAAAAAAAAAOAAwAAAAAAAQAAAANAAwAAAAAAAAAAAAMAAwAAAAAAAQAAAALAAwAAAAAAAAAAAAKAAwAAAABAAQAAAAJAAwAAAAAAAAAAAAIAAwAAAAAAAQAAAAIAAsAAAAAAAAAAAAIAAoAAAABAAQAAAAIAAkAAAAAAAAAAAAIAAgAAAAAAAQAAAAIAAcAAAAAAAAAAAAJAAcAAAAAAAQAAAAKAAcAAAAAAAAAAAALAAcAAAAAAAQAAAAMAAcAAAAAAAAAAAANAAcAAAABAAQAAAAOAAcAAAAAAAAAAAAOAAgAAAAAAAQAAAAOAAkAAAAAAAAAAAAOAAoAAAABAAQAAAAOAAsAAAAAAAAAAAANAAsAAAABAAQAAAAMAAsAAAAAAAAAAAALAAsAAAAAAAQAAAAKAAsAAAAAAAAAAAAJAAsAAAAAAAQAAAAJAAoAAAAAAAAAAAAJAAkAAAABAAQAAAAKAAkAAAAAAAAAAAALAAkAAAAAAAQAAAAMAAkAAAAAAAAAAAANAAkAAAAAAAQAAAANAAoAAAAAAAIAAAAMAAoAAAAAAAQAAAALAAoAAAAAAAAAAAAKAAoAAAAAAAQAAAAJAAgAAAAAAAAAAAAKAAgAAAAAAAQAAAALAAgAAAAAAAAAAAAMAAgAAAAAAAQAAAANAAgAAAAAAAAAAAA=")
|
||||
tile_set = SubResource("TileSet_fqbyx")
|
||||
script = ExtResource("2_vd8ro")
|
||||
MovementTarget = NodePath("Mob")
|
||||
MovementSpeed = 20.0
|
||||
|
||||
[node name="Mob" type="CharacterBody2D" parent="."]
|
||||
position = Vector2(168, 104)
|
||||
[node name="Mob" type="CharacterBody2D" parent="Floor"]
|
||||
position = Vector2(167.75, 103.75)
|
||||
script = ExtResource("2_tsg1g")
|
||||
|
||||
[node name="Sprite2D" type="Sprite2D" parent="Mob"]
|
||||
[node name="Sprite2D" type="Sprite2D" parent="Floor/Mob"]
|
||||
texture = ExtResource("3_vd8ro")
|
||||
metadata/_edit_lock_ = true
|
||||
|
||||
[node name="CollisionShape2D" type="CollisionShape2D" parent="Mob"]
|
||||
[node name="CollisionShape2D" type="CollisionShape2D" parent="Floor/Mob"]
|
||||
shape = SubResource("RectangleShape2D_fqbyx")
|
||||
metadata/_edit_lock_ = true
|
||||
|
||||
[node name="Navigation" type="Node2D" parent="Mob"]
|
||||
[node name="Navigation" type="Node2D" parent="Floor/Mob"]
|
||||
|
||||
[node name="NavigationAgent2D" type="NavigationAgent2D" parent="Mob/Navigation"]
|
||||
[node name="NavigationAgent2D" type="NavigationAgent2D" parent="Floor/Mob/Navigation"]
|
||||
|
||||
[node name="Timer" type="Timer" parent="Mob/Navigation"]
|
||||
[node name="Timer" type="Timer" parent="Floor/Mob/Navigation"]
|
||||
wait_time = 0.1
|
||||
autostart = true
|
||||
|
||||
[node name="TargetMob" type="CharacterBody2D" parent="."]
|
||||
[node name="TargetMob" type="CharacterBody2D" parent="Floor"]
|
||||
position = Vector2(232, 184)
|
||||
|
||||
[node name="Sprite2D" type="Sprite2D" parent="TargetMob"]
|
||||
[node name="Sprite2D" type="Sprite2D" parent="Floor/TargetMob"]
|
||||
texture = ExtResource("4_lcu17")
|
||||
metadata/_edit_lock_ = true
|
||||
|
||||
[node name="CollisionShape2D" type="CollisionShape2D" parent="TargetMob"]
|
||||
[node name="CollisionShape2D" type="CollisionShape2D" parent="Floor/TargetMob"]
|
||||
shape = SubResource("RectangleShape2D_vuqrp")
|
||||
metadata/_edit_lock_ = true
|
||||
|
||||
[connection signal="RequestMovement" from="Floor/Mob" to="Floor" method="_on_mob_request_movement"]
|
||||
|
|
|
|||
|
|
@ -0,0 +1,65 @@
|
|||
using Godot;
|
||||
using Godot.Collections;
|
||||
|
||||
public partial class Floor : TileMapLayer
|
||||
{
|
||||
[Export] public Mob MovementTarget { get; set; }
|
||||
[Export] public float MovementSpeed { get; set; }
|
||||
|
||||
private RemotePathFollow2D _movementPathNode = null;
|
||||
|
||||
private AStarGrid2D _directionFinder;
|
||||
|
||||
public override void _Ready()
|
||||
{
|
||||
base._Ready();
|
||||
|
||||
MovementTarget.RequestMovement += _HandleMoveRequest;
|
||||
|
||||
_directionFinder = new AStarGrid2D();
|
||||
_directionFinder.Region = GetUsedRect();
|
||||
_directionFinder.Update();
|
||||
|
||||
Array<Vector2I> path = _directionFinder.GetIdPath(GetUsedRect().Position, GetUsedRect().Position + new Vector2I(5, 3));
|
||||
Line2D line = new Line2D();
|
||||
line.ZIndex = 5;
|
||||
foreach (Vector2I point in path)
|
||||
{
|
||||
line.AddPoint(MapToLocal(point));
|
||||
}
|
||||
//AddChild(line);
|
||||
}
|
||||
|
||||
public override void _Process(double delta)
|
||||
{
|
||||
base._Process(delta);
|
||||
|
||||
if (_movementPathNode is { Finished: true })
|
||||
{
|
||||
_movementPathNode.QueueFree();
|
||||
_movementPathNode = null;
|
||||
}
|
||||
}
|
||||
|
||||
private void _HandleMoveRequest(Vector2I direction)
|
||||
{
|
||||
|
||||
if (direction == Vector2I.Zero || _movementPathNode != null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
_movementPathNode = new RemotePathFollow2D(MovementTarget, MovementSpeed);
|
||||
_movementPathNode.Curve = _curveToPoint(MapToLocal(direction) - MapToLocal(Vector2I.Zero));
|
||||
_movementPathNode.Start();
|
||||
|
||||
AddChild(_movementPathNode);
|
||||
}
|
||||
|
||||
private Curve2D _curveToPoint(Vector2 point)
|
||||
{
|
||||
Curve2D curve = new Curve2D();
|
||||
curve.AddPoint(Vector2.Zero);
|
||||
curve.AddPoint(point);
|
||||
return curve;
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1 @@
|
|||
uid://rmyjvxdhcw4r
|
||||
|
|
@ -1,14 +1,17 @@
|
|||
using Godot;
|
||||
using System;
|
||||
|
||||
public partial class Mob : CharacterBody2D
|
||||
{
|
||||
[Signal]
|
||||
public delegate void RequestMovementEventHandler(Vector2I direction);
|
||||
|
||||
|
||||
[Export]
|
||||
public CharacterBody2D target = null;
|
||||
|
||||
public int speed = 100;
|
||||
public NavigationAgent2D navAgent;
|
||||
|
||||
public override void _Ready()
|
||||
{
|
||||
navAgent = GetNode<NavigationAgent2D>("Navigation/NavigationAgent2D");
|
||||
|
|
@ -16,6 +19,7 @@ public partial class Mob : CharacterBody2D
|
|||
|
||||
public override void _Process(double delta)
|
||||
{
|
||||
this.MoveLocalX(0.5f);
|
||||
Vector2 direction = Input.GetVector("left","right", "up", "down");
|
||||
EmitSignalRequestMovement(new Vector2I((int)direction.X, (int)direction.Y));
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -24,6 +24,29 @@ window/size/viewport_height=1080
|
|||
|
||||
project/assembly_name="AutoChessProject"
|
||||
|
||||
[input]
|
||||
|
||||
left={
|
||||
"deadzone": 0.2,
|
||||
"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":4194319,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null)
|
||||
]
|
||||
}
|
||||
right={
|
||||
"deadzone": 0.2,
|
||||
"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":4194321,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null)
|
||||
]
|
||||
}
|
||||
up={
|
||||
"deadzone": 0.2,
|
||||
"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":4194320,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null)
|
||||
]
|
||||
}
|
||||
down={
|
||||
"deadzone": 0.2,
|
||||
"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":4194322,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null)
|
||||
]
|
||||
}
|
||||
|
||||
[rendering]
|
||||
|
||||
textures/canvas_textures/default_texture_filter=0
|
||||
|
|
|
|||
Loading…
Reference in New Issue