В настоящее время основной код способности:
Код: Выделить всё
public abstract class Ability : MonoBehaviour
{
public int id = -1;
public string abilityName = string.Empty;
public string description = string.Empty;
enum AbilityState { Ready, Casting, Cooldown}
AbilityState state = AbilityState.Ready;
public float cooldown = 0f;
public bool castDone = false;
public bool castIFrames = false;
public bool castLockMove = false;
public void TryCast()
{
if (state == AbilityState.Ready)
{
StartCoroutine(Cast());
StartCoroutine(UseAbility());
}
}
IEnumerator Cast()
{
state = AbilityState.Casting;
if (castLockMove)
{
//disable movement
}
if (castIFrames)
{
//disbale hit collider
}
yield return new WaitUntil(() => castDone = true);
//make sure things are back on
StartCoroutine(CooldDown());
}
IEnumerator CooldDown()
{
state = AbilityState.Cooldown;
yield return new WaitForSeconds(cooldown);
state = AbilityState.Ready;
}
public abstract IEnumerator UseAbility();
public void RemoveThis()
{
Destroy(this);
}
}
Код: Выделить всё
public Test_Dash()
{
id = 1;
abilityName = "Dash";
description = "Quick move forwards";
cooldown = 4f;
castIFrames = true;
}
float dashFactor;
Vector2 direction;
public override IEnumerator UseAbility()
{
castDone = false;
yield return null;
while (PlayerClass.playerObject.GetComponent
().moveInfo != Vector2.zero)
{
yield return null;
}
direction = PlayerClass.playerObject.GetComponent().moveInfo;
StartCoroutine(Dash());
}
IEnumerator Dash()
{
PlayerClass.playerObject.GetComponent().AddForce(direction * dashFactor * 0.3f);
yield return null;
PlayerClass.playerObject.GetComponent().AddForce(direction * dashFactor * 0.9f);
yield return null;
PlayerClass.playerObject.GetComponent().AddForce(direction * dashFactor * 1f);
castDone = true;
}
}
Код: Выделить всё
public class Abilities
{
public Ability abl1;
public Ability abl2;
public Ability abl3;
public Ability abl4;
}
Подробнее здесь: https://stackoverflow.com/questions/792 ... ty-c-sharp
Мобильная версия