This commit is contained in:
Syntriax 2023-03-20 23:49:39 +03:00
commit 9544046ce7
10 changed files with 66 additions and 77 deletions

View File

@ -1,6 +1,6 @@
# Action # Action
## Dependencies ## Dependencies
1. [ToggleState Module](https://git.syntriax.com/Syntriax/ToggleState) 1. [State Module](https://git.syntriax.com/Syntriax/State)
Make sure to separately clone these modules along with this one too. Make sure to separately clone these modules along with this one too.

29
Runtime/Action.cs Normal file
View File

@ -0,0 +1,29 @@
using System;
using Syntriax.Modules.State;
using UnityEngine;
namespace Syntriax.Modules.Action
{
public class Action : MonoBehaviour, IAction
{
private IStateEnable _stateEnable = null;
public IStateEnable StateEnable
{
get
{
_stateEnable = _stateEnable ?? GetComponent<State.IStateEnable>() ?? gameObject.AddComponent<State.StateEnableMonoBehaviour>();
return _stateEnable;
}
}
public Action<IAction> OnActivated { get; set; } = null;
public void Activate()
{
if (!StateEnable.IsEnabledNullChecked())
return;
OnActivated?.Invoke(this);
}
}
}

View File

@ -1,5 +1,5 @@
fileFormatVersion: 2 fileFormatVersion: 2
guid: d07cd6f6a7a635c41add4964a6aba382 guid: f0778370286865d42a8453967944ab67
MonoImporter: MonoImporter:
externalObjects: {} externalObjects: {}
serializedVersion: 2 serializedVersion: 2

View File

@ -1,33 +0,0 @@
using System;
using Syntriax.Modules.ToggleState;
using UnityEngine;
namespace Syntriax.Modules.Action
{
public abstract class ActionBase : MonoBehaviour, IAction
{
public IToggleState MemberToggleState { get; protected set; } = null;
public Action<IAction> OnActivated { get; set; } = null;
protected IToggleState toggleState = null;
protected virtual void Awake()
{
toggleState = GetComponent<IToggleState>();
MemberToggleState = new ToggleStateMember(true);
OnActivated += (_) => OnActionActivated();
}
/// <summary>
/// Called when the current <see cref="ActionBase"/> gets activated
/// </summary>
protected abstract void OnActionActivated();
public virtual void Activate()
{
if (!MemberToggleState.IsToggledNullChecked() || !toggleState.IsToggledNullChecked())
return;
OnActivated?.Invoke(this);
}
}
}

View File

@ -1,28 +0,0 @@
using System;
using Syntriax.Modules.ToggleState;
namespace Syntriax.Modules.Action
{
public abstract class ActionBaseWithDeactivation : ActionBase, IActionWithDeactivation
{
public Action<IAction> OnDeactivated { get; set; } = null;
protected override void Awake()
{
base.Awake();
OnDeactivated += (_) => OnActionDeactivated();
}
/// <summary>
/// Called when the current <see cref="ActionBase"/> gets deactivated
/// </summary>
protected abstract void OnActionDeactivated();
public virtual void Deactivate()
{
if (!MemberToggleState.IsToggledNullChecked() || !toggleState.IsToggledNullChecked())
return;
OnDeactivated?.Invoke(this);
}
}
}

View File

@ -0,0 +1,18 @@
using System;
using Syntriax.Modules.State;
namespace Syntriax.Modules.Action
{
public class ActionWithDeactivation : Action, IActionWithDeactivation
{
public Action<IAction> OnDeactivated { get; set; } = null;
public void Deactivate()
{
if (!StateEnable.IsEnabledNullChecked())
return;
OnDeactivated?.Invoke(this);
}
}
}

View File

@ -1,5 +1,5 @@
fileFormatVersion: 2 fileFormatVersion: 2
guid: 7bce8bd8b35a51f4785a3933e3526ddf guid: c41fb1050f19d6c479295ba680295261
MonoImporter: MonoImporter:
externalObjects: {} externalObjects: {}
serializedVersion: 2 serializedVersion: 2

View File

@ -1,14 +1,14 @@
using System; using System;
using Syntriax.Modules.ToggleState; using Syntriax.Modules.State;
namespace Syntriax.Modules.Action namespace Syntriax.Modules.Action
{ {
public interface IAction public interface IAction
{ {
/// <summary> /// <summary>
/// The member <see cref="IToggleState"/> the Action uses to check if it's active or not /// The member <see cref="IStateEnable"/> the Action uses to check if it's active or not
/// </summary> /// </summary>
IToggleState MemberToggleState { get; } IStateEnable StateEnable { get; }
/// <summary> /// <summary>
/// Called when the <see cref="IAction"/> is Activated /// Called when the <see cref="IAction"/> is Activated

View File

@ -1,10 +1,10 @@
using Syntriax.Modules.ToggleState; using Syntriax.Modules.State;
using UnityEngine; using UnityEngine;
namespace Syntriax.Modules.Action.Samples namespace Syntriax.Modules.Action.Samples
{ {
[RequireComponent(typeof(Rigidbody2D))] [RequireComponent(typeof(Rigidbody2D))]
public class PlatformerJump : ActionBaseWithDeactivation public class PlatformerJump : ActionWithDeactivation
{ {
[SerializeField] private float jumpSpeed = 10f; [SerializeField] private float jumpSpeed = 10f;
public float JumpSpeed { get => jumpSpeed; set => jumpSpeed = value; } public float JumpSpeed { get => jumpSpeed; set => jumpSpeed = value; }
@ -25,22 +25,25 @@ namespace Syntriax.Modules.Action.Samples
set => suspensionMultiplier = value * Time.fixedDeltaTime; set => suspensionMultiplier = value * Time.fixedDeltaTime;
} }
protected IToggleState gameObjectToggleState = null; protected IStateEnable gameObjectStateEnable = null;
protected bool airSuspension = false; protected bool airSuspension = false;
protected Rigidbody2D rigid = null; protected Rigidbody2D rigid = null;
protected virtual void Start() protected virtual void Start()
{ {
rigid = GetComponent<Rigidbody2D>(); rigid = GetComponent<Rigidbody2D>();
gameObjectToggleState = GetComponent<IToggleState>(); gameObjectStateEnable = GetComponent<IStateEnable>();
FallMultiplier = fallMultiplier; FallMultiplier = fallMultiplier;
SuspensionMultiplier = suspensionMultiplier; SuspensionMultiplier = suspensionMultiplier;
OnActivated += _ => OnActionDeactivated();
OnDeactivated += _ => OnActionActivated();
} }
protected virtual void FixedUpdate() protected virtual void FixedUpdate()
{ {
if (!MemberToggleState.IsToggledNullChecked() || !gameObjectToggleState.IsToggledNullChecked()) if (!StateEnable.IsEnabledNullChecked() || !gameObjectStateEnable.IsEnabledNullChecked())
return; return;
if (rigid.velocity.y < FallThreshold) if (rigid.velocity.y < FallThreshold)
@ -59,17 +62,17 @@ namespace Syntriax.Modules.Action.Samples
rigid.velocity = velocity; rigid.velocity = velocity;
} }
protected override void OnActionDeactivated() protected void OnActionDeactivated()
{ {
if (!gameObjectToggleState.IsToggledNullChecked()) if (!gameObjectStateEnable.IsEnabledNullChecked())
return; return;
airSuspension = false; airSuspension = false;
} }
protected override void OnActionActivated() protected void OnActionActivated()
{ {
if (!gameObjectToggleState.IsToggledNullChecked()) if (!gameObjectStateEnable.IsEnabledNullChecked())
return; return;
Jump(); Jump();

View File

@ -1,6 +1,6 @@
{ {
"name": "com.syntriax.action", "name": "com.syntriax.action",
"version": "0.1.0", "version": "0.2.0",
"displayName": "Action Module", "displayName": "Action Module",
"unity": "2019.1", "unity": "2019.1",
"documentationUrl": "https://git.syntriax.com/Syntriax/Action.git", "documentationUrl": "https://git.syntriax.com/Syntriax/Action.git",