132 lines
4.2 KiB
C#
132 lines
4.2 KiB
C#
using System.Collections;
|
|
using System.Collections.Generic;
|
|
using UnityEngine;
|
|
|
|
namespace TTTSC.Player.Character.Controller.Alive
|
|
{
|
|
public class CharacterMover : MonoBehaviour
|
|
{
|
|
[SerializeField]
|
|
private PlayerStateMachine _playerStateMachine;
|
|
[SerializeField]
|
|
private PlayerStateEnforcer _playerStateEnforcer;
|
|
[SerializeField]
|
|
private CharacterStateMachine _characterStateMachine;
|
|
[SerializeField]
|
|
private CharacterMovementConfig _characterConfig;
|
|
[SerializeField]
|
|
private CharacterHover _characterHover;
|
|
[SerializeField]
|
|
private PlayerInputReceiver _playerInputReceiver;
|
|
private Rigidbody _characterRigidbody;
|
|
[SerializeField, Tooltip("use Velocity mode for testing interactable objects + other things like pickackable items")]
|
|
private MoveTypes moveType;
|
|
[SerializeField]
|
|
private ForceModes _hoverForceMode, _moveForceMode;
|
|
|
|
private bool _performingMoveInput;
|
|
private Vector3 _moveDirection;
|
|
|
|
private void Awake()
|
|
{
|
|
_playerInputReceiver.MoveInputEvent += MoveInput;
|
|
}
|
|
|
|
void Start()
|
|
{
|
|
_characterRigidbody = _characterConfig.characterRigidbody;
|
|
}
|
|
|
|
#region Input event listeners
|
|
|
|
private void MoveInput(Vector2 moveDirection, bool performing)
|
|
{
|
|
_performingMoveInput = performing;
|
|
_moveDirection = new Vector3(moveDirection.x, 0, moveDirection.y);
|
|
}
|
|
|
|
#endregion
|
|
|
|
enum MoveTypes
|
|
{
|
|
Velocity,
|
|
AddForce
|
|
}
|
|
|
|
enum ForceModes
|
|
{
|
|
force,
|
|
acceleration,
|
|
impulse,
|
|
velocityChange
|
|
|
|
}
|
|
|
|
private void FixedUpdate()
|
|
{
|
|
Debug.Log("player speed: " + _characterRigidbody.velocity.magnitude);
|
|
|
|
Vector3 downVector = transform.TransformDirection(Vector3.down);
|
|
|
|
|
|
switch (_hoverForceMode)
|
|
{
|
|
case ForceModes.force:
|
|
_characterRigidbody.AddForce(_characterHover.hoverForce * downVector, ForceMode.Force);
|
|
break;
|
|
case ForceModes.acceleration:
|
|
_characterRigidbody.AddForce(_characterHover.hoverForce * downVector, ForceMode.Acceleration);
|
|
break;
|
|
case ForceModes.impulse:
|
|
_characterRigidbody.AddForce(_characterHover.hoverForce * downVector, ForceMode.Impulse);
|
|
break;
|
|
case ForceModes.velocityChange:
|
|
_characterRigidbody.AddForce(_characterHover.hoverForce * downVector, ForceMode.VelocityChange);
|
|
break;
|
|
}
|
|
|
|
switch (moveType)
|
|
{
|
|
case MoveTypes.Velocity:
|
|
VelocityChangeMover();
|
|
break;
|
|
case MoveTypes.AddForce:
|
|
AddForceMover();
|
|
break;
|
|
}
|
|
|
|
}
|
|
|
|
|
|
private void VelocityChangeMover()
|
|
{
|
|
|
|
Vector3 move = _characterConfig.moveSpeed * _moveDirection.x * Time.deltaTime * transform.right + _characterRigidbody.velocity.y * transform.up + _characterConfig.moveSpeed * _moveDirection.z * Time.deltaTime * transform.forward;
|
|
if(move != Vector3.zero)
|
|
Debug.Log(move);
|
|
_characterRigidbody.velocity = move;
|
|
}
|
|
|
|
private void AddForceMover()
|
|
{
|
|
float desieredSpeed;
|
|
|
|
/*
|
|
switch (_moveForceMode)
|
|
{
|
|
case ForceModes.force:
|
|
_characterRigidbody.AddForce(movement, ForceMode.Force);
|
|
break;
|
|
case ForceModes.acceleration:
|
|
_characterRigidbody.AddForce(movement, ForceMode.Acceleration);
|
|
break;
|
|
case ForceModes.impulse:
|
|
_characterRigidbody.AddForce(movement, ForceMode.Impulse);
|
|
break;
|
|
case ForceModes.velocityChange:
|
|
_characterRigidbody.AddForce(movement, ForceMode.VelocityChange);
|
|
break;
|
|
}*/
|
|
}
|
|
}
|
|
}
|