using System.Collections; using System.Collections.Generic; using System.ComponentModel; using EventParts; using Godot; using Godot.Bridge; using Godot.NativeInterop; [ScriptPath("res://Scripts/Events/EventParts/MoveTo.cs")] public partial class MoveTo : Node, EventPart { [Export(PropertyHint.None, "")] private int entityIndex = -1; [Export(PropertyHint.None, "")] private Entity entity; [Export(PropertyHint.None, "")] private Node2D[] position; [Export(PropertyHint.None, "")] private float speed = 1f; [Export(PropertyHint.None, "")] private bool getPartyEntity; [Export(PropertyHint.None, "")] private bool doFacing = true; [Export(PropertyHint.None, "")] private Entity.Animations walkAnim = Entity.Animations.Walk; [Export(PropertyHint.None, "")] private Entity.Animations endAnim; [Export(PropertyHint.None, "")] public bool parallel { get; set; } public EventController parent { get; set; } public Coroutine routine { get; set; } public IEnumerator Routine() { if (position == null || position.Length == 0) { position = new Node2D[GetChildCount()]; for (int i = 0; i < position.Length; i++) { position[i] = GetChild(i); } } if (getPartyEntity) { entity = Party.GetOWEntityByIndex(entityIndex); } else if (entity == null) { entity = parent.entities[entityIndex]; } Vector2[] array = new Vector2[position.Length]; for (int j = 0; j < array.Length; j++) { if (position[j].HasMeta("ignoreX")) { array[j] = new Vector2(entity.GlobalPosition.X, position[j].GlobalPosition.Y); } else if (position[j].HasMeta("ignoreY")) { array[j] = new Vector2(position[j].GlobalPosition.X, entity.GlobalPosition.Y); } else { array[j] = position[j].GlobalPosition; } } entity.DoAutoMove(array, speed, walkAnim, endAnim); entity.moving.doFacing = doFacing; while (entity.moving != null) { yield return null; } } }