Danro/Assets/Scripts/Abstract/Interfaces.cs

106 lines
4.8 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

using UnityEngine;
namespace RR.Common.Interfaces
{
/// <summary>
/// Интерфейс для объектов, которые могут быть возвращены к владельцу.
/// Используется для реализации механики возврата брошенных объектов.
/// </summary>
public interface IRecallable
{
/// <summary>
/// Метод для возвращения объекта к владельцу.
/// Для возвращения желательно иметь на объекте
/// <see cref="GameObject"/> owner или аналогичный атрибут
/// </summary>
public void Recall();
}
/// <summary>
/// Интерфейс для объектов, которые могут быть подняты игроком.
/// Реализуется объектами, которые можно подбирать и/или держать.
/// </summary>
public interface IPickable
{
/// <summary>
/// Метод для подбора объекта игроком.
/// Привязывает снаряд к точке привязки на игроке.
/// </summary>
/// <param name="newOwner">Новый владелец объекта</param>
/// <param name="optionalAttachPoint">Опциональная точка привязки. При передаче, объект будет привязан на нее</param>
/// <returns>bool - получилось ли поднять объект</returns>
public bool TryPickup(GameObject newOwner, Transform optionalAttachPoint = null);
}
/// <summary>
/// Интерфейс для объектов, которые могут получать и наносить урон.
/// Реализуется всеми сущностями, имеющими систему здоровья.
/// </summary>
public interface IDamageable
{
/// <summary>
/// Метод для получения урона объектом.
/// </summary>
/// <param name="amount">Количество урона</param>
void TakeDamage(float amount);
/// <summary>
/// Метод для восстановления здоровья объекта.
/// </summary>
/// <param name="amount">Количество восстанавливаемого здоровья</param>
void Heal(float amount);
/// <summary>
/// Метод для обработки смерти объекта.
/// Вызывается когда здоровье достигает нуля или меньше.
/// </summary>
void Die();
}
/// <summary>
/// Интерфейс для объектов, которые могут выполнять действие.
/// Используется для интерактивных объектов в игре.
/// </summary>
public interface IActionable
{
/// <summary>
/// Выполняет действие, связанное с объектом.
/// Например, активация механизма, открытие двери и т.д.
/// </summary>
void PerformAction();
}
}
namespace RR.Game2D.Core.Managers.Interfaces
{
/// <summary>
/// Интерфейс для объектов, которые могут быть запущены как снаряд.
/// Реализуется объектами, которые можно бросать в определенном направлении.
/// </summary>
public interface ILaunchable
{
/// <summary>
/// Метод для запуска объекта как снаряд
/// </summary>
/// <param name="direction">Направление запуска</param>
/// <param name="speed">Скорость запуска</param>
/// <param name="thrower">Владелец</param>
public void Launch(Vector2 direction, float speed, GameObject thrower);
}
/// <summary>
/// Интерфейс для объектов, которые могут отскакивать от поверхностей.
/// Реализуется объектами с физикой отскока при столкновении.
/// </summary>
public interface IBouncy
{
/// <summary>
/// Метод для просчета отскоков.
/// </summary>
/// <param name="collision">Коллизия, с которой столкнулся объект</param>
/// <returns>bool - произошел ли отскок</returns>
public bool TryBounce(Collision2D collision);
}
}