105 lines
3.0 KiB
C#
105 lines
3.0 KiB
C#
using System.Collections;
|
|
using System.Collections.Generic;
|
|
using TMPro;
|
|
using UnityEngine;
|
|
|
|
public class RepairStationBehaviour : MonoBehaviour, IInteractable, IObjectParentHolder {
|
|
[SerializeField] private Transform _holderTransform;
|
|
[SerializeField] private TextMeshProUGUI _countDownText;
|
|
private Object _object;
|
|
|
|
private float _timeToFix;
|
|
private float _costToFix;
|
|
|
|
private double _countDown;
|
|
|
|
private bool _fixedCurrentObject = false;
|
|
|
|
InteractionBehaviour _interactionBehaviour;
|
|
|
|
|
|
|
|
public void Interact(InteractionBehaviour interactionBehaviour) {
|
|
_interactionBehaviour = interactionBehaviour;
|
|
if (interactionBehaviour.HasObject()) {
|
|
//Player has an object
|
|
//Check if its broken
|
|
Object obj = interactionBehaviour.GetObject();
|
|
if (obj.IsBroken) {
|
|
//Object needs fixing
|
|
|
|
HUDManager.Instance.ShowRepairHUD();
|
|
_timeToFix = obj.ObjectSo.timeToFix;
|
|
_costToFix = obj.ObjectSo.costToFix;
|
|
|
|
//Add a random deviation to the time and cost
|
|
_timeToFix += Random.Range(-10f, 5f);
|
|
_costToFix += Random.Range(-2f, 15f);
|
|
|
|
//Round to 1 decimal
|
|
_timeToFix = (float) System.Math.Round(_timeToFix, 1);
|
|
_costToFix = (float) System.Math.Round(_costToFix, 1);
|
|
|
|
|
|
HUDManager.Instance.SetRepairHudItem(this, obj, _timeToFix, _costToFix);
|
|
}
|
|
} else if (_fixedCurrentObject && this.HasObject()) {
|
|
//Player has nothing and the object is fixed
|
|
//Give the object to the player
|
|
_object.setObjectParent(_interactionBehaviour);
|
|
ClearObject();
|
|
}
|
|
}
|
|
|
|
public void ConfirmRepair() {
|
|
_interactionBehaviour.GetObject().setObjectParent(this);
|
|
|
|
_countDown = _timeToFix;
|
|
_countDownText.gameObject.SetActive(true);
|
|
|
|
//Remove the cost from the player
|
|
GameController.Instance.Money -= _costToFix;
|
|
|
|
HUDManager.Instance.HideCurrentHUD();
|
|
}
|
|
|
|
private void Update() {
|
|
if (_countDown > 0) {
|
|
_countDown -= Time.deltaTime;
|
|
_countDownText.text = _countDown.ToString("F2");
|
|
if (_countDown <= 0) {
|
|
//Repair done
|
|
_object.IsBroken = false;
|
|
_fixedCurrentObject = true;
|
|
SoundFXController.Instance.PlayOvenDoneFX();
|
|
_countDownText.gameObject.SetActive(false);
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
|
|
#region Counter stuff
|
|
|
|
public Transform GetHolderTransform() {
|
|
return _holderTransform;
|
|
}
|
|
|
|
public void SetObject(Object obj) {
|
|
_object = obj;
|
|
}
|
|
|
|
public Object GetObject() {
|
|
return _object;
|
|
}
|
|
|
|
public void ClearObject() {
|
|
_object = null;
|
|
}
|
|
|
|
public bool HasObject() {
|
|
return _object != null;
|
|
}
|
|
|
|
#endregion
|
|
} |