Add items, Pickup logic works
This commit is contained in:
92
Assets/Player/InteractionBehaviour.cs
Normal file
92
Assets/Player/InteractionBehaviour.cs
Normal file
@@ -0,0 +1,92 @@
|
||||
using System;
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using UnityEngine;
|
||||
using UnityEngine.Video;
|
||||
|
||||
[RequireComponent(typeof(MovementBehaviour))]
|
||||
public class InteractionBehaviour : MonoBehaviour, IObjectParentHolder {
|
||||
// Start is called before the first frame update
|
||||
private MovementBehaviour _movementBehaviour;
|
||||
|
||||
[SerializeField] private float _interactionDistance = 2.0f;
|
||||
|
||||
[SerializeField] private LayerMask _interactionLayer;
|
||||
|
||||
private EmptyCounter _lastInteractedObject = null;
|
||||
|
||||
public event EventHandler<OnSelectedCounterArgs> OnSelectedCounter;
|
||||
|
||||
[SerializeField] private Transform _holdItemTransform;
|
||||
private Object _heldObject;
|
||||
|
||||
public class OnSelectedCounterArgs : EventArgs {
|
||||
public EmptyCounter selectedCounter;
|
||||
}
|
||||
|
||||
void Start() {
|
||||
}
|
||||
|
||||
void Awake() {
|
||||
_movementBehaviour = GetComponent<MovementBehaviour>();
|
||||
}
|
||||
|
||||
// Update is called once per frame
|
||||
void Update() {
|
||||
}
|
||||
|
||||
public void HandleInteraction() {
|
||||
Vector2 inputVector = _movementBehaviour.desiredMovementDirection.normalized;
|
||||
Vector3 moveDirection = new Vector3(inputVector.x, 0, inputVector.y);
|
||||
Vector3 origin = transform.position;
|
||||
origin.y += 0.5f; //slight offset so we dont go under the counters
|
||||
RaycastHit hit;
|
||||
Debug.DrawRay(origin, transform.forward * _interactionDistance, Color.red);
|
||||
if (Physics.Raycast(origin, transform.forward, out hit, _interactionDistance, _interactionLayer)) {
|
||||
if (hit.transform.TryGetComponent(out EmptyCounter emptyCounter)) {
|
||||
if (_lastInteractedObject != hit.transform.gameObject) {
|
||||
SetSelectedCounter(emptyCounter);
|
||||
}
|
||||
}
|
||||
else {
|
||||
SetSelectedCounter(null);
|
||||
}
|
||||
}
|
||||
else {
|
||||
SetSelectedCounter(null);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public void Interact() {
|
||||
if (_lastInteractedObject == null) return;
|
||||
if (_lastInteractedObject.TryGetComponent(out EmptyCounter emptyCounter)) {
|
||||
emptyCounter.Interact();
|
||||
}
|
||||
}
|
||||
|
||||
private void SetSelectedCounter(EmptyCounter selectedCounter) {
|
||||
_lastInteractedObject = selectedCounter;
|
||||
OnSelectedCounter?.Invoke(this, new OnSelectedCounterArgs { selectedCounter = _lastInteractedObject });
|
||||
}
|
||||
|
||||
public Transform GetHolderTransform() {
|
||||
return _holdItemTransform;
|
||||
}
|
||||
|
||||
public void SetObject(Object obj) {
|
||||
_heldObject = obj;
|
||||
}
|
||||
|
||||
public Object GetObject() {
|
||||
return _heldObject;
|
||||
}
|
||||
|
||||
public void ClearObject() {
|
||||
_heldObject = null;
|
||||
}
|
||||
|
||||
public bool HasObject() {
|
||||
return _heldObject != null;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user