Partial Completion of Tutorial

This commit is contained in:
Mario Steele 2025-04-11 17:01:53 -05:00
parent 0bee2ee47b
commit cd0f25c73b
6 changed files with 517 additions and 6 deletions

View file

@ -1,4 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="VcsDirectoryMappings" defaultProject="true" />
<component name="VcsDirectoryMappings">
<mapping directory="" vcs="Git" />
</component>
</project>

View file

@ -0,0 +1,40 @@
using Godot;
using PokemonLike.Library.Support;
namespace PokemonLike.Library.Characters;
[GlobalClass]
public partial class CharacterCollisionRayCast : RayCast2D
{
[Signal] public delegate void CollisionEventHandler(bool collided);
[ExportCategory("Collision Vars")] [Export]
public CharacterInput CharacterInput;
[Export] public GodotObject Collider;
public override void _Ready()
{
Logger.Info("Loading character collision raycast ...");
}
public override void _Process(double delta)
{
if (TargetPosition != CharacterInput.TargetPosition)
TargetPosition = CharacterInput.TargetPosition;
if (IsColliding())
{
Collider = GetCollider();
string colliderType = Collider.GetType().Name;
switch (colliderType)
{
default:
EmitSignal(SignalName.Collision, true);
break;
}
}
else
EmitSignal(SignalName.Collision, false);
}
}

View file

@ -0,0 +1 @@
uid://eadca5ac4oeu

View file

@ -13,17 +13,20 @@ public partial class CharacterMovement : Node
[ExportCategory("Nodes")]
[Export] public CharacterBody2D Character;
[Export] public CharacterInput CharacterInput;
[Export] public CharacterCollisionRayCast CharacterCollisionRayCast;
[ExportCategory("Movement")]
[Export] public Vector2 TargetPosition = Vector2.Zero;
[Export] public bool IsWalking = false;
[Export] public bool CollisionDetected = false;
public override void _Ready()
{
CharacterInput.Walk += StartWalking;
CharacterInput.Turn += Turn;
Logger.Info("Loading player movement component ...");
CharacterCollisionRayCast.Collision += (value) => CollisionDetected = value;
Logger.Info("Loading character movement component ...");
}
public override void _Process(double delta)
@ -33,9 +36,11 @@ public partial class CharacterMovement : Node
public bool IsMoving() => IsWalking;
public bool IsColliding() => CollisionDetected;
public void StartWalking()
{
if (!IsMoving())
if (!IsMoving() && !IsColliding())
{
EmitSignal(SignalName.Animation, "walk");
TargetPosition = Character.Position + CharacterInput.Direction * Globals.Instance.GRID_SIZE;

File diff suppressed because it is too large Load diff

View file

@ -1,4 +1,4 @@
[gd_scene load_steps=38 format=3 uid="uid://b6p8tudwratl1"]
[gd_scene load_steps=39 format=3 uid="uid://b6p8tudwratl1"]
[ext_resource type="Script" uid="uid://b70ubhqc16nw4" path="res://Library/Characters/PlayerInput.cs" id="1_40svl"]
[ext_resource type="Script" uid="uid://b4thjem54fyfl" path="res://Library/Characters/Player.cs" id="1_utp2y"]
@ -6,6 +6,7 @@
[ext_resource type="Script" uid="uid://bytos0ecojls1" path="res://Library/Characters/CharacterMovement.cs" id="2_al8ar"]
[ext_resource type="Script" uid="uid://bfijr6flufatm" path="res://Library/Characters/CharacterAnimation.cs" id="4_gy20a"]
[ext_resource type="Script" uid="uid://dxo0eunwolubm" path="res://Library/Utilities/StateMachine.cs" id="5_cqrjx"]
[ext_resource type="Script" uid="uid://eadca5ac4oeu" path="res://Library/Characters/CharacterCollisionRayCast.cs" id="6_gdgf0"]
[ext_resource type="Script" uid="uid://c5nu12q4or8pw" path="res://Library/Characters/States/PlayerRoamState.cs" id="6_khnq4"]
[sub_resource type="RectangleShape2D" id="RectangleShape2D_cvnsp"]
@ -281,10 +282,11 @@ shape = SubResource("RectangleShape2D_cvnsp")
[node name="Input" type="Node" parent="."]
script = ExtResource("1_40svl")
[node name="Movement" type="Node" parent="." node_paths=PackedStringArray("Character", "CharacterInput")]
[node name="Movement" type="Node" parent="." node_paths=PackedStringArray("Character", "CharacterInput", "CharacterCollisionRayCast")]
script = ExtResource("2_al8ar")
Character = NodePath("..")
CharacterInput = NodePath("../Input")
CharacterCollisionRayCast = NodePath("../CollisionRayCast")
[node name="AnimatedSprite2D" type="AnimatedSprite2D" parent="." node_paths=PackedStringArray("CharacterInput", "CharacterMovement")]
position = Vector2(8, 4)
@ -300,10 +302,12 @@ position = Vector2(8, 8)
zoom = Vector2(3, 3)
position_smoothing_enabled = true
[node name="CollisionRayCast" type="RayCast2D" parent="."]
[node name="CollisionRayCast" type="RayCast2D" parent="." node_paths=PackedStringArray("CharacterInput")]
position = Vector2(8, 8)
target_position = Vector2(0, 16)
collide_with_areas = true
script = ExtResource("6_gdgf0")
CharacterInput = NodePath("../Input")
[node name="StateMachine" type="Node" parent="." node_paths=PackedStringArray("Customer")]
script = ExtResource("5_cqrjx")