diff --git a/Scenes/test.tscn b/Scenes/test.tscn index 7f2a0c1b..4e5ba356 100644 --- a/Scenes/test.tscn +++ b/Scenes/test.tscn @@ -1,4 +1,4 @@ -[gd_scene load_steps=67 format=4 uid="uid://bv451a8wgty4u"] +[gd_scene load_steps=68 format=4 uid="uid://bv451a8wgty4u"] [ext_resource type="Script" path="res://Scripts/GameManager.cs" id="1_8tmoj"] [ext_resource type="PackedScene" uid="uid://bghghp5ep4w2j" path="res://Scenes/player.tscn" id="2_8mh54"] diff --git a/Scripts/Components/Actors/Actor.cs b/Scripts/Components/Actors/Actor.cs new file mode 100644 index 00000000..ddb4ec06 --- /dev/null +++ b/Scripts/Components/Actors/Actor.cs @@ -0,0 +1,38 @@ +using System.Collections.Generic; +using Cirno.Scripts; +using Godot; + +public partial class Actor : CharacterBody2D +{ + + [Export] + public float MovementSpeed { get; private set; } + + public Vector2 FacingDirection { get; set; } + + private GameManager _gameManager; + + private List _movementHandlers = new(); + + public override void _Ready() + { + _gameManager = this.GetGameManager(); + + var children = GetChildren(); + foreach (var child in children) { + if (child is MovementHandler movementHandler) + { + _movementHandlers.Add(movementHandler); + } + } + } + + public override void _PhysicsProcess(double delta) + { + foreach (var handler in _movementHandlers) + { + handler.Move(delta); + } + } + +} \ No newline at end of file diff --git a/Scripts/Components/Actors/ActorFreeMovement.cs b/Scripts/Components/Actors/ActorFreeMovement.cs new file mode 100644 index 00000000..3b330749 --- /dev/null +++ b/Scripts/Components/Actors/ActorFreeMovement.cs @@ -0,0 +1,23 @@ +using Godot; + +public partial class ActorFreeMovement : MovementHandler +{ + + private Actor _parent; + + public override void Init(Actor parent) + { + _parent = parent; + MovementDirection = Vector2.Zero; + _parent.FacingDirection = Vector2.Down; + } + + public override void Move(double delta) + { + _parent.Velocity = MovementDirection * _parent.MovementSpeed; + + _parent.MoveAndSlide(); + + } + +} \ No newline at end of file diff --git a/Scripts/Components/Actors/MovementHandler.cs b/Scripts/Components/Actors/MovementHandler.cs new file mode 100644 index 00000000..618b2edf --- /dev/null +++ b/Scripts/Components/Actors/MovementHandler.cs @@ -0,0 +1,11 @@ +using Godot; + +public abstract partial class MovementHandler : Node2D +{ + public Vector2 MovementDirection { get; set; } + + public abstract void Init(Actor parent); + + public abstract void Move(double delta); + +} \ No newline at end of file