First Commit
This commit is contained in:
parent
dbe683c982
commit
6d6687d225
|
@ -0,0 +1,8 @@
|
||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 247a7892cc48fa54c971733d8e0213db
|
||||||
|
folderAsset: yes
|
||||||
|
DefaultImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
|
@ -0,0 +1,54 @@
|
||||||
|
using Syntriax.Modules.Movement.ColliderCheck;
|
||||||
|
using Syntriax.Modules.Movement.ColliderCheck.Ground;
|
||||||
|
using UnityEngine;
|
||||||
|
|
||||||
|
namespace Syntriax.Modules.Movement
|
||||||
|
{
|
||||||
|
[RequireComponent(typeof(Rigidbody2D))]
|
||||||
|
public class OneDimensional2DAirMovement : MonoBehaviour, IMovement, IState
|
||||||
|
{
|
||||||
|
private IGroundCheck groundCheck = null;
|
||||||
|
private Rigidbody2D rigid = null;
|
||||||
|
private float moveValue = 0f;
|
||||||
|
|
||||||
|
|
||||||
|
public bool IsActive => StateEnabled && !groundCheck.IsCollided();
|
||||||
|
public bool StateEnabled { get; set; } = true;
|
||||||
|
public float SpeedMultiplier { get; set; } = 1f;
|
||||||
|
|
||||||
|
private void Start()
|
||||||
|
{
|
||||||
|
rigid = GetComponent<Rigidbody2D>();
|
||||||
|
groundCheck = GetComponentInChildren<IGroundCheck>();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void FixedUpdate()
|
||||||
|
{
|
||||||
|
if (!IsActive)
|
||||||
|
return;
|
||||||
|
|
||||||
|
ApplyMovement();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void ApplyMovement()
|
||||||
|
{
|
||||||
|
Vector2 velocity = rigid.velocity;
|
||||||
|
velocity.x += moveValue * Time.fixedDeltaTime;
|
||||||
|
|
||||||
|
if (moveValue != 0f)
|
||||||
|
{
|
||||||
|
if (Mathf.Abs(velocity.x) > Mathf.Abs(moveValue))
|
||||||
|
velocity.x = moveValue;
|
||||||
|
else if (Mathf.Abs(velocity.x - moveValue) > Mathf.Abs(moveValue))
|
||||||
|
velocity.x += moveValue * Time.fixedDeltaTime;
|
||||||
|
}
|
||||||
|
|
||||||
|
rigid.velocity = velocity;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void Move(float x = 0, float y = 0, float z = 0)
|
||||||
|
{
|
||||||
|
moveValue = x * SpeedMultiplier;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,11 @@
|
||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 12a58daabbf3fa8418a164390a593753
|
||||||
|
MonoImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
serializedVersion: 2
|
||||||
|
defaultReferences: []
|
||||||
|
executionOrder: 0
|
||||||
|
icon: {instanceID: 0}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
|
@ -0,0 +1,44 @@
|
||||||
|
using Syntriax.Modules.Movement.ColliderCheck;
|
||||||
|
using Syntriax.Modules.Movement.ColliderCheck.Ground;
|
||||||
|
using UnityEngine;
|
||||||
|
|
||||||
|
namespace Syntriax.Modules.Movement
|
||||||
|
{
|
||||||
|
[RequireComponent(typeof(Rigidbody2D))]
|
||||||
|
public class OneDimensional2DGroundMovement : MonoBehaviour, IMovement, IState
|
||||||
|
{
|
||||||
|
private IGroundCheck groundCheck = null;
|
||||||
|
private Rigidbody2D rigid = null;
|
||||||
|
private float moveValue = 0f;
|
||||||
|
|
||||||
|
public bool IsActive => StateEnabled && groundCheck.IsCollided();
|
||||||
|
public bool StateEnabled { get; set; } = true;
|
||||||
|
public float SpeedMultiplier { get; set; } = 1f;
|
||||||
|
|
||||||
|
private void Start()
|
||||||
|
{
|
||||||
|
rigid = GetComponent<Rigidbody2D>();
|
||||||
|
groundCheck = GetComponentInChildren<IGroundCheck>();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void FixedUpdate()
|
||||||
|
{
|
||||||
|
if (!IsActive)
|
||||||
|
return;
|
||||||
|
|
||||||
|
ApplyMovement();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void ApplyMovement()
|
||||||
|
{
|
||||||
|
Vector2 velocity = rigid.velocity;
|
||||||
|
velocity.x = moveValue;
|
||||||
|
rigid.velocity = velocity;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void Move(float x = 0, float y = 0, float z = 0)
|
||||||
|
{
|
||||||
|
moveValue = x * SpeedMultiplier;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,11 @@
|
||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 849a6316df6662a48ae6cfcd4c2fbc1e
|
||||||
|
MonoImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
serializedVersion: 2
|
||||||
|
defaultReferences: []
|
||||||
|
executionOrder: 0
|
||||||
|
icon: {instanceID: 0}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
|
@ -0,0 +1,8 @@
|
||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 115027fb4693d6247bd07cab06d81091
|
||||||
|
folderAsset: yes
|
||||||
|
DefaultImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
|
@ -0,0 +1,8 @@
|
||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 2c348589c341f3d4f8db2e34198ec32e
|
||||||
|
folderAsset: yes
|
||||||
|
DefaultImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
|
@ -0,0 +1,4 @@
|
||||||
|
namespace Syntriax.Modules.Movement.ColliderCheck.Ground
|
||||||
|
{
|
||||||
|
public interface IGroundCheck : IColliderCheck { }
|
||||||
|
}
|
|
@ -0,0 +1,11 @@
|
||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 2cbb917bc29d63241aa50c7fe8dc141d
|
||||||
|
MonoImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
serializedVersion: 2
|
||||||
|
defaultReferences: []
|
||||||
|
executionOrder: 0
|
||||||
|
icon: {instanceID: 0}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
|
@ -0,0 +1,4 @@
|
||||||
|
namespace Syntriax.Modules.Movement.ColliderCheck.Ground
|
||||||
|
{
|
||||||
|
public class TwoDimensionalBoxChildGroundCheck : TwoDimensionalBoxChildColliderCheck, IGroundCheck { }
|
||||||
|
}
|
|
@ -0,0 +1,11 @@
|
||||||
|
fileFormatVersion: 2
|
||||||
|
guid: a878fb141e25e954c9b73eff8657605a
|
||||||
|
MonoImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
serializedVersion: 2
|
||||||
|
defaultReferences: []
|
||||||
|
executionOrder: 0
|
||||||
|
icon: {instanceID: 0}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
|
@ -0,0 +1,10 @@
|
||||||
|
using UnityEngine;
|
||||||
|
|
||||||
|
namespace Syntriax.Modules.Movement.ColliderCheck
|
||||||
|
{
|
||||||
|
public interface IColliderCheck
|
||||||
|
{
|
||||||
|
LayerMask ColliderMask { get; set; }
|
||||||
|
bool IsColliderDetected { get; }
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,11 @@
|
||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 164c4b9411986c14e8012b2e7fdd2a6a
|
||||||
|
MonoImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
serializedVersion: 2
|
||||||
|
defaultReferences: []
|
||||||
|
executionOrder: 0
|
||||||
|
icon: {instanceID: 0}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
|
@ -0,0 +1,8 @@
|
||||||
|
namespace Syntriax.Modules.Movement.ColliderCheck
|
||||||
|
{
|
||||||
|
public static class IColliderCheckExtensions
|
||||||
|
{
|
||||||
|
public static bool IsCollided(this IColliderCheck colliderCheck)
|
||||||
|
=> colliderCheck == null ? true : colliderCheck.IsColliderDetected;
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,11 @@
|
||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 8a31fdb05e206b44cbe615353e924344
|
||||||
|
MonoImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
serializedVersion: 2
|
||||||
|
defaultReferences: []
|
||||||
|
executionOrder: 0
|
||||||
|
icon: {instanceID: 0}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
|
@ -0,0 +1,24 @@
|
||||||
|
using UnityEngine;
|
||||||
|
|
||||||
|
namespace Syntriax.Modules.Movement.ColliderCheck
|
||||||
|
{
|
||||||
|
public class TwoDimensionalBoxChildColliderCheck : MonoBehaviour, IColliderCheck, IState
|
||||||
|
{
|
||||||
|
[SerializeField] private LayerMask colliderMask = 0;
|
||||||
|
|
||||||
|
public LayerMask ColliderMask { get => colliderMask; set => colliderMask = value; }
|
||||||
|
|
||||||
|
public bool IsColliderDetected
|
||||||
|
=> StateEnabled ? Physics2D.OverlapBox(transform.position, transform.localScale, 0, ColliderMask) != null : true;
|
||||||
|
|
||||||
|
public bool StateEnabled { get; set; } = true;
|
||||||
|
|
||||||
|
#if UNITY_EDITOR
|
||||||
|
private void OnDrawGizmosSelected()
|
||||||
|
{
|
||||||
|
Gizmos.color = IsColliderDetected ? Color.green : Color.red;
|
||||||
|
Gizmos.DrawWireCube(transform.position, transform.lossyScale);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,11 @@
|
||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 090650329160e7b42ba89ccfad00375e
|
||||||
|
MonoImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
serializedVersion: 2
|
||||||
|
defaultReferences: []
|
||||||
|
executionOrder: 0
|
||||||
|
icon: {instanceID: 0}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
|
@ -0,0 +1,9 @@
|
||||||
|
namespace Syntriax.Modules.Movement
|
||||||
|
{
|
||||||
|
public interface IMovement
|
||||||
|
{
|
||||||
|
float SpeedMultiplier { get; set; }
|
||||||
|
bool IsActive { get; }
|
||||||
|
void Move(float x = 0f, float y = 0f, float z = 0f);
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,11 @@
|
||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 0c332dd4b3d45ea469fcfb42aa50e3db
|
||||||
|
MonoImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
serializedVersion: 2
|
||||||
|
defaultReferences: []
|
||||||
|
executionOrder: 0
|
||||||
|
icon: {instanceID: 0}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
|
@ -0,0 +1,13 @@
|
||||||
|
using UnityEngine;
|
||||||
|
|
||||||
|
namespace Syntriax.Modules.Movement
|
||||||
|
{
|
||||||
|
public static class IMovementExtensions
|
||||||
|
{
|
||||||
|
public static void Move(this IMovement movement, Vector2 moveVector)
|
||||||
|
=> movement.Move(moveVector.x, moveVector.y);
|
||||||
|
|
||||||
|
public static void Move(this IMovement movement, Vector3 moveVector)
|
||||||
|
=> movement.Move(moveVector.x, moveVector.y, moveVector.z);
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,11 @@
|
||||||
|
fileFormatVersion: 2
|
||||||
|
guid: a1d3a4ba263ed1648aa205a8a37a574b
|
||||||
|
MonoImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
serializedVersion: 2
|
||||||
|
defaultReferences: []
|
||||||
|
executionOrder: 0
|
||||||
|
icon: {instanceID: 0}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
|
@ -0,0 +1,7 @@
|
||||||
|
namespace Syntriax.Modules.Movement
|
||||||
|
{
|
||||||
|
public interface IState
|
||||||
|
{
|
||||||
|
bool StateEnabled { get; set; }
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,11 @@
|
||||||
|
fileFormatVersion: 2
|
||||||
|
guid: bc4a8610b5876e14ab81beef027850b2
|
||||||
|
MonoImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
serializedVersion: 2
|
||||||
|
defaultReferences: []
|
||||||
|
executionOrder: 0
|
||||||
|
icon: {instanceID: 0}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
|
@ -0,0 +1,3 @@
|
||||||
|
{
|
||||||
|
"name": "Movement"
|
||||||
|
}
|
|
@ -0,0 +1,7 @@
|
||||||
|
fileFormatVersion: 2
|
||||||
|
guid: c967acc4be781ca44b42a1887eb1ac7a
|
||||||
|
AssemblyDefinitionImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
|
@ -0,0 +1,8 @@
|
||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 6f411b98930309f4a9251106523e357a
|
||||||
|
folderAsset: yes
|
||||||
|
DefaultImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
|
@ -0,0 +1,8 @@
|
||||||
|
fileFormatVersion: 2
|
||||||
|
guid: a67ce871b9457064096bcbc81804138c
|
||||||
|
folderAsset: yes
|
||||||
|
DefaultImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
|
@ -0,0 +1,70 @@
|
||||||
|
using Syntriax.Modules.Movement.ColliderCheck;
|
||||||
|
using Syntriax.Modules.Movement.ColliderCheck.Ground;
|
||||||
|
using UnityEngine;
|
||||||
|
|
||||||
|
namespace Syntriax.Modules.Movement.SpecialAction
|
||||||
|
{
|
||||||
|
[RequireComponent(typeof(Rigidbody2D))]
|
||||||
|
public class PlatformerJump : MonoBehaviour, ISpecialActionActivate, ISpecialActionDeactivate, IState
|
||||||
|
{
|
||||||
|
public float JumpSpeed { get; set; } = 0f;
|
||||||
|
public bool StateEnabled { get; set; } = true;
|
||||||
|
|
||||||
|
private bool airSuspension = false;
|
||||||
|
private float fallMultiplier = 0f;
|
||||||
|
private float suspensionMultiplier = 0f;
|
||||||
|
|
||||||
|
private IGroundCheck groundCheck = null;
|
||||||
|
private Rigidbody2D rigid = null;
|
||||||
|
|
||||||
|
|
||||||
|
private void Awake()
|
||||||
|
{
|
||||||
|
JumpSpeed = 10f;
|
||||||
|
fallMultiplier = 1.5f * Time.fixedDeltaTime;
|
||||||
|
suspensionMultiplier = 1f * Time.fixedDeltaTime;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void Start()
|
||||||
|
{
|
||||||
|
rigid = GetComponent<Rigidbody2D>();
|
||||||
|
groundCheck = GetComponentInChildren<IGroundCheck>();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void FixedUpdate()
|
||||||
|
{
|
||||||
|
if (!StateEnabled)
|
||||||
|
return;
|
||||||
|
|
||||||
|
if (rigid.velocity.y < 0f)
|
||||||
|
ApplySuspension(suspensionMultiplier);
|
||||||
|
else if (!airSuspension)
|
||||||
|
ApplySuspension(fallMultiplier);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void ApplySuspension(float multipier)
|
||||||
|
{
|
||||||
|
rigid.velocity += Physics2D.gravity * multipier;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void Jump()
|
||||||
|
{
|
||||||
|
Vector2 velocity = rigid.velocity;
|
||||||
|
velocity.y = JumpSpeed;
|
||||||
|
rigid.velocity = velocity;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void OnActivation()
|
||||||
|
{
|
||||||
|
if (groundCheck.IsCollided())
|
||||||
|
Jump();
|
||||||
|
|
||||||
|
airSuspension = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void OnDeactivation()
|
||||||
|
{
|
||||||
|
airSuspension = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,11 @@
|
||||||
|
fileFormatVersion: 2
|
||||||
|
guid: e45c80df261a5714e9a22fd73a2cd39a
|
||||||
|
MonoImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
serializedVersion: 2
|
||||||
|
defaultReferences: []
|
||||||
|
executionOrder: 0
|
||||||
|
icon: {instanceID: 0}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
|
@ -0,0 +1,7 @@
|
||||||
|
namespace Syntriax.Modules.Movement.SpecialAction
|
||||||
|
{
|
||||||
|
public interface ISpecialActionActivate
|
||||||
|
{
|
||||||
|
void OnActivation();
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,11 @@
|
||||||
|
fileFormatVersion: 2
|
||||||
|
guid: a73af08e7cc67da42bdbfebb05a87d20
|
||||||
|
MonoImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
serializedVersion: 2
|
||||||
|
defaultReferences: []
|
||||||
|
executionOrder: 0
|
||||||
|
icon: {instanceID: 0}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
|
@ -0,0 +1,7 @@
|
||||||
|
namespace Syntriax.Modules.Movement.SpecialAction
|
||||||
|
{
|
||||||
|
public interface ISpecialActionDeactivate
|
||||||
|
{
|
||||||
|
void OnDeactivation();
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,11 @@
|
||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 81fa878c771128a4d8232969f0c2e460
|
||||||
|
MonoImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
serializedVersion: 2
|
||||||
|
defaultReferences: []
|
||||||
|
executionOrder: 0
|
||||||
|
icon: {instanceID: 0}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
Loading…
Reference in New Issue