Код: Выделить всё
public interface ISortedGroupWithMover: ISortedGroup
Код: Выделить всё
public interface ISortedGroup : IGroup
Код: Выделить всё
public interface IGroup
Код: Выделить всё
public interface IMoveableHoldee : IHoldee, IHoldeeMovements
Код: Выделить всё
public interface IHoldeeMovements
Код: Выделить всё
public interface IHoldee
Первый из них — группа. -> отсортированная группа -> sortedgroupmover
второй — Holdee -> moveableHoldee (это Holdee, который может использовать движения)
в общем это вроде сработало, и я имею в виду, что большую часть этого я мог бы вставить, например тот же интерфейс, но я хотел немного поиграть и подумал, что было бы лучше, если бы разные части логики были разделены.
Теперь возникла следующая проблема:
У меня есть класс:
Код: Выделить всё
public class CardDeck : MonoBehaviour, ISortedGroupWithMover
она реализует:
Код: Выделить всё
(from: public interface IGroup)
public List GetHoldees();
Код: Выделить всё
public List GetHoldees() => _cards;
Код: Выделить всё
var deck = DealDeck().GetHoldees().First().IHoldee.GetGameObject().name;
однако проблема возникает, когда я пытаюсь использовать этот метод
Код: Выделить всё
(from: public interface ISortedGroup : IGroup)
public T TopHoldee() => GetHoldees().First();
На самом деле странно то, что этот метод НИКОГДА не запускается , даже если я вызову его и помещу вывод в тело метода, он НЕ будет напечатан
Теперь, если я изменю этот метод следующим образом:
Код: Выделить всё
public void TopHoldee()
{
Debug.Log("TTEST: " + GetHoldees().First());
}
Это проект Unity, так что это тоже может иметь к нему какое-то отношение, но меня немного смущает этот факт что простое изменение типа может иметь такой эффект. Я также понятия не имею, почему это так, поэтому сообщите мне, в чем причина такого неожиданного поведения.
Примечание:
Код: Выделить всё
public abstract class ACardFather : MonoBehaviour, SortedUiObject, IMoveableHoldee
Код: Выделить всё
public interface IGroup
{
public RectTransform GetRect() => GetHolder().GetComponent();
public GameObject GetHolder();
public List GetHoldees();
}
Код: Выделить всё
public interface ISortedGroupWithMover:
ISortedGroup
{
bool IsMoving { get; set; }
void StartMoving() => IsMoving = true;
void EndMoving() => IsMoving = false;
bool IsBottomCollapsed();
bool IsTopCollapsed();
}
Код: Выделить всё
public interface IMoveableHoldee : IHoldee,
IHoldeeMovements
{
IHoldee IHoldee => this;
IHoldee IMovements => this;
}
Код: Выделить всё
public interface ISortedGroup : IGroup
{
public int GetVerticalOffset();
public int GetHorizontalOffset();
public bool ExemptFirst();
public Vector3 GetOffset(int order)
{
...
}
private void ChangeOffsets(int order, MonoBehaviour obj)
{
...
}
private void ChangeSortingOrder(int order, SortedUiObject
sortedObj)
{...
}
private void ChangeSizes(MonoBehaviour card)
{
...
}
public IEnumerator MoveToStartingPos(float
duration,AnimationCurve curve)
{
...
}
public T TopHoldee() => GetHoldees().Last();
public T BottomHoldee() => GetHoldees().First();
}
Изменить:
Я только что попробовал эту распечатку:
Код: Выделить всё
Debug.Log("BottomItem is: " +d.BottomItem());
Debug.Log("TopItem is:" +d.TopItem());
Код: Выделить всё
public T TopItem() => GetHoldees().First();
public T BottomItem() => GetHoldees().First();
Код: Выделить всё
BottomItem is: System.Collections.Generic.List`1[DefaultNamespace.IMoveableHoldee`1[ACardFather]]
TopItem is:tmpdeck (UnityEngine.GameObject)
Подробнее здесь: https://stackoverflow.com/questions/792 ... -of-type-t