Add items, Pickup logic works

This commit is contained in:
2024-10-17 01:22:54 +02:00
parent ec487096bf
commit f594bdf112
72 changed files with 7258 additions and 918 deletions

View 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;
}
}