Doubst about Managin player actions and cooldown time

So i got this action object witch contains a button, when i press that button the action coroutine starts, sets the cooldown of the action and enabled=false the button.

Im trying to implement a cooldown system so every time the turn ends action.currentCooldown -=1.

Im yet to implement my turn manager and i must admit im a bit clueless about it, i guess it must have a state(allyTurn, enemyTurn) and a coroutine to update all action cooldown when the turn changes.

Also what i want to do is asing a List to each unit and then display each action buttons.

here are some screenshots of the code (keep in mind its just a first draft and im still learning the basics)

Hereis the action object

enter image description here

here is the code for the action enter image description here

I apreciate all the help i can get

Upvotes: 0

Views: 30

Answers (1)

Kyle W XTR
Kyle W XTR

Reputation: 11

So there are a couple ways to implement what you are looking for. The way that I would want to go for is using events. You could create events for each state change (i.e. AllyTurnStart and EnemyTurnStart):

public class ExampleClass : MonoBehaviour
{
    bool AllyTurn = true;
    UnityEvent AllyTurnStart;
    UnityEvent EnemyTurnStart;


    BaseAction AllyAction;
    BaseAction EnemyAction;

    void Start()
    {
        // This will setup the event listeners that get called
        if (AllyTurnStart == null)
            AllyTurnStart = new UnityEvent();
        if (EnemyTurnStart == null)
            EnemyTurnStart = new UnityEvent();

        // This is for example purposes but assigning actions to the events can happen anywhere
        AllyAction = new BaseAction()
        EnemyAction = new BaseAction()

        AllyTurnStart.AddListener(AllyAction.StartOfTurnEvents);
        EnemyTurnStart.AddListener(EnemyAction.StartOfTurnEvents);
    }

    //This method is meant to simulate switching turns back and forth.
    void NextTurn()
    {
        if(AllysTurn)
        {
            AllyTurnStart.Invoke()
        }
        else
        {
            EnemyTurnStart.Invoke()
        }

        //This switches whos turn it is
        AllysTurn = !AllysTurn;
    }
}

public class BaseAction : Monobehaviour
{
    int Cooldown;
    
    public StartOfTurnEvents()
    {
        // Here you can reduce the cooldown, Check if it is ready, etc.
    }
}

Hope this helps.

Upvotes: 1

Related Questions