sleep increase the energy

This commit is contained in:
Vladimir Koshevarov
2023-03-14 13:36:24 +02:00
parent f6a8ca9d9d
commit dbd1d16a24
9 changed files with 60 additions and 76 deletions
+15 -42
View File
@@ -1,9 +1,5 @@
using Assets.Scripts.Actions.Interfaces;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
using System.Runtime.Serialization;
using UnityEngine;
using UnityEngine.AI;
@@ -21,10 +17,10 @@ public class Player : MonoBehaviour
[SerializeField]
private Transform _holdPoint;
private PlayerStates _currentActing;
private AnimationStates _currentAnimation;
public Dictionary<StatsId, Stat> Stats;
public IWorkPlace WorkPlace { get; set; }
private readonly Queue<PlayerTasks> _tasks = new Queue<PlayerTasks>();
private PlayerTasks _currentTask;
@@ -47,12 +43,14 @@ public class Player : MonoBehaviour
Instance = this;
DontDestroyOnLoad(gameObject);
}
private void Start()
{
TimeManager.OnMinuteChanged += UpdateStatsByClock;
_animator.applyRootMotion = true;
_navAgent.updatePosition = false;
Stats = PlayerStats.CreateInitialStats();
_currentActing = PlayerStates.Awake;
}
private void OnDestroy()
@@ -62,7 +60,7 @@ public class Player : MonoBehaviour
private void Update()
{
if (IsBlockingAnimation(_currentAnimation))
if (PlayerHelper.IsBlockingAnimation(_currentAnimation))
{
if (IsAnimationStatePlaying(0))
{
@@ -116,7 +114,6 @@ public class Player : MonoBehaviour
{
_navAgent.Warp(desiredPosition);
_navAgent.updatePosition = false;
}
private TaskStatus MoveToPoint()
@@ -176,20 +173,20 @@ public class Player : MonoBehaviour
_OnAnimationFinish = onAnimationFinish;
SetPlayerAnimation(newState);
}
public void SetPlayerAnimation(AnimationStates newState)
{
if (newState == _currentAnimation)
{
return;
}
_animator.Play(GetEnumMemberValue(newState));
_animator.Play(PlayerHelper.GetEnumMemberValue(newState));
_currentAnimation = newState;
}
public bool IsAnimationStatePlaying(int animLayer)
{
string stateName = GetEnumMemberValue(_currentAnimation);
string stateName = PlayerHelper.GetEnumMemberValue(_currentAnimation);
var stateInfo = _animator.GetCurrentAnimatorStateInfo(animLayer);
return stateInfo.IsName(stateName) && stateInfo.normalizedTime < 1.0f;
@@ -200,17 +197,21 @@ public class Player : MonoBehaviour
_tasks.Enqueue(task);
}
public void SetPlayerActing(PlayerStates state)
{
_currentActing = state;
}
public void UpdateStatsByClock()
{
Stats[StatsId.Food].deduct(0.034f); // 48 hours it's 100, 100/2880=~0.034 per minute
if (_currentAnimation != AnimationStates.Sleeping)
if (_currentActing != PlayerStates.Sleeping)
{
Stats[StatsId.Energy].deduct(0.1f); // 24 hours it's 100, 100/1440=~0.096 per minute
}
else
{
Stats[StatsId.Energy].increase(1f);
Stats[StatsId.Energy].increase(0.2f);
}
}
@@ -218,41 +219,13 @@ public class Player : MonoBehaviour
{
Stats[StatsId.Money].deduct(amount);
}
public float Eat()
{
Stats[StatsId.Food].increase(10);
return Stats[StatsId.Food].Value;
}
private static string GetEnumMemberValue<T>(T value)
where T : struct, IConvertible
{
return typeof(T)
.GetTypeInfo()
.DeclaredMembers
.SingleOrDefault(x => x.Name == value.ToString())
?.GetCustomAttribute<EnumMemberAttribute>(false)
?.Value;
}
private static bool IsBlockingAnimation<T>(T value)
where T : struct, IConvertible
{
var enumType = typeof(T);
var memInfo = enumType.GetMember(value.ToString());
var attr = memInfo.FirstOrDefault()?.GetCustomAttributes(false).OfType<BlockingAnimation>().FirstOrDefault();
return attr != null;
}
public void SetContainerItem(ContainerItem containerItem)
{
containerItem.transform.parent = _holdPoint;
containerItem.transform.localPosition = Vector3.zero;
_containerItem = containerItem;
}
public ContainerItem GetContainerItem()
{
return _containerItem;