Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add Custom State Actions #3

Open
MarquisMc opened this issue Sep 21, 2024 · 0 comments · May be fixed by #4
Open

Add Custom State Actions #3

MarquisMc opened this issue Sep 21, 2024 · 0 comments · May be fixed by #4

Comments

@MarquisMc
Copy link
Owner

Description

Implement custom state actions to allow users to define and execute specific behaviors when entering, exiting, or transitioning between states. This will enhance the flexibility and functionality of the state machine.

Suggested Solution

  1. Action Interface:

    • Define an interface for custom actions that can be implemented by users.
    • Ensure the interface includes methods for entering, exiting, and transitioning states.
  2. State Class:

    • Modify the State class to include a list of custom actions.
    • Ensure each state can execute its custom actions at the appropriate times (enter, exit, transition).
  3. UI Integration:

    • Provide a UI for users to attach custom actions to states.
    • Allow users to define the specific behaviors for each action.
  4. Edge Cases:

    • Handle cases where actions fail or throw exceptions.
    • Ensure the state machine remains stable and consistent despite action failures.

Example Implementation in Unity C#

using System.Collections.Generic;
using UnityEngine;

public interface IStateAction
{
    void OnEnter();
    void OnExit();
    void OnTransition();
}

public class State : MonoBehaviour
{
    private List<IStateAction> actions = new List<IStateAction>();

    public void AddAction(IStateAction action)
    {
        actions.Add(action);
    }

    public void Enter()
    {
        foreach (var action in actions)
        {
            action.OnEnter();
        }
    }

    public void Exit()
    {
        foreach (var action in actions)
        {
            action.OnExit();
        }
    }

    public void Transition()
    {
        foreach (var action in actions)
        {
            action.OnTransition();
        }
    }
}

public class CustomAction : MonoBehaviour, IStateAction
{
    public void OnEnter()
    {
        Debug.Log("Entering state...");
    }

    public void OnExit()
    {
        Debug.Log("Exiting state...");
    }

    public void OnTransition()
    {
        Debug.Log("Transitioning state...");
    }
}

Tasks

  • Define the custom action interface.
  • Modify the State class to support custom actions.
  • Integrate custom actions with the UI.
  • Test the functionality thoroughly to handle various edge cases.

References

MarquisMc added a commit that referenced this issue Oct 22, 2024
Fixes #3

Implement custom state actions to enhance the flexibility and functionality of the state machine.

* **Custom Action Interface**:
  - Add `IStateAction` interface with `OnEnter`, `OnExit`, and `OnTransition` methods in `StateMachine/Assets/StateMachine/IStateAction.cs`.
* **State Class Modifications**:
  - Add a list of `IStateAction` to `NewState` class in `StateMachine/Assets/StateMachine/NewState.cs`.
  - Modify `NewState` constructor to initialize the list of `IStateAction`.
* **State Machine Modifications**:
  - Add methods to execute custom actions on state enter, exit, and transition in `StateMachine/Assets/StateMachine/NewestStateMachine.cs`.
  - Modify `SetState` method to call custom actions.
* **Custom Action Implementation**:
  - Implement `CustomAction` class inheriting from `MonoBehaviour` and `IStateAction` in `StateMachine/Assets/StateMachine/CustomAction.cs`.
  - Define `OnEnter`, `OnExit`, and `OnTransition` methods with custom behaviors.
* **UI Integration**:
  - Create a UI script to attach custom actions to states in `StateMachine/Assets/StateMachine/StateMachineUI.cs`.
  - Provide methods to define specific behaviors for each action.
* **Exception Handling**:
  - Add exception handling in `SetData` method in `StateMachine/Assets/Tool Box #2/Data/BoolData.cs`.

---

For more details, open the [Copilot Workspace session](https://copilot-workspace.githubnext.com/MarquisMc/StateMachine/issues/3?shareId=XXXX-XXXX-XXXX-XXXX).
@MarquisMc MarquisMc linked a pull request Oct 22, 2024 that will close this issue
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging a pull request may close this issue.

1 participant